• Like
Gestion de nubes de servidores
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Gestion de nubes de servidores

  • 369 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
369
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
20
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. UNIVERSIDAD DE EL SALVADOR FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE DEPARTAMENTO DE INGENIERA CATEDRA: PROTOCOLOS DE COMUNICACIÓN CATEDRÁTICO: ING. JUAN CARLOS PEÑA TEMA: GESTIÓN DE NUBES DE SERVIDORES INTEGRANTES: BR. GÓMEZ ASCENCIO, CARLOS BENJAMIN BR. MENDOZA FIGUEROA, HENRY RAFAEL 2. PLANTEAMIENTO DEL PROBLEMALuego de un reñido proceso de selección, se la ha contratado como parte del Staff de IT quegestiona a una nube de servidores web que brindan balanceo de carga a varios sitios web. Esta nubecuenta con 60 servidores web que usan el mismo software, configurados prácticamente de manera
  • 2. idéntica. Cuando se quiere hacer alguna actualización o cambio en la configuración, se hace demanera manual en un servidor a la vez, lo que conlleva a inestabilidades, y tiempos muertos debidoa errores humanos en las configuraciones, y el tiempo que conlleva realizar las configuracionesmismas. Por tanto el primer proyecto que le asignan es buscar una manera de sincronizar losservidores de manera tal que cuando se realice alguna modificación en alguno de ellos, estasmodificaciones se reflejen en el resto. Además, deberá considerarse que la sincronización deberáaplicarse únicamente a los hosts que se tengan registrados en las bases de datos de credenciales(LDAP o Active Directory). 3. SERVIDORES WEBEn informática, un servidor es un tipo de software que realiza ciertas tareas en nombre de losusuarios. El término servidor ahora también se utiliza para referirse al ordenador físico en el cualfunciona ese software, una máquina cuyo propósito es proveer datos de modo que otras máquinaspuedan utilizar esos datos.Este uso dual puede llevar a confusión. Por ejemplo, en el caso de un servidor web, este términopodría referirse a la máquina que almacena y maneja los sitios web, y en este sentido es utilizadapor las compañías que ofrecen hosting o hospedaje. Alternativamente, el servidor web podríareferirse al software, como el servidor de HTTP de Apache, que funciona en la máquina y maneja laentrega de los componentes de los páginas web como respuesta a peticiones de los navegadores delos clientes.3.2 MONTANDO SERVIDOR WEB (DEBIAN)Para empezar necesitamos conocer la red que nuestro ISP nos proporciona, esto lo averiguamos conel comando #ifconfig, en nuestro caso la red que utilizaremos sera 192.168.0.0 .3.2.1 IP ESTATICAComo primer paso necesitamos configurarle a nuestra tarjeta de red una ip fija o estatica, esto esporque si vamos a ofrecer servicios a internet deberemos abrir ciertos puertos a nuestro Router, parapoder asignar una direccion X a un puerto X, cosa que no fuera posible con una IP DINAMICA.Lo haremos editando el archivo interfaces, accediendo asi:# nano /etc/network/interfacesy colocar lo siguiente, para el caso nuestro:auto loiface lo inet loopbackiface eth0 inet static 2
  • 3. address 192.168.0.104netmask 255.255.255.0network 192.168.0.0broadcast 192.198.0.255gateway 192.168.0.100Con esto ya podemos direccionar un puerto del router a nuestra ip fija.3.2.2 ACCESO REMOTO CON SSH (SecureShell)SSH (Secure SHell) es una forma segura con la que vamos a poder conectarnos a nuestro servidorde manera remota. Podremos conectarnos a el por nuestra red siendo de manera local o desdeInternet.apt-get updateSeguidamente instalamos el programa para el acceso remoto seguro SSHapt-get install sshAhora reiniciamos la maquina para ver si arranca bien en el iniciorebootUna vez tengamos reiniciada la maquina vamos a conectarnos a ella desde otro ordenador denuestra red. Si recordamos el articulo anterior configuramos una IP fija para nuestra tarjeta de red,así que ahora nos vamos a conectar a esa IP.Para los usuarios LINUX sera mas facil conectarnos ya que no necesitamos instalar algunprograma. Ejecutamos#ssh 192.168.0.103 (ip del ordenador al que nos conectaremos remotamente)El sistema Secure SHell genera una llave de autentificación y si nos equivocamos el sistema nosbeta para no dejarnos pasar mas. Esta es una de las medidas de seguridad que nos ofrece esteprograma.Le indicamos YES …Luego la contraseña del equipo al que nos conectaremos y asi ya tendremos remotamente controlsobre el equipo de manera local.3.2.3 INSTALANDO APACHE SERVERSeguidamente instalaremos el paquete Apache2 y acto seguido el apache2-mpm-prefork:#apt-get install apache2#apt-get install apache2-mpm-prefork 3
  • 4. Una vez finalizada la instalación abrimos un navegador en nuestro PC de escritorio e introducimosla IP del servidor ( en mi caso http://192.168.0.104 ) y veremos el mensaje ( It works! ), algo así:Despues de instalarlo podemos cambiar el directorio raiz de nuestro servidor, editando el archivoubicado en /etc/apache2/sites-available/default.3.2.4 SOPORTE PARA PHPAhora bien vamos a dar soporte PHP5 a nuestro apache 2 y para eso instalamos.#apt-get install php5 libapache2-mod-php5 php5-commonNos pregunta si deseamos instalarlo, y todo el asunto le decimos que si, y para asegurarnos que nohay errores crearemos un archivo .php y lo colocamos en el directorio raiz que asignamosanteriormente. Ejemplo php5.php y escribirmos lo siguiente: <?php phpinfo(); ?>Luego para comprobar en nuestro navegador escribimos http://localhost/php5.php y listo!3.2.5 INSTALANDO MYSQL Y PHPMYADMINArrancamos nuestro sistema y nos logeamos como ( root ) e instalamos los siguientes paquetes:#apt-get install mysql-server-4.1 mysql-client-4.1 php4-mysqlPara facilitarnos manejo y la administración de nuestras bases de datos vamos a usar el entorno webPhpMyAdmin, con este software podremos crear, borrar, modificar, dar permisos, bueno podemoshacer todo a lo que se refiere a la administración de bases de datos MySQL. Comenzamos lainstalación con:#apt-get install phpmyadminSeguramente recordareis el directorio raíz de nuestro servidor web. Resulta que el programaphpmyadmin se instala en la ruta /var/www/ de nuestro apache2 por defecto pero nosotros lavamos a enlazar a /home/usuario/www/ para poder acceder a ella desde un navegador, así queahora tendremos que hacer otro enlace simbólico para poder ver el entorno web de phpmyadminde la siguiente manera …#ln -s /var/www/phpmyadmin /home/usuario/www/phpmyadminUna vez creado el enlace debemos ver ya el directorio de la aplicación en la raíz de nuestro 4
  • 5. servidor.Abrimos un navegador e introducimos la dirección http://ipdelservidor/www/phpmyadmin/ ( Enmi caso http://192.168.0.104/www/phpmyadmin/ )como podéis ver en la imagen siguiente:Daremos click sobre el directorio de phpmyadmin y veras una pantalla como esta:Con respecto a montar servidores web, nos quedaremos hasta aquí, unicamente con las instalacionesbasicas de un servidor web.4. BALANCEADOR DE CARGAEl balanceador de carga es capaz de repartir la carga entre varios servidores basándose en el métodoRound Robin basado en en Software Libre PEN Load Balancer. Este mismo trata de dar paso acada uno de los servidores correlativamente. PEN es capaz de colgar de el y repartir la carga entre15 servidores como máximo. 5
  • 6. Para su instalacion vamos a tomar en cuenta 3 aspectos importantes : • Puente de Red o Bridge. • Balanceo de Carga Con PEN. • Posibles Usos.4.1 INSTALANDO NUESTRO BRIDGE.Ahora vamos a instalarle el software llamado ( bridge-utils ) el cual nos facilita herramientas parapoder montar el puente de red. Lo instalamos con:#apt-get install bridge-utilsUna vez instalado este software y contando con que no configuramos las tarjetas de redanteriormente vamos a crear una configuración especifica que montará ( br0 ) como una tarjeta dered y hará que las cuatro tarjetas actúen como una sola, con una sola dirección IP y de maneratransparente.Para poder enviar todas las peticiones de un puerto especifico desde el Router hacia un ordenadoren cuestión necesitamos que este tenga una IP fija y no dinámica. Si en vez de cuatro tarjetas tenéistres o dos no es problema ya que tan solo tendréis que agregar vuestras interfaces en la linea( bridge_ports eth0 eth1 eth2 eth3 ). Sabidos estos cuatro términos vamos a editar el archivo( interfaces ) y después lo configuraremos.Antes de hacer esto no esta de mas que tengamos una copia de seguridad del archivo existente asísiempre podremos recurrir a la versión existente del archivo en un momento dado. Hacemos lacopia de seguridad con:#cp /etc/network/interfaces /etc/network/interfacesOKLuego de realizar la copia modificamos su contenido y agregamos lo siguiente:uto loiface lo inet loopbackauto br0iface br0 inet staticaddress 192.168.0.100network 192.168.0.0netmask 255.255.255.0broadcast 192.168.0.255gateway 192.168.0.254bridge_ports eth0 eth1 eth2 eth3bridge_maxwait 0Hay que tomar en cuenta que las ips que se utilizan son las de nuestra red, ademas tenemos quecambiar las interfaces dependiendo de las tarjetas de red que se utilicen, luego guardaremos elarchivo y reiniciaremos la red, asi que tendremos que reiniciara el demonio para cargar lasconfiguraciones de la siguiente manera:#etc/init.d/networking restartAhora para comprobar que todo fue bien y que se creo el interfaz ( br0 ) con la ip xxx.xxx.xxx.xxxx 6
  • 7. y las demás tarjetas se han quedado sin IP teclearemos el siguiente comando#ifconfig4.2 INSTALACION DE PENBien después de tener el puente de red o bridge funcionando vamos a continuar por instalar PENen nuestra maquina con:#apt-get install penPEN es tan simple que bajo una linea de comandos podremos ejecutarlo completamenteconfigurado. Si introducimos ( pen ) en nuestra terminal veremos las opciones simplificadas de lasque dispone:Una vez instalado vamos lanzaremos a PEN con una simple linea de comandos como esta …pen -r -a -f -d 192.168.0.100:80 192.168.0.104:80 192.168.1.211:80 192.168.0.105:80Al final de la carga se queda en espera y muestra una tabla como esta: 7
  • 8. Bien, ahora ya tenemos nuestro balanceador de carga preparado para ir repartiendo peticioneshacia el puerto 80 entre las IPs de nuestros servidores. 5. TOPOLOGIA UTILIZADA EN LA GESTION DE NUBES DE SERVIDORES 8
  • 9. 6. INSTALACION Y USO DE PUPPET6.1 PUPPETNos permite manejar varios equipos desde un nodo central mediante definiciones de módulos enarchivos de configuración, que pueden ser paquetes, archivos, servicios, etc, independientementede la distribución. Obviamente, homogenizar la distribución a utilizar es preferible para mantenerlas mismas versiones y evitar errores en implementaciones de las ramas.PUPPET es una herramienta que facilita el trabajo de un administrador de sistemas permitiéndolehacer instalaciones, actualizaciones, cambios de configuraciones, etc... en equipos remotos. 9
  • 10. Puppet se compone de varios elementos: • Un servidor -> puppetmaster. • Un servicio para los clientes -> puppetd. • Un lenguaje declarativo para definir lo que se quiere hacer en los clientes. • Un sistema para obtener datos de los clientes -> facter.6.2 INSTALACION DE PUPPETPara instalar puppet, tendremos que hacer varias cosas: • Instalar un servidor puppet. • Configurar el servidor puppet. • Instalar el cliente puppet en todas las máquinas que queramos administrar. • Configurar el cliente puppet.6.2.1 INSTALACION DE UN SERVIDOR PUPPETAntes de comenzar debemos verificar que nuestras definiciones del host y dominio sean correctasen todos los equipos, si no tendremos muchos problemas al entablar el dialogo de servidor-cliente.Revisamos el archivo /etc/hosts donde incluiremos el FQDN para 127.0.1.1127.0.0.1 localhost127.0.1.1 carlos.dominio.com gatio192.168.0.105 henry.dominio.comDebido a que no poseemos un servidor DNS incluiremos tambien las direcciones IP de nuestrosnodos tanto en el servidor como en el cliente.El FQDN debe ser incluido tambien en /etc/hostname, quedando nuestro archivo:carlos.dominio.comDespues de realizar los cambios ejecutamos:# /etc/init.d/hostaname.shComprobamos los resultados con #hostname: carlos.dominio.comLuego con #dnsdomainname dominio.comCon esto previamente establecido podemos iniciar la instalacion, Debian incluye en su repositorio a 10
  • 11. puppetmaster y puppet, los cuales seran instalados dependiendo del objetivo, puppetmaster seinstalara en nuestro servidor y puppet en nuestros clientes.Como metodo de autentificación con los clientes, puppetmaster utiliza llaves SSL, las cualesdeberemos firmar para cada uno de ellos. Para el manejo de los certificados existe un script llamadopuppetca con el cual aparte de firmar llaves podremos revocarlas o renovarlas si es necesario, tantopara cada cliente independiente o todos juntos.Instalando puppetmaster en nuestro servidor ejecutamos la linea de codigo:#apt-get install puppetmaster#apt-get install puppetmastered --n - daemonize -vdDonde -v es para desplegar todos los mensajes generados (verbose) y -d para indicar que estamos enmodo debug asi que queremos mas mensajes. Sin problemas debemos obtener notice: Starting Puppet master version 2.6.2Lo siguiente es firmar los certificados para cada cliente que lo solicite, asi que despues de instalarpuppet en nuestros clientes y verificar el FQDN en cada uno de ellos ejecutaremos:(CLIENTES)# apt-get install puppet#apt-get install --server henry.dominio.com -tvd -w 10donde -server indica el FQDN del servidor, -t para modo de pruebas, y -w para indicar queesperaremo 10 segundos para que el servidor firme nuestro certificado.Al ejecutarlo podemos observar en el servidor: notice: henry.dominio.com has a waiting certificate requestAhora firmamos la llave, y ejecutamos:(SERVIDOR)#puppetca -lPara listar todas las peticiones pendientes de ser firmadas donde debemos ver a la que generaremosdesde henry.dominio.com, si es correctamente procedemos a ejecutar:(SERVIDOR)#puppetca -sign henry.dominio.compara aceptar la peticion, donde observamos: notice: Signed certificate request for henry.dominio.comPor ahora dejaremos nuestros clientes listos para iniciar, primero haremos posible ejecutar losscripts de inicializacion para puppet en /etc/default/puppet (en servidor y clientes)#nano /etc/default/puppet 11
  • 12. #Start puppet on boot? START=yes #Startup options DAEMONS_OPTS=""Por ultimo definimos la configuracion del cliente en /etc/puppet/puppet.conf, la direccion d enuestro servidor (solo para los clientes): [main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter templatedir=/var/lib/puppet/templates certname="Nombre de Servidor" autosign=false6.2.2 CREAR ESQUELET MANIFESTSi no estuviera creado el directorio de clases y/o el directorio manifests, lo creamos:# mkdir -p /etc/puppet/manifests/classes6.2.3 CREAR EL FICHERO SITE.PPEste es un fichero de control fundamental del servidor puppet. Podríamos crearlo con:# touch /etc/puppet/manifests/site.ppSupongamos que en el directorio /etc/puppet/manifests/classes/ hemos creado un fichero llamadotest_class.pp con el siguiente contenido:class test_class {file {"/tmp/fichero.test":ensure => present,mode => 744,owner => root,group => root}}En este archivo hemos definido la clase test_class, que contiene una definición del tipo file que sepuede leer de la siguiente forma: Debe existir el archivo /tmp/fichero.test con permisos 744 y debepertenecer al usuario root y al grupo root.Existen otros tipos de definición que podemos utilizar y que son particularmente útiles. Porejemplo: • package, para el manejo de de software. • exec, para ejecutar comandos en el sistema del cliente. • cron, para programar tareas en el sistema del cliente. • Existen muchos más tipos de definiciones.Podemos añadir un contenido básico al fichero site.pp, y utilizar en él la clase test_class creada en 12
  • 13. anteriormente:# Importamos todas las clases del directorioclassesimport "classes/*.pp"# En node default incluimos las tareas para todos los nodosnode default {include test_class}# Definimos un nodo de pruebasnode "a25-pro" inherits default {# include clase_a_probar}Crearemos las tareas en el directorio /etc/puppet/manifests/classes y las llamaremos con include enel nodo de pruebas. Las ejecutaremos. Y si todo va bien, pasaremos la tarea al nodo default para quese ejecute en todos los clientes.Una vez terminada la configuración del servidor puppet, si no está iniciado, lo iniciamos:# /etc/init.d/puppetmaster startNo es necesario reiniciarlo después de hacer cambios en los ficheros de configuración. El servidorestá monitoreando los archivos de configuración y los reelerá a los pocos segundos de sermodificados.6.3 FUNCIONAMIENTO DE PUPPET Y COMPROBACIONESNo olvidemos que, para que el sistema funcione, deben estar iniciados puppetmaster en el servidory puppet en el cliente. Si no lo están, los iniciamos:#/etc/init.d/puppetmaster start (en el servidor)#/etc/init.d/puppet start (en el cliente)Si hubiera algún problema en el funcionamiento, lo mejor es echar un vistazo a los logs, que seencuentran almacenados en /var/log/puppetEl tiempo predeterminado de contacto del cliente con el servidor, al instalar el sistema, es de 30minutos, cosa que podemos cambiar. Por cierto, el tiempo hay que indicarlo en segundos.Para probar si una tarea se ejecuta correctamente en un cliente, paramos puppet y ejecutamospuppetd -t:#/etc/init.d/puppet stop#puppetd -tUna vez comprobado que las tareas se han ejecutado, volvemos a iniciar el servicio: 13
  • 14. #/etc/init.d/puppet startNo es necesario reiniciar puppet ni puppetmaster después de hacer cambios en los ficheros deconfiguración. El servidor está monitoreando los archivos de configuración y los reelerá a los pocossegundos de ser modificados.7. ALMACENAMIENTO DE LA INFORMACION DE NODO EN LDAPPor defecto, puppetmasterd busca nodos en sus manifiestos normal, pero puede además o en lugarde tener que buscar en el LDAP. Esto funciona especialmente bien si usted ya está almacenando lainformación de su anfitrión en LDAP.PORQUE HACER ESTO?Existen múltiples beneficios a los nodos de almacenamiento en LDAP en lugar de utilizarmarionetas incorporado en el nodo de apoyo: • Otras aplicaciones pueden acceder fácilmente a los mismos datos • Todos los atributos en los nodos de LDAP son asignados como variables en la configuración de marionetas, así como los hechos, por lo que usted puede configurar fácilmente los atributos de las clases individuales • Es sencillo para permitir que otras aplicaciones para modificar estos datos para configurar los nodos (por ejemplo, como parte de un proceso de implementación), lo que es más fácil apoyar a la generación de configuraciones de PUPPET.7.1 PUPPET PRE-RUBY Y LDAP VALIDATIONPuede ejecutar las siguientes pruebas para asegurarse de que la Biblioteca Ruby-LDAP y elsoftware de LDAP están configurados correctamente:#ruby -rldap -e puts :installedSi esto vuelve instalado, entonces usted puede intentar:#ruby -rpuppet -e p Puppet.features.ldap?Estos son, básicamente, hacer lo mismo, por lo que sea que ambos tienen éxito o fracasan los dos, ysi tanto éxito, entonces los nodos LDAP debería funcionar.7.2 LO ATRIBUTOS DEL NODOComo se ha mencionado, todos los atributos devueltos por los nodos de LDAP o nodos padre seráasignado como una variable en las configuraciones de títeres durante la compilación. Atributos convarios valores, se creará como matrices. Atributo PuppetVar permite pasar variables a un nodo.Tenga en cuenta variables no pueden tener espacio en el par nombre / valor o entre comillas.Comoejemplo, tomemos los siguientes nodos de LDAP simple:dn: cn=basenode,ou=Hosts,dc=madstop,dc=com objectClass: device objectClass:ipHost objectClass: puppetClient objectClass: top cn: basenode environment:production ipHostNumber: 192.168.0.1 description: The base node puppetClass: 14
  • 15. baseclass puppetVar: config_exim=true puppetVar:config_exim_trusted_users=lludwig,lak,joe dn:cn=testserver,ou=Hosts,dc=madstop,dc=com objectClass: device objectClass: ipHostobjectClass: puppetClient objectClass: top cn: testserver environment: testingipHostNumber: 192.168.0.50 description: My test server l: dc1 puppetClass:testing puppetClass: solarisEn este caso, el resultado final para el nodo será la siguiente (se muestra como YAML)::objectClass: - device - ipHost - puppetClient - top :cn: testserver:environment: testing :description: My test server :l: dc1 :classes: - testing -solaris :dn: cn=testserver,ou=Hosts,dc=madstop,dc=com7.3 MODIFICAR EL ESQUEMA LDAPEn primer lugar, tiene que proporcionar el esquema de marionetas en el servidor LDAP.Ustedpuede encontrar el esquema de Puppet en Git. Colocar este esquema en el directorio de esquema, enDebian, por ejemplo, esto sería / etc / ldap / schema. Recomiendo mantener el nombrepuppet.schema.Con el archivo de esquema en su lugar, modificar su slapd.conf para cargar este esquema añadiendoa la lista de archivos de esquema cargado:#include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema#include /etc/ldap/schema/nis.schema include#/etc/ldap/schema/inetorgperson.schema#include /etc/ldap/schema/puppet.schemaReiniciar el servidor, asegurándose de que se trata de una copia de seguridad, y eso es todo.7.4 CARGANDO LOS NODOS LDAPEn mi opinión, el espacio sigue siendo la herramienta LDAP deprimente de repuesto.Yogeneralmente uso el mío ldapsh herramienta de gestión de LDAP, pero que no funciona bien para lacarga de datos. Sin embargo usted decide cargar los datos, es necesario crear entradas de host (porlo general las entradas de dispositivos, probablemente con ipHost como una clase auxiliar) y luegoañadir los datos de marionetas.Esto es lo que mi definición de estación de trabajo se ve como enLDAP:dn: cn=culain,ou=Hosts,dc=madstop,dc=com objectClass: device objectClass: ipHostobjectClass: puppetClient objectClass: top cn: culain environment: productionipHostNumber: 192.168.0.3 puppetclass: webserver puppetclass: puppetserverpuppetclass: mailserver parentnode: basenode7.5 CONFIGURACION DE PUPPET PARA USAR LDAPUna vez que usted tiene los datos en LDAP, sólo tiene que configurar de marionetas a buscar allí.Es casi siempre puppetmasterd que se busca en LDAP así que tenemos que configurar elpuppetmasterd] sección del archivo de configuración puppet.conf. En la versión de marionetas 0,24y más tarde, esto significa la selección de la terminal de nodo adecuado, la opción ldapnodesanterior es totalmente obsoleto y no debería ser utilizado. Para los nodos de LDAP que usar LDAP 15
  • 16. como el término en la opción de configuración node_terminus: [puppetmasterd] node_terminus = ldap ldapserver = ldapserver.yourdomain.comldapbase = dc=puppetSólo hay un ajustes necesarios: ldapbase de dónde buscar para los nodos de LDAP. Es posible quetambién desee especificar ldapserver, ya que el valor predeterminado es ldap, lo que probablementeno va a funcionar para la mayoría de la gente.En otras palabras, permite la búsqueda de nodos de LDAP mediante el establecimiento de lanode_terminus a LDAP, y luego proporcionar la información necesaria para que funcione. Es unabuena idea especificar en realidad el árbol de los Ejércitos como su base de búsqueda (por ejemplo,ldapbase = ou = Hosts, dc = madstop, dc = com), pero mi base de datos es lo suficientementepequeño que no tiene importancia.Con la versión 0.23.2 y luego que no es necesario reiniciar el demonio puppetmasterd peroprobablemente es sensible. 16
  • 17. 17