Poniższa instrukcja została przygotowana bazując na systemie Ubuntu 8.04 amd64, ale bez większych zmian może być wykorzystana do zainstalowania praktycznie każdego systemu operacyjnego na serwerach OVH.

Ktoś by pomyślał ‘tyle zachodu, ale o co?’. OVH udostępnia świetne serwery, na naprawdę dobrych łączach, za bardzo niską cenę (np. gama Kimsufi ma po prostu ceny-killery – konkurują one niemalże z ofertami hostingu shared – http://kimsufi.pl). Jest jedno ale – ich manager jest troszkę ‘ubogi’, np. nie pozwala na zdefiniowanie partycji typu LVM, oraz – co jest, jak dla mnie, najgorsze – domyślna instalacja wymusza używanie kernela dostarczanego przez OVH. OVH tłumaczy to niby wydajnością, etc. aczkolwiek ja, robiąc testy pod kątem aplikacji które mnie interesują, nie zobaczyłem absolutnie żadnej różnicy wydajności między kernelami made-in-OVH a tymi które są dostarczane z dystrybucją (bądź na tyle małe, że różnica zwyczajnie nie jest warta zachodu).

Oczywiście można po prostu zainstalować system bazowy, i potem doinstalować grub’a oraz kernel dystrybucji i w internecie znajduje się wiele howtos jak to zrobić, no ale wtedy dalej pozstaje kwestia partycji LVM których utworzyć z poziomu managera OVH po prostu nie można.

UWAGA: Instrukcja jest copy&paste-friendly. Listingi kodu celowo mają usunięte odpowiedzi systemu, aby można było całe porcję kopiować i wklejać. Pozatym większość czynności przeprowadzanych tutaj to podstawy i odpowiedzi systemu są somewyjaśniające.
Mimo tego uwaga jest wysoce wskazana (szczególnie przy edycji plików konfiguracyjnych – fstab’a, czy ustawienia sieci na 100% będziesz miał inne), a bezmyślne kopiowanie i wklejanie wszystkiego wręcz zabronione :-) .

No więc do dzieła.

Tryb rescue

OVH pozwala uruchomić serwery w trybie rescue – w sumie nic nowego, wiekszość dzisiejszych providerów serwerów dedykowanych udostępnia taką funkcję. Tryb ten, to nic innego jak system operacyjny bootowany z PXE. Jest on bardzo pomocny, możesz dzięki niemu np. poprawić problemy z firewallem, przejrzeć zhackowany system bez ryzyka uruchamiania podmienionych binarek, czy np. zainstalować inny system na swoich dyskach używając np. debootstrap’a, co właśnie zamierzamy zrobić.

No więc uruchamiamy nasz serwer w trybie rescue, i jak dostaniemy długo wyczekiwane dane do niego, logujemy się na niego i…

Dzielimy dysk na partycję

Niektórzy mogą do tego użyć fdisk’a, inni cfdiska – każde narzędzie jest dobre, pod warunkiem że osiągnie się zamierzony efekt, czyli dysk podzielony na partycję wg. własnego uznania.

Ja swój podzieliłem na 3 partycję, jedną dla /boot, jedną na swapa i jedną na gigantyczną partycję LVM w której będę trzymał wszystkie inne partycję.

root@rescue:~# sfdisk -d /dev/sda
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start= 63, size= 514017, Id=83, bootable
/dev/sda2 : start= 514080, size= 8016435, Id=82
/dev/sda3 : start= 8530515, size=968237550, Id=8e
/dev/sda4 : start= 0, size= 0, Id= 0

root@rescue:~# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
root@rescue:~# vgcreate vg0 /dev/sda3
Volume group "vg0" successfully created

Jeżeli chcemy utworzyć partycje LVM, teraz jest na to czas…

lvcreate -n slash -L2048 vg0
lvcreate -n home -L10240 vg0
lvcreate -n usr -L8192 vg0
lvcreate -n tmp -L2048 vg0
lvcreate -n var -L5120 vg0

No i żeby móc zamontować te partycje, musimy je sfortmatować. Tutaj bez żadnych wywijasów – domyślne opcję mkfs.ext3.

mkfs.ext3 /dev/sda1
mkswap /dev/sda2
mkfs.ext3 /dev/vg0/slash
mkfs.ext3 /dev/vg0/home
mkfs.ext3 /dev/vg0/usr
mkfs.ext3 /dev/vg0/tmp
mkfs.ext3 /dev/vg0/var

Wcześniej wspomniałem debootstrap – to właśnie jego użyjemy do instalacji naszego systemu. Ale musimy go mieć gdzie zainstalować – mountujemy partycję główną (slash), tworzymy strukturę katalogów, i montujemy pozostałe partycję.

mount /dev/vg0/slash /mnt
mkdir -p /mnt/boot && mkdir -p /mnt/home && \
mkdir -p /mnt/usr && mkdir -p /mnt/var && \
mkdir -p /mnt/tmp
mount /dev/sda1 /mnt/boot
mount /dev/vg0/home /mnt/home
mount /dev/vg0/usr /mnt/usr
mount /dev/vg0/tmp /mnt/tmp
mount /dev/vg0/var /mnt/var

Jak już mamy przygotowane, sformatowane i zamontowane partycję, czas na…

Instalacja systemu bazowego

Nie sprawdzałem czy tryb rescue ma debootstrap’a, ale nawet jeżeli ma, jest on pewnie bardzo stary. Najlepiej użyć czegoś bardziej aktualnego (chociaż też nie najnowszego).

cd /tmp
wget http://mir1.ovh.net/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.10.tar.gz
tar xzf debootstrap_1.0.10.tar.gz && cd debootstrap
make
cp scripts/ubuntu/gutsy scripts/hardy
export DEBOOTSTRAP_DIR=/tmp/debootstrap
/tmp/debootstrap/debootstrap --arch amd64 hardy /mnt ftp://mir1.ovh.net/ubuntu

Po instalacji systemu bazowego, musimy podmontować /dev i /proc dla nowo zainstalowanego systemu. Jeżeli tego nie zrobimy, nie będziemy mogli zainstalować bootloadera z poziomu chroot’a później, co troszkę zkomplikuje sprawy.

mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev

Mając zainstalowany system bazowy, zamontowane wszystkie niezbędne udziały, czas na…

Chroot

Czym on jest można poczytać tutaj. To z jego poziomu przeprowadzimy dalszy proces konfiguracji systemu tak, aby nasz serwer po ponownym reboocie wstał na cztery łapki i odpowiedział na upgraniony ping oraz pozwolił się nam zalogować.

No więc do dzieła…

LANG= chroot /mnt /bin/bash

W tym momencie zmieni się nam prompt bash’a. To oznacza że jesteśmy w środowisku naszego nowo zainstalowanego systemu operacyjnego.

Teraz czeka nas zabawa, bo musimy skonfigurować system od zera, a zaczynamy od…

Konfiguracja /etc/fstab

System operacyjny musi wiedzieć gdzie i co sobie podmontować, więc konfigurujemy fstab’a.

cat >> /etc/fstab < < EOF
/dev/vg0/slash / ext3 defaults 1 2
/dev/vg0/home /home ext3 defaults 1 2
/dev/vg0/usr /usr ext3 defaults 1 2
/dev/vg0/tmp /tmp ext3 defaults 1 2
/dev/vg0/var /var ext3 defaults 1 2
/dev/sda1 /boot ext3 errors=remount-ro 0 1
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
EOF

Konfiguracja sieci

Aby nasz serwer mógł komunikować się z internetem. Upewnij się że podasz właściwe dane!

cat >> /etc/network/interfaces < < EOF
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 91.121.X.X
netmask 255.255.255.0
network 91.121.X.0
broadcast 91.121.X.X
gateway 91.121.X.X
EOF

Nazwa naszego hosta & /etc/hosts

System instalowany debootstrap'em jest czysty do tego stopnia, że nie ma nawet wpisanego localhost'a do /etc/hosts - musimy to zrobić.

echo ubuntu > /etc/hostname

cat >> /etc/hosts < < EOF
127.0.0.1 localhost
91.121.84.224 ubuntu
EOF

Konfiguracja repozytoriów APT

W tym momencie będziemy mieli zdefiniowane tylko jedno repozytorium - musimy tutaj dodać resztę.

cat > /etc/apt/sources.list < < EOF
deb ftp://mirror.ovh.net/ubuntu/ hardy main restricted
deb-src ftp://mirror.ovh.net/ubuntu/ hardy main restricted

deb ftp://mirror.ovh.net/ubuntu/ hardy-updates main restricted
deb-src ftp://mirror.ovh.net/ubuntu/ hardy-updates main restricted

deb ftp://mirror.ovh.net/ubuntu/ hardy universe
deb-src ftp://mirror.ovh.net/ubuntu/ hardy universe

deb ftp://mirror.ovh.net/ubuntu/ hardy multiverse
deb-src ftp://mirror.ovh.net/ubuntu/ hardy multiverse

deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
EOF

Update systemu

Jak już mamy repozytoria, i podstawową konfigurację za nami, czas zupdatować system... bo niby czemu nie???

apt-get update
apt-get upgrade -y

Instalacja podstawowych usług

Jak już wcześniej pisałem, debootstrap instaluje bardzo podstawowy system. OpenSSH też brakuje. Jeżeli go nie doinstalujemy, nie będziemy mogli się później zalogować na nasz serwer.

Przy okazji instalujemy również inne narzędzia (mdadm, bootloader – grub, lvm2) oraz kernel.

apt-get install openssh-server mdadm grub lvm2 linux-image-server -y

Ustawienie hasła dla root’a

Tego dość często zapominałem, i potem zastanawiałem się co jest grane – nie zrób tego samego błędu. I nigdy, ale przenigdy nie ustawiaj go na coś banalnego (top 3 to ‘qwerty’, ‘asdf’ i ‘root’).

passwd root

Instalacja bootloader’a

Nasz system jest już prawie gotowy – ostatnią czynnością którą musimy wykonać jest instalacja bootloader’a.

OVH domyślnie instaluje lilo, który jest już raczej przeżytkiem – my użyjemy GRUB’a. Zainstalowaliśmy go już wcześniej, więc przechodzimy bezpośrednio do konfiguracji.

Tworzymy katalog dla GRUB’a oraz zmuszamy go do wygenerowania nam menu.lst (komenda update-grub).

mkdir /boot/grub
update-grub

Teraz, aby móc zainstalować bootloader, potrzebny nam plik przedstawiający zawartość obecnych w systemie partycji – /etc/mtab. Tworzymy go sobie bazując na /proc/mounts.

grep -v rootfs /proc/mounts > /etc/mtab

I… instalujemy GRUB’a!

grub-install /dev/sda

Powinniśmy otrzymać coś takiego:

Searching for GRUB installation directory ... found: /boot/grub
Installing GRUB to /dev/sda as (hd0)...
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/sda

Tutaj ważne jest aby /boot/grub/device.map zawierał tylko listę dysków – jeżeli będzie tam fd0, trzeba go wykasować.

Na wszelki wypadek, dobrze jest też wywołać polecenia instalacji z poziomu linii poleceń grub’a

grub

W tym momencie prompt zmieni się nam na ‘grub>’, co oznacza że jesteśmy w konsoli interaktywnej GRUB’a. Wykonujemy następujące polecenia:

device (hd0) /dev/sda
root (hd0,0)
setup (hd0)
quit

Na koniec przebudowywujemy initrd…

update-initramfs -c -t -k all

I to wszystko! Możemy wyjść z chroot i zrebootować nasz serwer!

exit
sync && reboot

Po około minucie, serwer powinien zacząć odpowiadać na PINGi, i powinniśmy móc się na niego zalogować przez SSH.

Objerzałem obcych, byłem na ślubie (nie moim ;-) ), kupiliśmy piekarnik do chleba, fajny spacer w Hyde Park, kupiłem zestaw małego boksera (chociąż w końcu-końców został użyty ‘na mnie’), byłem na kolejnym ślubie, zacząłem grać w plemiona, pojechaliśmy do Rzymu, ‘nie jedz gorącego chleba!’, pojechaliśmy do Polski, kupiliśmy TV :-) , dostałem awans, christmass party w firmie ;-) , święta w domu, air berlin zgubiło mi bagaż (którego do dzisiaj nie ma), nowy rok, zapomniałem dodać wody do chleba (mało się nie zapaliła mąka), przeszedłem serię ‘Call of Duty’ (i zakochałem się w tej grze), paraliż Londynu (spadło 15 cm śniegu), dwa lata w Londynie, znaleźliśmy nowe mieszkanie, przeprowadzka (i wielkie fu** – ile my mamy gratów), skręciłem komodę i szafeczkę, dostałem kolejny awans, spędziłem noc w Bunkrze, dostałem nowego Macbooka, zachorowały mi korzonki, pojechaliśmy do Polski – Wielkanoc, pojechaliśmy do Alton Towers, pojechaliśmy do Grecji (gdzie widziałem tysiąc kóz i byłem w najlepszym night-clubie w życiu), wojna z British Gas, zabookowaliśmy wakację na Rodos, pierwszy raz jechałem samochodem w Anglii, pracowałem cały weekend, cały lipiec czekałem na wakacje ;-) , pojechaliśmy na Rodos (było gorąąąąco), jak wróciłem wszystko ‘jebło’ (tak – to właściwe słowo) w pracy, kupiłem X-plane (i poczułem jak trudno się lata), pojechaliśmy wraz ze znajomymi z firmy w góry (widziałem odcinek z serii Anglicy w Zakopanym i miłe panie kelnerki), 09/09/09, pojechaliśmy do Polski.

No – to jesteśmy na bieżąco :-) .