wtorek, 7 grudnia 2010

kexec w CentOS

Kexec to przydatna funkcja kernela Linuxa umożliwiająca uruchomienie innego jądra systemu z aktualnie uruchomionego systemu. Dzięki jej wykorzystaniu możemy podmienić działające jądro z pominięciem procedury BIOS serwera (która może trochę trwać na co niektórych konfiguracjach).

Wymagane pakiety:
yum install kexec-tools
Wykorzystanie kexec:
# Załadowanie nowego jądra
kexec -l /boot/vmlinuz-2.6.18-238.19.1.el5 --initrd=/boot/initrd-2.6.18-238.19.1.el5.img --append="$(cat /proc/cmdline)"
# Załadowanie nowego jądra (poziom 6 init - reboot)
telinit 6
Na serwerach dedykowanych home.pl warto użyć tej składni w celu uniknięcia odcięcia od konsoli systemowej:
kexec -l /boot/vmlinuz-2.6.18-238.19.1.el5.el5 --initrd=/boot/initrd-2.6.18-238.19.1.el5.img --append="$(cat /proc/cmdline)" --console-serial --serial=ttyS0 --serial-baud=115200

piątek, 3 grudnia 2010

Własne medium instalacyjne z CentOS 5.x

Instrukcja przedstawia przygotowanie własnego repozytorium instalacyjnego z zaktualizowanymi pakietami RPM. Ponadto przedstawione są kroki wymagane do przygotowanie minimalnej  płyty instalacyjnej CD. Instrukcja przygotowana i testowana pod CentOS 5.6 x86_64.

Przygotowanie środowiska
# Wymagane pakiety:
yum install createrepo yum-utils mkisofs
# Struktura katalogów roboczych:
mkdir -p /storage/centos/{i386,x86_64}/{media,work}
mkdir -p /storage/centos/updates
Pobranie plików instalacyjnych
# Pobranie plików instalacyjnych dla architektury i386
lftp -e 'lcd /storage/centos/i386/media && open http://download.hetzner.de/mirrors/centos/5.6/i386/ && mirror &&  get .treeinfo && get .discinfo && quit'

# Pobranie plików instalacyjnych dla architektury x86_64

lftp -e 'lcd /storage/centos/x86_64/media && open http://download.hetzner.de/mirrors/centos/5.6/x86_64/ && mirror &&  get .treeinfo && get .discinfo && quit'

Polski mirror:
http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.6/os/i386/
http://ftp.icm.edu.pl/pub/linux/distributions/centos/5.6/os/x86_64/

Pliki można też oczywiście przekopiować z lokalnego nośnika instalacyjnego.
Pobranie aktualizacji
Przygotowanie pliku konfiguracyjnego dla repozytorium z aktualizacjami:
cat >/etc/yum.repos.d/CentOS-Custom-Update.repo <<EOF
[updates32]
name=CentOS-\$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.6&arch=i386&repo=updates
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgcheck=1

[updates64]
name=CentOS-\$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.6&arch=x86_64&repo=updates
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgcheck=1
EOF


# Dla i386

reposync -p /storage/centos/updates -n -r updates32
# Dla x86_64
reposync -p /storage/centos/updates -n -r updates64
Przygotowanie kopii roboczej plików instalacyjnych
Ta procedura nie jest doskonała więc lepiej operować na kopii plików instalacyjnych :)

# Dla i386
rsync -av /storage/centos/i386/media/  /storage/centos/i386/work/
# Dla x86_64
rsync -av /storage/centos/x86_64/media/  /storage/centos/x86_64/work/
Aktualizacja pakietów  instalacyjnych
Utworzenie repozytorium dla updates32 i updates64:

createrepo /storage/centos/updates/updates32/
createrepo /storage/centos/updates/updates64/

Następnie należy przekopiować zaktualizowane/dodane pakiety z repozytorium aktualizacji do repozytorium instalacyjnego. Można to zrobić ręcznie lub za pomocą narzędzia custom-repo-integrate. Jest zmodyfikowana wersja programu repodiff.

# Dla i386
custom-repo-integrate -a i386 -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/
custom-repo-integrate -a i686 -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/
custom-repo-integrate -a noarch -u file:///storage/centos/updates/updates32/ -b file:///storage/centos/i386/work/


# Dla x86_64
custom-repo-integrate -a x86_64 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a noarch -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a i386 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/
custom-repo-integrate -a i686 -u file:///storage/centos/updates/updates64/ -b file:///storage/centos/x86_64/work/


W kolejnym kroku należy odświeżyć repozytoria instalacyjne z uwzględnieniem pliku comps.xml:

# Dla i386
createrepo -g /storage/centos/i386/work/repodata/comps.xml /storage/centos/i386/work

# Dla x86_64
createrepo -g /storage/centos/x86_64/work/repodata/comps.xml /storage/centos/x86_64/work

Dodatkowo można sprawdzić integralność repozytoriów (zależności):

# Dla i386
repoclosure -a i386 -a i686 -a noarch -r it.socha.install32 --repofrompath=it.socha.install32,/storage/centos/i386/work
# Dla x86_64
repoclosure -a x86_64 -a i386 -a i686 -a noarch -r it.socha.install64 --repofrompath=it.socha.install64,/storage/centos/x86_64/work
Repozytorium do instalacji sieciowej jest gotowe do użytku. Pozostało tylko przygotowanie plików kickstart.
Przykładowe pliki konfiguracyjne kickstart:
  • simple.ks - instalacja minimalnego systemu z dostępnym ekranem partycjonowania i konfiguracji GRUB
  • 1disc.ks - instalacja automatyczna na dysku /dev/sda (LVM)
  • 2disc.ks - instalacja automatyczna na dwóch dyskach z RAID1 i LVM


Dalsza cześć to opis przygotowania minimalnej płyty instalacyjnej CD.

Jeśli chcemy przygotować minimalną płytę instalacyjną (plik ISO) należy z katalogu instalacyjnego (CentOS) wybrać tylko wymagane pakiety (lista pakietów  minimalcentos.txt). Przygotowałem prosty skrypt, który z wskazanego katalogu instalacyjnego skopiuje wymagane pakiety. Skrypt nazywa się simple-rpm-copy. Cała procedura przygotowania płyty:
# Katalog roboczy
mkdir -p /storage/centos/{i386,x86_64}/mini/CentOS


# Kopiowanie repozytorium instalacyjnego z pominięciem katalogu CentOS
# Dla i386
rsync -av --exclude=CentOS /storage/centos/i386/work/ /storage/centos/i386/mini/
# Dla x86_64
rsync -av --exclude=CentOS /storage/centos/x86_64/work/ /storage/centos/x86_64/mini/

# Pobranie skryptu simple-rpm-copy
wget http://bit.ly/eTseVD -q -O /storage/centos/simple-rpm-copy && chmod +x /storage/centos/simple-rpm-copy

# Kopiowanie wymaganych RPM do mini instalacji

# Dla i386
wget http://bit.ly/e6am3x -q -O - | /storage/centos/simple-rpm-copy /storage/centos/i386/mini/CentOS/ /storage/centos/i386/work/ i386,i686,noarch
# Dla x86_64
wget http://bit.ly/e6am3x  -q -O - | /storage/centos/simple-rpm-copy /storage/centos/x86_64/mini/CentOS/ /storage/centos/x86_64/work x86_64,noarch

# Zaktualizowanie repozytorium
# Dla i386
createrepo -g /storage/centos/i386/mini/repodata/comps.xml /storage/centos/i386/mini/
# Dla x86_64
createrepo -g /storage/centos/x86_64/mini/repodata/comps.xml /storage/centos/x86_64/mini/

Dodatkowo warto sprawdzić integralność repozytoriów (zależności):

# Dla i386
repoclosure -a i386 -a i686 -a noarch -r it.socha.mini32 --repofrompath=it.socha.mini32,/storage/centos/i386/mini
# Dla x86_64
repoclosure -a x86_64 -a i386 -a i686 -a noarch -r it.socha.mini64 --repofrompath=it.socha.mini64,/storage/centos/x86_64/mini


Na płycie można również zapisać pliki kickstart i lekko zmodyfikowany plik konfiguracyjny bootloadera isolinux (archiwum centos.tar.gz)

# Dla i386
wget http://bit.ly/hzo1rA -q -O - | tar xzf - -C /storage/centos/i386/mini
# Dla x86_64
wget http://bit.ly/hzo1rA -q -O - | tar xzf - -C /storage/centos/x86_64/mini
Pozostaje tylko przygotowanie pliku ISO
# Dla i386
mkisofs -v -r -N -L -d -D -J -V CENTOS -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -x lost+found  -o /storage/centos/output/centos-custom-55-i386.iso /storage/centos/i386/mini# Dla x86_64
mkisofs -v -r -N -L -d -D -J -V CENTOS -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -x lost+found  -o /storage/centos/output/centos-custom-55-x86_64.iso /storage/centos/x86_64/mini
Przygotowane obrazy mini płyt instalacyjnych: x86_64 i i386