|
|
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).
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 :
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) :
|
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 :
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 :
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 :
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 :
|
* 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 :
|
** 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 :
|
** /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 :
|
** /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 :
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 :
yum
|
yum install dhcp
|
Avant de modifier la configuration, nous allons copier une configuration classique :
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 :
/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 :
/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 :
/etc/sysconfig/network-scripts/route-eth1
|
ADDRESS1=10.102.2.32
NETMASK1=255.255.255.224
GATEWAY1=10.102.2.63
|
/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 :
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 :
/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é :
|
> 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 :
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 :
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 :
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 :
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 :
yum
|
yum install nss-pam-ldapd
|
Puis installer ce package pour pouvoir faire l'intégration avec le Satellite :
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 :
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 :
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 :
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 :
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 :
/etc/rhn/rhn.conf
|
pam_auth_service = rhn-satellite
|
Et enfin renseignez ces informations :
/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 :
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) :
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 :
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 :
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 :
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 :
|
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 :
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 :
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 :
gpg
|
|
Pour exporter notre clef publique fraichement créer :
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 :
~/.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 :
Et enfin le repository personnalisé doit contenir les informations GPG :
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 :
wget
|
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/tmux-1.5-1.el6.x86_64.rpm
|
Nous allons signer ce package :
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 :
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 :
Maintenant, sur le client, il ne vous reste plus qu'à faire :
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 :
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 :
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 :
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 :
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 :
|
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 :
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 :
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 :
- Première chose à faire c'est de regarder les logs d'apache : /var/log/httpd/error_log
- 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 :
/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 :
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 :
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 :
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 :
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 :
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 :
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.
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 :
cp
|
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
|
Vous avez peut être ce genre de messages :
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 :
|
rm -rf /var/cache/yum/*
yum clean all
|
7 Ressources
https://access.redhat.com/kb/docs/DOC-34410