Satellite : Déploiement d'OS Red Hat via Red Hat Satellite

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

Contents

Red Hat Satellite

Software version 5.4.1
Operating System RHEL 6.2
Website Red Hat Website
Last Update 22/06/2012
Others

1 Introduction

Un serveur Red Hat Satellite est une solution qui va permettre de déployer automatiquement des OS Red Hat via PXE/DHCP. Ensuite vous allez pouvoir gérer différents profils d'installation, gérer les mises à jours et faire tout un tas d'administration de façon simplifiée.

Si vous n'avez pas les sous ou tout simplement souhaitez faire un lab, vous pouvez utiliser son équivalent gratuit : Spacewalk (d'ou le logo).

Satellite schema.gif

2 Prérequis

Ayez un repository locale ou un accès direct au RHN (c'est l'idéale, car de toutes façons, il vous en faudra un).

2.1 Packages

Avant de commencer, il va falloir vérifier que nous avons installer le nécessaire :

Command yum
yum groupinstall base
yum install syslinux

  • Base : c'est le minimum pour que Satellite s'installe
  • syslinux : nécessaire pour le PXE

2.2 Hostname

Faites attention à bien mettre le hostname et l'IP associée (adaptez à votre configuration) :

Command
echo "x.x.x.x     satellite-master.deimos.fr satellite-master" >> /etc/hosts
echo "satellite-master.deimos.fr" > /proc/sys/kernel/hostname
service network restart

2.3 Désactiver SELinux

Pour l'installation, le plus simple est de désactiver temporairement le service SELinux :

Command setenforce
setenforce 0

Ensuite il est conseillé de le laisser désactiver (voir la doc pour la persistance)

2.4 Sysctl

Nous allons activer l'IP forwarding :

Command sysctl
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2.5 DNS

Vérifiez à ce que tous les futurs clients aient (tout comme le serveur) accès au serveur DNS !!! Car dans notre cas le serveur va s'appeler 'satellite-master', et il est très important qu'il reste joignable par n'importe quel serveur à ce nom, sinon le PXE ne pourra pas fonctionner.

3 Installation

3.1 Satellite Master

Pour l'installer, c'est assez simple, il y a un installer qui fait tout. Cependant, il va vous falloir le DVD de Red Hat pour les dépendances (je vous conseil un dépot local), et de copier l'installer Satellite en local (/home/sat dans mon cas).

Note : utilisez l'option '--disconnected' si vous êtes derrière un proxy lors de l'installation.

Puis nous allons lancer simplement l'installation :

Command install.pl
> /home/sat/install.pl
* Starting the Red Hat Network Satellite installer.
* Performing pre-install checks.
* Pre-install checks complete.  Beginning installation.
* RHN Registration.
** Registration: Disconnected mode.  Not registering with RHN.
* Checking for uninstalled prerequisites.
** Checking if yum is available ...
There are some packages from Red Hat Enterprise Linux that are not part
of the @base group that Satellite will require to be installed on this
system. The installer will try resolve the dependencies automatically.
However, you may want to install these prerequisites manually.
Do you want the installer to resolve dependencies [y/N]? y

On réponds 'y' à cette question pour qu'il installe de lui même les packages nécessaire.

On va attendre un peu puis donner le mail et certificat :

Command
* Applying updates.
* Installing RHN packages.
Warning: more packages were installed by yum than expected:
        cdparanoia-libs
        cups
        cvs
        foomatic
        foomatic-db
        foomatic-db-filesystem
        foomatic-db-ppds
        gdb
        gettext
        ghostscript
        ghostscript-fonts
        gstreamer
        gstreamer-plugins-base
        gstreamer-tools
        iso-codes
        java-1.5.0-gcj
        java_cup
        lcms-libs
        libICE
        libSM
        libXfont
        libXt
        libXv
        libXxf86vm
        libfontenc
        libgomp
        libmng           
        libogg
        liboil
        libtheora
        libvisual
        libvorbis
        mailcap
        make
        mesa-dri-drivers
        mesa-libGL
        mesa-libGLU
        openjpeg-libs
        patch
        pax
        perl-CGI
        perl-Compress-Raw-Zlib
        perl-Error
        perl-ExtUtils-MakeMaker
        perl-ExtUtils-ParseXS
        perl-IO-Compress-Base
        perl-IO-Compress-Zlib
        perl-Test-Harness
        perl-Test-Simple
        perl-YAML-Syck
        perl-devel
        phonon-backend-gstreamer
        poppler
        poppler-data
        poppler-utils
        portreserve
        python-setuptools
        qt
        qt-sqlite
        qt-x11
        qt3
        redhat-lsb
        redhat-lsb-graphics
        redhat-lsb-printing
        sinjdoc
        urw-fonts
        xml-common
        xorg-x11-font-utils
Warning: yum did not install the following packages:
        libXpm
* Now running spacewalk-setup.
* Setting up Oracle environment.
* Setting up database.
** Database: Installing the database:
** Database: This is a long process that is logged in:
** Database:   /var/log/rhn/install_db.log
*** Progress: ############################
** Database: Installation complete.
** Database: Setting up database connection for Oracle backend.
** Database: Testing database connection.
** Database: Populating database.
*** Progress: #########################################################
* Setting up users and groups.
** GPG: Initializing GPG and importing key.
** GPG: Creating /root/.gnupg directory
You must enter an email address.
Admin Email Address? deimos@deimos.fr
* Performing initial configuration.
* Activating RHN Satellite.
Where is your satellite certificate file? /root/deimos.cert

On va répondre 'y' à cette question :

Command
** Loading RHN Satellite Certificate.
** Verifying certificate locally.
** Activating RHN Satellite.
* Enabling Monitoring.
* Configuring apache SSL virtual host.
Should setup configure apache's default ssl server for you (saves original ssl.conf) [Y]? y

Entrez un mot de passe pour le certificat :

Command
** /etc/httpd/conf.d/ssl.conf has been backed up to ssl.conf-swsave
* Configuring tomcat.
** /etc/tomcat6/tomcat6.conf has been backed up to tomcat6.conf-swsave
** /etc/tomcat6/server.xml has been backed up to server.xml-swsave
** /etc/tomcat6/web.xml has been backed up to web.xml-swsave
* Configuring jabberd.
* Creating SSL certificates.
CA certificate password? 
Re-enter CA certificate password?

Les informations du certificat :

Command
** /etc/httpd/conf.d/ssl.conf has been backed up to ssl.conf-swsave
* Configuring tomcat.
** /etc/tomcat6/tomcat6.conf has been backed up to tomcat6.conf-swsave
** /etc/tomcat6/server.xml has been backed up to server.xml-swsave
** /etc/tomcat6/web.xml has been backed up to web.xml-swsave
* Configuring jabberd.
* Creating SSL certificates.
CA certificate password? 
Re-enter CA certificate password? 
Organization? deimos
Organization Unit [satellite-master.deimos.fr]? 
Email Address [deimos@deimos.fr]? 
City? Paris
State? IDF
Country code (Examples: "US", "JP", "IN", or type "?" to see a list)? FR
** SSL: Generating CA certificate.
** SSL: Deploying CA certificate.
** SSL: Generating server certific
** SSL: Storing SSL certificates.
* Deploying configuration files.
* Update configuration in database.
* Setting up Cobbler..
Cobbler requires tftp and xinetd services be turned on for PXE provisioning functionality. Enable these services [Y/n]?y
cobblerd does not appear to be running/accessible
* Restarting services.
Installation complete.
Visit https://satellite-master.deimos.fr to create the RHN Satellite administrator account.

Et voilà l'installation est terminée. Nous allons maintenant actualiser yum pour installer 2 packages manquants :

Command yum
> yum update
Loaded plugins: product-id, security, subscription-manager
Updating certificate-based repositories.
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package python-netaddr.noarch 0:0.7.5-3.el6 will be updated
---> Package python-netaddr.noarch 0:0.7.5-4.el6 will be an update
--> Finished Dependency Resolution
 
Dependencies Resolved
 
==============================================================================================================================================================================================================================================================================
 Package                                                               Arch                                                          Version                                                            Repository                                                       Size
==============================================================================================================================================================================================================================================================================
Updating:
 python-netaddr                                                        noarch                                                        0.7.5-4.el6                                                        dvd_repo                                                        1.0 M
 
Transaction Summary
==============================================================================================================================================================================================================================================================================
Upgrade       1 Package(s)   
 
Total download size: 1.0 M   
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded   
Running Transaction
Warning: RPMDB altered outside of yum.
  Updating   : python-netaddr-0.7.5-4.el6.noarch                                                                                                                                                                                                                          1/2
  Cleanup    : python-netaddr-0.7.5-3.el6.noarch                                                                                                                                                                                                                          2/2
Installed products updated.  
 
Updated:
  python-netaddr.noarch 0:0.7.5-4.el6
 
Complete!

3.2 DHCP

Nous allons installer un serveur DHCP pour pouvoir pusher via PXE/TFTP (déjà fait par l'installeur du Satellite) les OS. Si vous avez déjà un serveur DHCP, passez directement à la configuration.

3.2.1 Installation DHCP

Pour installer un serveur DHCP sur Red Hat :

Command yum
yum install dhcp

Avant de modifier la configuration, nous allons copier une configuration classique :

Command cp
cp -f /usr/share/doc/dhcp-*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

3.2.2 Configuration DHCP

Editez le fichier /etc/dhcp/dhcpd.conf pour y ajouter la configuration souhaitée. Ici j'ai 2 ranges déclarés. Chaque range a sa propre interface :

Configuration File /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
 
# option definitions common to all supported networks...
option domain-name "deimos.fr";
option domain-name-servers ns1.deimos.fr, ns2.deimos.fr;
 
default-lease-time 600;max-lease-time 7200; 
# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;allow booting;allow bootp; 
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
 
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
 
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
 
subnet 10.102.2.32 netmask 255.255.255.224 {	option routers 10.102.2.63;	option subnet-mask 255.255.255.224;	option domain-name-servers 192.168.0.69;	range 10.102.2.33 10.102.2.62;	next-server 10.102.2.1;	filename "pxelinux.0";} subnet 10.102.2.64 netmask 255.255.255.224 {	option routers 10.102.2.65;        option subnet-mask 255.255.255.224;        option domain-name-servers 192.168.0.69;        range 10.102.2.66 10.102.2.94;        next-server 10.102.2.1;        filename "pxelinux.0";} 
# This is a very basic subnet declaration.
 
#subnet 10.254.239.0 netmask 255.255.255.224 {
#  range 10.254.239.10 10.254.239.20;
#  option routers rtr-239-0-1.deimos.fr, rtr-239-0-2.deimos.fr;
#}
 
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
 
#subnet 10.254.239.32 netmask 255.255.255.224 {
#  range dynamic-bootp 10.254.239.40 10.254.239.60;
#  option broadcast-address 10.254.239.31;
#  option routers rtr-239-32-1.deimos.fr;
#}
 
# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
#  range 10.5.5.26 10.5.5.30;
#  option domain-name-servers ns1.internal.deimos.fr;
#  option domain-name "internal.deimos.fr";
#  option routers 10.5.5.1;
#  option broadcast-address 10.5.5.31;   
#  default-lease-time 600;
#  max-lease-time 7200;
#}
 
# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
 
#host passacaglia {
#  hardware ethernet 0:0:c0:5d:bd:95;
#  filename "vmunix.passacaglia";
#  server-name "toccata.fugue.com";
#}
 
# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
 
# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
 
#class "foo" {
#  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
 
#shared-network 224-29 {
#  subnet 10.17.224.0 netmask 255.255.255.0 {
#    option routers rtr-224.deimos.fr; 
#  }
#  subnet 10.0.29.0 netmask 255.255.255.0 {
#    option routers rtr-29.deimos.fr;  
#  }
#  pool {
#    allow members of "foo";
#    range 10.17.224.10 10.17.224.250;   
#  }
#  pool {
#    deny members of "foo";
#    range 10.0.29.10 10.0.29.230;
#  }
#}

Puis je vais déclarer les interfaces sur lesquelles le service dhcpd doit écouter :

Configuration File /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS="eth1 eth2";

Comme je le disais plus haut, j'ai une interface par range, donc nous allons rajouter les routes qui vont bien :

Configuration File /etc/sysconfig/network-scripts/route-eth1
ADDRESS1=10.102.2.32
NETMASK1=255.255.255.224
GATEWAY1=10.102.2.63

Configuration File /etc/sysconfig/network-scripts/route-eth2
ADDRESS2=10.102.2.64
NETMASK2=255.255.255.224
GATEWAY2=10.102.2.94

Puis je redémarre le service :

Command service
service restart dhcpd

4 Configuration

4.1 Configuration du proxy sur Satellite (Uniquement pour installation en mode déconnecté)

Si vous avez fait l'installation avec l'option '--disconnected', il va falloir éditer le fichier /etc/rhn/rhn.conf pour ajouter ou éditez les lignes suivantes :

Configuration File /etc/rhn/rhn.conf
server.satellite.rhn_parent = satellite.rhn.redhat.com
server.satellite.http_proxy = <hostname>:<port>
server.satellite.http_proxy_username = <username>
server.satellite.http_proxy_password = <password>

Il est évident que vous utilisez les 3 dernières lignes uniquement si vous êtes derrière un proxy.

Ensuite nous allons devoir réactiver le satellite en mode connecté :

Command
> rhn-satellite-activate --rhn-cert=/root/deimos.cert
RHN_PARENT: satellite.rhn.redhat.com

Avant d'aller plus loin, assurez vous que votre systèmes est bien à jour à l'aide d'un 'yum update'.

4.2 Syncrhonisation/Ajout d'un repository en local

Nous allons lancer une des opérations les plus longues lors de l'installation d'un Satellite, à savoir le rapatriement en local des repository. Pour celà vous avez 2 méthodes :

4.2.1 Méthode 1

On rapatrie tout :

Command satellite-sync
satellite-sync

4.2.2 Méthode 2

On rapatrie que certaines versions de Satellite : Nous allons déjà afficher les repository disponibles :

Command satellite-sync
> satellite-sync -l16:28:41 Red Hat Network Satellite - live synchronization
16:28:41    url: https://satellite.rhn.redhat.com
16:28:41    debug/output level: 1
16:28:42    db:  rhnsat/<password>@rhnsat
16:28:42 
16:28:42 Retrieving / parsing channel-families data
16:28:46 channel-families data complete
16:28:48 
16:28:48 Retrieving / parsing channel data
16:29:51    p = previously imported/synced channel
16:29:51    . = channel not yet imported/synced
16:29:51    base-channels:
16:29:51       . jb-middleware                               0 
16:29:51       . jbdevstudio-1-linux                         0 
...
16:29:59       . solaris-sparc-9-rhdirserv-7.1               0 
16:29:59       . solaris-sparc-9-rhdirserv-7.1-beta          0 
16:29:59       . solaris-sparc-9-rhdirserv-8                 0 
16:29:59       . solaris-sparc-9-rhdirserv-8-beta            0 
16:29:59 
    Import complete:
        Begin time: Sat Feb 25 16:28:41 2012
        End time:   Sat Feb 25 16:29:59 2012
        Elapsed:    0 hours, 1 minutes, 17 seconds

Et nous allons sélectionner ceux qui nous intéressent :

Command satellite-sync
> satellite-sync -c rhel-x86_64-server-6 -c rhn-tools-rhel-x86_64-server-6 -c rhel-x86_64-server-5 -c rhn-tools-rhel-x86_64-server-511:47:15 Red Hat Network Satellite - live synchronization
11:47:15    url: https://satellite.rhn.redhat.com
11:47:15    debug/output level: 1
11:47:16    db:  rhnsat/<password>@rhnsat
11:47:16
11:47:16 Retrieving / parsing channel-families data
11:47:20 channel-families data complete
11:47:22
11:47:22 Retrieving / parsing arches data
11:47:23 arches data complete
11:47:23
11:47:23 Retrieving / parsing additional arches data
11:47:24 additional arches data complete
11:47:24
11:47:24 Retrieving / parsing channel data
11:48:31    p = previously imported/synced channel
11:48:31    . = channel not yet imported/synced
11:48:31    base-channels:
11:48:31       p rhel-x86_64-server-5                     12409
11:48:31       p rhel-x86_64-server-6                     6740
11:48:31
11:48:31 Channel data complete
11:48:31
11:48:31 Retrieving / parsing blacklists data
11:48:32 blacklists data complete
11:48:32
11:48:32 Retrieving / parsing product names data
11:48:33 product names data complete
11:48:33
11:48:33 Retrieving short package metadata (used for indexing)
11:48:33    Retrieving / parsing short package metadata: rhel-x86_64-server-5 (12409)
11:48:42    Retrieving / parsing short package metadata: rhel-x86_64-server-6 (6740)
11:48:47 Diffing package metadata (what's missing locally?): rhel-x86_64-server-5
            ________________________________________
Diffing:    ######################################## - complete
11:48:56 Diffing package metadata (what's missing locally?): rhel-x86_64-server-6
            ________________________________________
Diffing:    ######################################## - complete
11:49:01
11:49:01 Downloading package metadata
11:49:02    Retrieving / parsing *relevant* package metadata: rhel-x86_64-server-5 (NONE RELEVANT)
11:49:02    Retrieving / parsing *relevant* package metadata: rhel-x86_64-server-6 (3390)
11:49:02    * WARNING: this may be a slow process.
            ________________________________________
Downloading:###################
...

Les rhn-tools vont être utilisés pour les kickstarts.

4.3 Supression d'un repository

Pour supprimer un repository :

Command spacewalk-remove-channel
spacewalk-remove-channel -c <repository-name> --unsubscribe

  • spacewalk-remove-channel : insérez ici le nom du channel sur lequel vous souhaitez vous désinscrire
  • unsubscribe : permet de retirer l'enregistrement de toutes les machines qui sont rattachées à ce repository

4.4 Intégration du Satellite dans un environnement LDAP

4.4.1 Installation des packages

Nous allons devoir installer les modules PAM. Sur Red Hat, il n'y a pas grand chose à installer :

Command yum
yum install nss-pam-ldapd

Puis installer ce package pour pouvoir faire l'intégration avec le Satellite :

Command yum
yum install pam-devel

4.4.2 Configuration du LDAP avec PAM

Pour configurer PAM avec LDAP, utilisez cette commande et adaptez la à vos besoins :

Command authconfig
authconfig --enableldap --enableldapauth --ldapserver=ldap://openldap-server.deimos.fr:389 --ldapbasedn="dc=openldap,dc=deimos,dc=fr" --enableldaptls --ldaploadcacer=http://serveur-web/deimosfr.crt --enablemkhomedir --update

  • --ldapserver : rentrez l'adresse de votre serveur web
  • --ldapbasedn : le DN de votre serveur
  • --enableldaptls : si vous utilisez des connections LDAP sécurisées
  • --ldaploadcacer : le certificat à utiliser (si vous n'avez pas moyen de le récupérer de cette façon, regardez la procédure un peu plus bas)

ou une version sans ssl/tls :

Command authconfig
authconfig --enableldap --enableldapauth --disablenis --disableshadow --enablecache  --passalgo=sha512 --disableldaptls --disableldapstarttls --disablesssdauth --enablemkhomedir --enablepamaccess --enablecachecreds --enableforcelegacy --disablefingerprint  --ldapserver=192.168.0.1 --ldapbasedn=dc=openldap,dc=deimos,dc=fr --updateall

Pour récupérer le certificat ssl demandé plus haut, voici une solution :

Command openssl
> openssl s_client -connect openldap-server.deimos.fr:636CONNECTED(00000003)
depth=0 C = FR, ST = IDF, L = Paris, O = DEIMOS, CN = openldap-server.deimos.fr, emailAddress = deimos@deimos.fr
verify error:num=18:self signed certificate
verify return:1
depth=0 C = FR, ST = IDF, L = Paris, O = DEIMOS, CN = openldap-server.deimos.fr, emailAddress = deimos@deimos.fr
verify return:1
---
Certificate chain
 0 s:/C=FR/ST=IDF/L=Paris/O=DEIMOS/CN=openldap-server.deimos.fr/emailAddress=deimos@deimos.fr
   i:/C=FR/ST=IDF/L=Paris/O=DEIMOS/CN=openldap-server.deimos.fr/emailAddress=deimos@deimos.fr
---
Server certificate
-----BEGIN CERTIFICATE-----MIIDpTCCAw6gAwIBAgIJAJJUJLhNM1/XMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYDVQQGEwJGUjEMMAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQYXJpczEPMA0GA1UEChMGVUxMSU5LMREwDwYDVQQLEwh1bHN5c25ldDEcMBoGA1UEAxMTdGFzbWFuaWEMdWxsaW5rLmxhbjElMCMGCSqGSIb3DQEJARYWaW503XJuYWwtaXRAdWxsaW5rLmNvbTAeFw0xMTEyMDUxMjQzMzVaFw0yMTEyMDIxMjQzMzVaMIGUMQswCQYDVQQGEwJGUjEMMAoGA1UECBMDSURGMR4wDAYDVQQHEwVQYXJpczEPMA0GA1UEChMGVUxMSU5LMREwDwYDVQQLEwh1bHN5c25ldDEcMBoGA1UEAxMTdGFzbWFuaWEudWxsaW5rLmxhbjElMCMGCSqGSIb3DQEJARYWaW50ZXJuYWwtaXRAdWxsaW5rLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4QoXFn39LhMW7mlA9r3NOX6iTHCCSlZjVQi0mQ5kBVysN8KMFfC0E4vOeG1Z11AYwW7xCOb4Pl+LgfgfdgfgfdJIn92LX0meJcsgWKOhqVAsZNkWn2ss8oDw3t5NEOjKFZ5BKVR2fL4Yj23DmFOAwew5PR5xhxGV5LJ9VErSKs0CAwEAAaOB/DCB+TAdBgNVHQ4EFgQUn5Ig2hFtROXcG3vxux7izNqcUd4wgckGA1UdIwSBwTCBvoAUn5Ig2hFtROXcG3vxux7izNqcUd6hgZqkgZcwgZQxCzAJBgNVBAYTAkZSMQwwCgYDVQQIEwNJREYxDjAMBgNVBAcTBVBhcmlzMQ8wDQYDVQQKEwZVTExJTksxETAPBgNVBAsTCHVsc3lzbmV0MRwwGgYDVQQDExN0YXNtYW5pYS51bGxpbmsubGFuMSUwIwYJKoZIhvcNAQkBFhZpbnRlcm5hbC1pdEB1bGxpbmsuY29tggkAklQkuE0zX9cwDAYCVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAbjjAbcBezdKyq+Tlf3/DURW0BJhHKyY7UW7L39m/KZRIB2lbgFjslrAL4yNnFgipJ6aKlJFfVBYEu7MhKH2pJZBYFpzuHOdKvDq+Kmn/wGvxeOvzh1GzQPGhQv4cClm2PJNMh/jrKZWNzqyLWYtWAoLu6N6gMER1Bd1Z5uzHl3A==-----END CERTIFICATE-----  subject=/C=FR/ST=IDF/L=Paris/O=DEIMOS/CN=openldap-server.deimos.fr/emailAddress=deimos@deimos.fr
issuer=/C=FR/ST=IDF/L=Paris/O=DEIMOS/CN=openldap-server.deimos.fr/emailAddress=deimos@deimos.fr
---
No client certificate CA names sent
---
SSL handshake has read 1291 bytes and written 311 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA 
    Session-ID: 91E6398F6DE9FBDC1B7EBDF890FE818B09EB79555C9FC1CF64EDC284F7A23B2A
    Session-ID-ctx:
    Master-Key: 51408932336792F4E8F5339BD12F312005022A4B20E6A5FBC56239BC0DD514344449531973B9A8395B1E799196D8F411
    Key-Arg   : None
    Krb5 Principal: None   
    PSK identity: None
    PSK identity hint: None
    Start Time: 1327491823 
    Timeout   : 300 (sec)  
    Verify return code: 18 (self signed certificate)
---

Dans le cas ou le certificat est récupérer de la manière manuelle, copiez le dans /etc/openldap/cacerts/ldap.crt, puis exécutez la commande suivante :

Command cacertdir_rehash
cacertdir_rehash /etc/openldap/cacerts

4.4.3 Configuration du LDAP sur le Satellite

Nous allons insérer dans le fichier /etc/rhn/rhn.conf ceci :

Configuration File /etc/rhn/rhn.conf
pam_auth_service = rhn-satellite

Et enfin renseignez ces informations :

Command /etc/pam.d/rhn-satellite
#%PAM-1.0
auth      required      /lib64/security/pam_env.so
auth      sufficient    /lib64/security/pam_ldap.so no_user_check
auth      required      /lib64/security/pam_deny.so
account   required      /lib64/security/pam_ldap.so no_user_check
#account   required      /lib64/security/pam_access.so

J'ai commenté la partie pam_access qui permet d'augmenter la sécurité des comptes. Pour plus d'informations sur ce modules (pam_access) lisez cette documentation.

Redémarrez ensuite les services Satellite pour voir dans les options de création des utilisateurs :

Command rhn-satellite
rhn-satellite restart

Une nouvelle case à cocher apparaitra dans la section de création des utilisateurs :

Utilisez PAM pour authentifier par LDAP, Kerberos et d'autres systèmes d'authentification basés sur le réseau.
Remarque : Les champs de mot de passe ci-dessus ne sont pas requis lorsque cette case est cochée ; cependant, vous pouvez saisir un mot de passe qui fonctionnera uniquement lorsque l'authentification PAM pour le compte de cet utilisateur est désactivée.

5 Utilisation

5.1 Création du compte admin

Pour vous connecter à l'interface web, c'est très simple, allez en HTTPS sur votre serveur (https://satellite-master) :

Satellite admin create.png

Puis renseignez les informations et cliquez sur "Créer le compte".

5.2 Configurer la timezone

Pour configurer la timezone, ça se fait dans l'interface graphique :

Satellite timezone.png

5.3 Ajouter un repository personnalisé

Créez votre repository dans les "Canaux personnalisés" et mettez la version de Red Hat comme parente si vous souhaitez ajouter des packages supplémentaires et garder les packages disponible en standard sur Red Hat.

5.3.1 Prérequis (GPG)

Nous allons devoir générer une clef gpg pour signer nos packages :

Command gpg
> gpg --gen-keygpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Sélectionnez le type de clé désiré:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (signature seule)
   (4) RSA (signature seule)
Votre choix ? 1

On va donc choisir le premier choix.

Puis générer la taille de clef par défaut sans expiration :

Command gpg
les clés RSA peuvent faire entre 1024 et 4096 bits de longueur.
Quelle taille de clé désirez-vous ? (2048) La taille demandée est 2048 bits
Spécifiez combien de temps cette clé devrait être valide.
         0 = la clé n'expire pas
      <n>  = la clé expire dans n jours
      <n>w = la clé expire dans n semaines
      <n>m = la clé expire dans n mois
      <n>y = la clé expire dans n années
La clé est valide pour ? (0) La clé n'expire pas du tout
Est-ce correct ? (o/N) o

Entrez vos informations pour la signature des packages :

Command
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
 
Nom réel: Deimos FRAdresse e-mail: deimos@deimos.frCommentaire: 
Vous avez sélectionné ce nom d'utilisateur:
    "Deimos <deimos@deimos.fr>" 
Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter ? o
Vous avez besoin d'une phrase de passe pour protéger votre clé
secrète.
 
can't connect to `/root/.gnupg/S.gpg-agent': Aucun fichier ou dossier de ce type
gpg-agent[25522]: répertoire `/root/.gnupg/private-keys-v1.d' créé

Puis entrez une passphrase, puis la validité de la clef :

Command gpg
                                                     /-----------------------------------------------------\
                                                     | Please re-enter this passphrase                     |
                                                     |                                                     |
                                                     | Passphrase ________________________________________ |                                                     |                                                     |
                                                     |       <OK>                             <Cancel>     |
                                                     \-----------------------------------------------------/
Spécifiez combien de temps cette clé devrait être valide.
         0 = la clé n'expire pas
      <n>  = la clé expire dans n jours
      <n>w = la clé expire dans n semaines
      <n>m = la clé expire dans n mois
      <n>y = la clé expire dans n années
La clé est valide pour ? (0) La clé n'expire pas du tout
Est-ce correct ? (o/N) o

La clef se créer est vous avez la key ID qui est donnée :

Command gpg
Can't connect to `/root/.gnupg/S.gpg-agent': Aucun fichier ou dossier de ce type
Un grand nombre d'octets aléatoires doit être généré. Vous devriez faire
autre-chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers; cela donne au générateur de
nombres aléatoires une meilleure chance d'avoir assez d'entropie.
gpg: clé DFC7E56C marquée comme ayant une confiance ultime.
les clés publique et secrète ont été créées et signées.
 
gpg: vérifier la base de confiance
gpg: 3 marginale(s) nécessaires, 1 complète(s) nécessaires, modèle
de confiance PGP
gpg: profondeur: 0  valide:   1  signé:   0
confiance: 0-. 0g. 0n. 0m. 0f. 1u
pub   2048R/DFC7E56A 2012-03-12    Empreinte de la clé = 4EC2 939F 3986 96CE 826C  665A 83D7 D404 DFC7 E56Duid                  Deimos FR <deimos@deimos.fr>
sub   2048R/4425ACDD 2012-03-12

La clef est maintenant créer, nous allons pouvoir signer nos packages avec.

Nous pouvons lister à tous moment nos clefs comme ceci :

Command gpg
gpg --list-keys

Pour exporter notre clef publique fraichement créer :

Command gpg
gpg --export -a 'Deimos fr' > /etc/pki/rpm-gpg/RPM-GPG-KEY-deimos

Cette clef servira au déploiement des packages pour tous nos futurs clients.

Afin de nous aider à la signature en masse de packages, nous allons créer un petit fichier de préférences :

Command ~/.rpmmacros
%_signature gpg
%_gpg_name DFC7E56A

Remplacez la valeur de '%_gpg_name' par votre key ID.

Nous allons maintenant déclarer dans Satellite notre nouvelle clef au niveau du kickstart pour que nos installations automatisées aient cette clef présente :

Satellite gpg.png

Et enfin le repository personnalisé doit contenir les informations GPG :

Satellite gpg repo.png

5.3.2 Ajouter des packages

Si vous souhaitez ajouter des packages à un repository (ex: repo-test), télécharger le ou les rpm qui vous intéressent temporairement sur le serveur satellite :

Command wget
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/tmux-1.5-1.el6.x86_64.rpm

Nous allons signer ce package :

Command rpm
> rpm --resign tmux-1.5-1.el6.x86_64.rpm
Entrez la phrase de passe: 
Phrase de passe bonne.

Puis ajoutez ce ou ces rpm à votre repository custom :

Command rhnpush
> rhnpush -c repo-test tmux-1.5-1.el6.x86_64.rpm
Red Hat Network username: deimos
Red Hat Network password:

  • -c repo-test : -c permet de spécifier le repository sur lequel vous voulez mettre ce package.

Il faut maintenant actualiser dans l'interface web la liste des packages pour que les clients puissent les voir :

Satellite custom repo.png

Maintenant, sur le client, il ne vous reste plus qu'à faire :

Command yum
yum clean all
yum install tmux

5.3.3 Automatiser et simplifier la signature et l'ajout de packages

Si vous n'avez pas envie de devoir taper tous le temps vos identifiants, la passphrase etc... à chaque mise en place de nouveaux packages, j'ai créer un petit outil en python pour faire gagner du temps :


Configuration File satellite_add_packages.py
#!/usr/bin/env python
# Made by Pierre Mavro 14/03/2012
# Version : 0.1
# This script permit to automate in a non secure way, new packages for a custom repository on Red Hat Satellite
# Require : pexpect
 
import getopt, os, sys, glob, pexpect
from string import Template
 
# Help
cmd_name = sys.argv[0]
def help(code):
    print cmd_name, "[-h] [-r] [-s] [-l] [-p] [-d]"
    str = """
   -h, --help
      Show this help
   -s, --passphrase
      Passphrase to sign packages
   -r, --repository
      Select wished repository to push the packages
   -l, --login
      Red Hat Network username
   -p, --password
      Red Hat Network password
   -f, --folder
      folder were new packages should be added (default: /tmp/packages)
   -d, --debug
      Debug mode
"""
    print str
    sys.exit(code)
 
class bcolors:
    OK = '\033[92m'
    FAIL = '\033[91m'
    END = '\033[0m'
 
    def disable(self):
        self.OK = ''
        self.FAIL = ''
        self.END = ''
 
# Sign and push function
def sign_push(passphrase,repository,login,password,folder,debug):
 
    # Package signing
    def sign(rpm_files,passphrase,folder,debug,charspacing):
        if (debug == 1): print 80*'=' + "\n"
        print '[+] Signing packages :'
        # Sign all packages
        for package in rpm_files:
            # Formating
            charspace = Template("{0:<$space}")
            print charspace.substitute(space = charspacing).format(' - ' + package + '...'),
            # Launch resign
            child = pexpect.spawn('rpm --resign ' + package)
            if (debug == 1): child.logfile = sys.stdout
            child.expect ('Enter pass phrase|Entrez la phrase de passe')
            child.sendline (passphrase)
            if (debug == 1): child.logfile = sys.stdout
            child.expect(pexpect.EOF)
            child.close()
            # Check return status
            if (child.exitstatus == 0):
                print '[ ' + bcolors.OK + 'OK' + bcolors.END + ' ] '
            else:
                print '[ ' + bcolors.FAIL + 'FAIL' + bcolors.END + ']'
 
    # Package push
    def push(rpm_files,repository,login,password,folder,debug,charspacing):
        if (debug == 1): print 80*'=' + "\n"
        print '[+] Adding packages to satellite server :'
        for package in rpm_files:
            # Formating
            charspace = Template("{0:<$space}")
            print charspace.substitute(space = charspacing).format(' - ' + package + '...'),
            # RPM push command
            child = pexpect.spawn('rhnpush --force --no-cache -c ' + repository + ' ' + package)
            if (debug == 1): child.logfile = sys.stdout
            child.expect ('Red Hat Network username')
            child.sendline (login)
            child.expect ('Red Hat Network password')
            child.sendline (password)
            if (debug == 1): child.logfile = sys.stdout
            child.expect(pexpect.EOF)
            child.close()
            # Check return status
            if (child.exitstatus == 0):
                print '[ ' + bcolors.OK + 'OK' + bcolors.END + ' ] '
            else:
                print '[ ' + bcolors.FAIL + 'FAIL' + bcolors.END + ' ]'
 
    # Get rpm files list
    rpm_files=glob.glob(folder + '/*.rpm')
    if (debug == 1): print 80*'=' + "\n" + 'RPM found :'
    if (debug == 1): print rpm_files
 
    # Check if RPM were found
    if (len(rpm_files) == 0):
       print "No RPM were found in " + folder
       sys.exit(2)
 
    # Get maximum rpm size for visual answers (OK/FAIL)
    charspacing=0
    for package in rpm_files:
        count = len(package)
        if (count > charspacing):
            charspacing=count
    charspacing += 10
 
    # Sign packages
    sign(rpm_files,passphrase,folder,debug,charspacing)
    # Push packages
    push(rpm_files,repository,login,password,folder,debug,charspacing)
 
# Main
def main(argv):
    try:
        opts, args = getopt.getopt(argv, 'hs:r:l:p:f:d', ["passphrase=","repository=","login=","password=","folder=","help"])
    except getopt.GetoptError:
        # Print help and exit
        print "Unknow option, bad or missing argument\n"
        help(2)
 
    # Initialize vars
    # GPG passphrase for package sign in
    passphrase=None
    repository=None
    login=None
    password=None
    folder='/tmp/'
    debug=0
 
    # Check opts
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            help(0)
            sys.exit(0)
        elif opt in ("-s", "--passphrase"):
            passphrase = str(arg)
        elif opt in ("-r", "--repository"):
            repository=str(arg)
        elif opt in ("-l", "--login"):
            login=str(arg)
        elif opt in ("-p", "--password"):
            password=str(arg)
        elif opt in ("-f", "--folder"):
            folder=str(arg)
        elif opt in ("-d", "--debug"):
            debug=1
        else:
            print "Unknow option, please see usage\n"
            help(2)
 
    # Checks
    if (passphrase or repository or login or password) is None:
        print "Unknow option, please see usage\n"
        help(2)
 
    sign_push(passphrase,repository,login,password,folder,debug)
 
if __name__ == "__main__":
   main(sys.argv[1:])

Vous pouvez le lancer soit en renseignant en dur dans le code les informations nécessaires dans la partie 'Initialize vars', ou bien en arguments :

Command satellite_add_packages.py
> satellite_add_packages.py -s <passphrase> -r <repository>  -f <folder> -l <login> -p <password>
[+] Signing packages :
 - /root/done/tmux-1.5-1.el6.x86_64.rpm...                       [ OK ] 
[+] Adding packages to satellite server :
 - /root/done/tmux-1.5-1.el6.x86_64.rpm...                       [ OK ]

5.4 Client

Nous allons voir dans cette section comment les clients peuvent communiquer avec notre serveur satellite.

5.4.1 Enregistrement

Pour enregistrer une machine dans votre serveur satellite, qui n'a pas été déployée via kickstart, exécutez cette commande pour l'enregistrer :

Command rhn-register
rhn-register

Puis, les informations du serveur Satellite vous seront demandées.

5.4.2 Mise à jour du profil

Si vous faites des changements sur le profil de la machine (hardware, hostname...), vous pouvez le mettre à jour depuis la machine guest via cette commande :

Command rhn-profile-sync
rhn-profile-sync

5.4.3 Réenregistrer une machine

Pour x ou y raisons, vous souhaitez réenregistrer une machine, c'est très simple, il va falloir retirer les actuels références pour le satellite actuel, puis relancer l'enregistrement :

Command
rm -f /etc/sysconfig/rhn/systemid
rhn-register

5.5 Crontab pour les mises à jour

Les synchronisations du Satellite peuvent prendre beaucoup de temps. C'est pourquoi il est conseillé de mettre à jour autant que possible, ajoutez donc ceci dans votre crontab :

Command crontab -e
0 1 * * * perl -le 'sleep rand 9000' && satellite-sync --email >/dev/null 2>1

6 FAQ

6.1 Relancer l'installation

Si vous souhaitez à tout moment relancer l'installation, vous pouvez le faire avec l'option --skip-db-install, car généralement, l'opération d'installation de la base de donnée s'est correctement déroulée, mais pas forcément le reste :

Command install.pl
install.pl --skip-db-install

Il existe bien d'autres options avec '--help'.

6.2 Les logs

Lorsqu'il y a une erreur, pour l'upload d'un package ou autre, il y a beaucoup de logs à regarder. Je vais donc essayer de décrire la méthode à suivre :

  1. Première chose à faire c'est de regarder les logs d'apache : /var/log/httpd/error_log
  2. Si il n'y a toujours pas assez d'infos, regardez dans le dossier /var/log/rhn/. C'est bien découpé et on retrouve rapidement les informations souhaitées.

6.3 "Error validating satellite certificate" error during RHN Satellite install

Si vous avez ce problème, c'est que vous êtes certainement derrière un proxy ou que vous n'avez pas encore de connexion internet. Il va donc falloir relancer l'installation :

Command /home/sat/install.pl
/home/sat/install.pl --disconnected --skip-db-install

6.4 Tomcat failed to start properly or the installer ran out of tries. Please check /var/log/tomcat*/catalina.out for errors

Si vous avez ce type de message c'est que le hostname est mal renseigné. Pour remédier à ce problème, vérifier que cette section là est correctement renseignée, puis relancez l'installer de cette façon :

Command spacewalk-hostname-rename
spacewalk-hostname-rename x.x.x.x
Validating IP ... OK
=============================================
hostname: satellite-master.deimos.fr
ip: x.x.x.x
=============================================
Stopping rhn-satellite services ... OK
Testing DB connection ... OK 
Updating /etc/rhn/rhn.conf ... OK
Actual SSL key pair package: rhn-org-httpd-ssl-key-pair-satellite-master-1.0-1.noarch
 No need to re-generate SSL certificate.
Regenerating new bootstrap client-config-overrides.txt ... OK
Updating NOCpulse.ini ... OK 
Updating monitoring data ... OK
Updating other DB entries ... OK
Changing cobbler settings ... OK
Changing jabberd settings ... OK
Starting rhn-satellite services ... OK

Si tout est bon, vous aurez des OK partout :-)

6.5 ERROR: Server not registered? No systemid: /etc/sysconfig/rhn/systemid

Si vous avez ce genre de message lors de l'activation d'un satellite :

Command rhn-satellite-activate
> rhn-satellite-activate --rhn-cert=/root/deimos.cert
RHN_PARENT: satellite.rhn.redhat.com
ERROR: Server not registered? No systemid: /etc/sysconfig/rhn/systemid

c'est que vous avez certainement un problème d'accès à internet. Ou bien, que votre machines est à enregistrer de nouveau :

Command rhn-register
rhn-register

Ajoutez l'option '--proxy=<proxy:port>' avec les bonnes valeurs si vous êtes derrière un proxy.

6.6 unable to extend index RHNSAT.RHN_ERRATAFILE_EID_FILE_IDX by 128 in tablespace DATA_TBS

Si vous obtenez ce type de message d'erreur lors d'un satellite sync :

...
SYNC ERROR: unhandled exception occurred:
 
(Check logs/email for potentially more detail)
 
<rhnFault class (code = 54, text = 'ORA-01654: unable to extend index RHNSAT.RHN_ERRATAFILE_EID_FILE_IDX by 128 in tablespace DATA_TBS
')>
(54, 'ORA-01654: unable to extend index RHNSAT.RHN_ERRATAFILE_EID_FILE_IDX by 128 in tablespace DATA_TBS\n', '\n     Package Upload Failed due to uniqueness constraint violation.\n     Make sure the package does not have any duplicate dependencies or\n     does not alre

C'est que vous êtes à 100% d'utilisation de votre base de donnée Oracle. Vérifiez déjà la taille de votre espace disque. Si tout est ok, on va vérifier que nous n'avons plus de place :

Command db-control
> su - oracle -c "db-control report"
Tablespace                  Size    Used   Avail   Use%
DATA_TBS                    3.9G    3.9G      0M   100%SYSAUX                      500M   84.3M  415.6M    17%
SYSTEM                      400M  245.3M  154.6M    61%
TEMP_TBS                   1000M      0B   1000M     0%
UNDO_TBS                   1000M   96.3M  903.6M    10%
USERS                       128M     64K  127.9M     0%

Effectivement, nous n'avons plus de place et il va falloir augmenter la taille de la table DATA_TBS de 500Mib :

Command db-control
> su - oracle -c "db-control extend DATA_TBS"
Extending DATA_TBS... done.

Puis nous allons recontrôler les données pour vérifier que c'est bon :

Command db-control
> su - oracle -c "db-control report"
Tablespace                  Size    Used   Avail   Use%
DATA_TBS                    4.3G    3.9G  502.8M    89%SYSAUX                      500M   84.3M  415.6M    17%
SYSTEM                      400M  245.3M  154.6M    61%
TEMP_TBS                   1000M      0B   1000M     0%
UNDO_TBS                   1000M   96.3M  903.6M    10%
USERS                       128M     64K  127.9M     0%

Tout est ok, on peut relancer la commande satellite-sync.

6.7 could not find kernel image: menu

Je ne sais pas si c'est un bug du serveur Satellite, ou si c'est moi qui ai oublié quelque chose, toujours est il que le fichier menu.c32 n'est pas présent au bon endroit et que les clients PXE refusent de démarrer. Donc pour corriger le problème :

Command cp
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/

6.8 warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID

Vous avez peut être ce genre de messages :

Command yum
warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID dfc7eded: NOKEY
 
Public key for tmux-1.5-1.el6.x86_64.rpm is not installed

Pour résoudre ce problème, il vous faut créer des clefs GPG et signer vos packages.

6.9 error was [Errno -1] Package does not match intended download

Si vous avez ce genre de message côté client lors d'un yum :

Error Downloading Packages:
  puppet-2.7.9-2.el6.noarch: failed to retrieve getPackage/puppet-2.7.9-2.el6.noarch.rpm from custom-repo
error was [Errno -1] Package does not match intended download. Suggestion: run yum --enablerepo=deimos-repo clean metadata

Vous devez dégager votre cache et recommencer :

Command
rm -rf /var/cache/yum/*
yum clean all

7 Ressources

https://access.redhat.com/kb/docs/DOC-34410