Gentoo auf dem Root Server installieren

Mit Hilfe des Rescue-Systems ist es durchaus möglich, Betriebssysteme oder Varianten zu installieren, die nicht direkt über die Verwaltungs-Interfaces der Inter.net Root Server verfügbar sind. Das sei hier am Beispiel von einem aktuellen Gentoo-Linux in der 32 Bit Version dargestellt.

 


 

Schritt 1: Rescue-System starten, Root Server vorbereiten

Über die Verwaltungs-Konsole Ihres Root Server wird das Rescue-System gestartet und mit einem ssh-password versehen. Nach ca. 2 Minuten ist der Rootserver verfügbar und kann per ssh erreicht werden. Nunmehr loggt man sich per ssh ein und beginnt mit dem Freischaufeln der Festplatte durch überschreiben der Partitionstabelle mit Nullen. ACHTUNG: Die Daten auf dieser werden hierbei gelöscht und sind unwiederbringlich verloren.

root@sysresccd /root % dd if=/dev/zero of=/dev/sda bs=1024k count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.603951 s, 17.4 MB/s


Schritt 2: Anlegen der Partitionen

Nunmehr gilt es, eine Partitionierung der Festplatte Ihres Rootservers so vorzunehmen, wie sie beim späteren System erwünscht ist. Der Einfachheit halber beschränken wir uns hier auf eine Partition für das Gesamtsystem, eine Boot-Partition und etwas Swap-Space.

Als erstes legen wir die Boot-Partition an. Es muss eine Primäre Partition sein und es schadet nicht, diese am Anfang der Festplatte zu haben. Eine Größe von 100 MB ist mehr als ausreichend.

root@sysresccd /root % fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6e976f47.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19457, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-19457, default 19457): +100M

Command (m for help):

Nun kommt der Swapspace und die eigentliche Root-Partition. Der Swap-Space ist mit 2 GB mehr als Ausreichend bemessen.

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (15-19457, default 15):
Using default value 15
Last cylinder, +cylinders or +size{K,M,G} (15-19457, default 19457): +2G

Der Typ der Swap-Partition sollte wie dargestellt auf 82 geändert werden, so das diese korrekt definiert ist.

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (277-19457, default 277):
Using default value 277
Last cylinder, +cylinders or +size{K,M,G} (277-19457, default 19457):
Using default value 19457

Nun aktivieren wir die Boot-Partition

Command (m for help): a
Partition number (1-4): 1
Command (m for help): p













Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x6e976f47
Device Boot      Start         End      Blocks   Id  System
/dev/sda1  *            1          14      112423+  83  Linux
/dev/sda2              15         276     2104515   82  Linux swap / Solaris
/dev/sda3             277       19457   154071382+  83  Linux

Command (m for help):







Die Partitionstabelle des Root Server wird nun noch auf die Platte geschrieben, damit der Kernel das auch merkt. Wichtig ist es, das Aktivieren der /boot-Partition (1) nicht zu vergessen!

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@sysresccd /root %

Sollte sich das Rootserver System an dieser Stelle dafüber beschweren, das die Partition Table nicht neu geladen werden kann weil sie noch in Benutzung ist, so sollte hier einfach einmal erneut in das Rescue-System rebootet werden.


Schritt 3: Anlegen der Filesysteme

Für unsere Filesysteme verwenden wir der Einfachheit halber das ext2 Filesystem, die Verwendung anderer Filesysteme wie z.B. xfs ist natürlich auch möglich muss aber später bei der Kernel-Konfiguration und der fstab beachtet werden.

root@sysresccd /root % mke2fs /dev/sda1
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
28112 inodes, 112420 blocks
5621 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
14 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Das Root-Filesystem bekommt ein Journal

root@sysresccd /root % mke2fs -j /dev/sda3
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
9633792 inodes, 38517845 blocks
1925892 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1176 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@sysresccd /root %

Der Swap-Space wird dann auch gleich konfiguriert.

root@sysresccd /root % mkswap /dev/sda2
Setting up swapspace version 1, size = 2104508 KiB
no label, UUID=86e25685-7b69-47a2-9d13-855e5a13fdbb

Und wenn wir diesen schon haben, dann können wir dem System den auch gleich als zusätzlichen Speicherplatz einrichten. Nicht das dieser bei den 2GB Speicher des Rootservers gebraucht würde zu diesem Zeitpunkt aber schaden tut es nicht.

root@sysresccd /root % swapon /dev/sda2

Schritt 4: Einhängen der Filesysteme

Wir wollen uns nunmehr auf das spätere Root Server System mittels eines chroots begeben. Dafür ist es notwendig, den Verzeichnisbaum einzuhängen und das Basissystem zu installieren.

root@sysresccd /root % mkdir -p /mnt/gentoo
root@sysresccd /root % mount /dev/sda3 /mnt/gentoo
root@sysresccd /root % mkdir -p /mnt/gentoo/boot
root@sysresccd /root % mount /dev/sda1 /mnt/gentoo/boot

 



 

Schritt 5: Stage3 Download und chroot auf das neue Root Server System

Nunmehr laden wir den aktuellen Stage-3 runter. Der Link bedarf der Aktualisierung im Laufe der Zeit – beim Erstellen dieses Artikels war er aktuell.

root@sysresccd /root % cd /mnt/gentoo
root@sysresccd /mnt/gentoo % wget ftp://de-mirror.org/
distro/gentoo/releases/x86/autobuilds/20091201/
stage3-i686-20091201.tar.bz2

Auspacken des Stage-3 mittels Tar.

root@sysresccd /mnt/gentoo % tar xvjpf stage3-*.tar.bz2

Nun fehlt noch der aktuelle Portage-Snapshot-Baum, auch dieser will dann gleich entpackt werden. Dieser Link sollte immer aktuell sein.

root@sysresccd /mnt/gentoo % wget ftp://de-mirror.org/
distro/gentoo/releases/snapshots/current/portage-latest.tar.bz2

root@sysresccd /mnt/gentoo % tar xvjpf portage-latest.tar.bz2

Bei Gentoo werden die Pakete grundsätzlich compiliert, insofern sind die Einstellungen für das make mit die Wichtigsten. Wir editieren daher zuerst die zukünftige make.conf.

root@sysresccd /mnt/gentoo % nano -w etc/make.conf

Der Inhalt gestaltet sich für mich wie folgt, hier mag jeder seine Präferenzen haben.

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="-O2 -march=i686 -pipe"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="i686-pc-linux-gnu"
MAKEOPTS="-j2"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"

Wir benötigen die Nameserver-Daten des aktuellen Systems

root@sysresccd /mnt/gentoo % cp /etc/resolv.conf etc/resolv.conf

Nunmehr holen wir uns noch das /proc und /dev Filesystem des rescue-systems in das spätere System und können dann ein chroot in das zukünftige System machen.

root@sysresccd /mnt/gentoo % mount -t proc none /mnt/gentoo/proc
root@sysresccd /mnt/gentoo % mount -o bind /dev /mnt/gentoo/dev
root@sysresccd /mnt/gentoo % chroot /mnt/gentoo /bin/bash

Ein env-update später und das Profile-einlesen ist das System für uns nutzbar.

sysresccd / # env-update
>>> Regenerating /etc/ld.so.cache...
sysresccd / # source /etc/profile


 

Schritt 6: Einrichten des Root Server Systems

Jetzt können wir damit anfangen, den Builds-Tree zu synchronisieren.

sysresccd / # emerge --sync

Das dauert jetzt ein wenig. Hiernach wählen wir die Locale-Definitionen aus, die das System unterstützen sollte. Dazu editiert man die Datei /etc/locale.gen und entfernt die Kommentarzeichen vor den Localen, die man haben will. In unserem Fall sind das die folgenden en_US ISO-8859-1,en_US.UTF-8 UTF-8,de_DE@euro ISO-8859-15.

sysresccd / # nano /etc/locale.gen

Danach müssen diese noch verarbeitet werden,.

sysresccd / # locale-gen
* Generating 3 locales (this might take a while) with 1 jobs
*  (1/3) Generating en_US.ISO-8859-1 ...                                 [ ok ]
*  (2/3) Generating en_US.UTF-8 ...                                      [ ok ]
*  (3/3) Generating de_DE.ISO-8859-15@euro ...                           [ ok ]
* Generation complete
sysresccd / #

Nun brauchen wir noch eine Zeitzone, die konfigurieren wir dann mal auf Berlin.

sysresccd / # cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

An dieser Stelle könnte man noch das System-Profil auswählen (”eselect profile”). Wir belassen es einfach mal beim Standard. Die geneigten User werden sich das Passende auswählen.

Nun geht es los mit dem Download/Entpack-Vorspiel bevor es in die Compilier-Orgie geht. Fangen wir mit der Bereitstellung der Sources an.

sysresccd / # emerge gentoo-sources

Schritt 7: Konfiguration und Compilieren des Kernels

Als nächstes geht es jetzt an die Kernel Konfiguration.

sysresccd / # cd /usr/src/linux
sysresccd linux # make menuconfig

Für die Atom-Server nehmen wir als CPU-Type den Core2, die restlichen Optionen können einfach auf dem Standard bleiben (bei 2.6.31, das mag sich mal ändern. Im zweifelsfall ein “emerge pciutils” und danach ein “lspci”, um die Teile zu identifizieren. Wichtig ist es das Second extended fs (ext2) zu aktivieren, da wir das /boot-Filesystem mit diesem formattiert haben – direkt als einkompiliert und nicht als Modul macht in diesem Fall Sinn.

Nunmehr kann der Kern gebaut werden, das dauert ein wenig (auf dem Atom-Server ca. 38 Minuten). Nach der Übersetzung gehen wir gleich über zu Installation des Kernel

sysresccd linux # make && make modules_install
sysresccd linux # make install

Im Verzeichnis /boot befindet sich nunmehr der aktuelle Kernel für das System, den Dateinamen brauchen wir später für die Installation des Bootloaders.

Auf unserem Testsystem sah /boot folgendermaßen aus:

sysresccd linux # ls -la /boot
total 5707
drwxr-xr-x  4 root root    1024 2009-12-05 11:36 .
drwxr-xr-x 19 root root    4096 2009-12-04 12:39 ..
lrwxrwxrwx  1 root root       1 2009-12-04 12:35 boot -> .
-rw-r--r--  1 root root   67614 2009-12-05 11:32 config-2.6.31-gentoo-r6
drwxr-xr-x  2 root root    1024 2009-12-05 11:37 grub
-rw-r--r--  1 root root       0 2009-12-01 12:35 .keep
drwx------  2 root root   12288 2009-12-04 12:21 lost+found
-rw-r--r--  1 root root 1618767 2009-12-05 11:32 System.map-2.6.31-gentoo-r6
-rw-r--r--  1 root root 4111168 2009-12-05 11:32 vmlinuz-2.6.31-gentoo-r6

Hierbei ist vmlinuz-2.6.31-gentoo-r6 unser Kernel. Nun lassen wir das System den Bootloader bauen.


Schritt 8: Einrichten des Boot-Loaders

sysresccd linux # emerge grub

Der Bootloader muss nun noch wissen welchen Kernel er booten soll, dazu editieren wir die Datei menu.lst im Verzeichnis /boot/grub.

sysresccd linux # cd /boot/grub
sysresccd grub # nano menu.lst

Andererseits wäre es vorher vielleicht Zeit für einen vernünftigen Edtior, ein “emerge vim” hilft zuverlässig gegen das Verwenden von nano!

Die /boot/grub/menu.lst editieren wir auf (man beachte die Dateinamen aus /boot – das muss übereinstimmen):

default 0
timeout 1

title gentoo (2.6.31-gentoo-r6)
root (hd0,0)
kernel /boot/vmlinuz-2.6.31-gentoo-r6 root=/dev/sda3

Der Timeout von 1 Sekunde ist kurz genug, eingeben können wir eh nichts beim Booten der Maschine. Als nächstes will der Bootloader dann noch installiert werden,  was vorher noch eine gültige mtab benötigt. Das erledigen wir mit

sysresccd grub # grep -v rootfs /proc/mounts > /etc/mtab
sysresccd grub # grub-install –no-floppy /dev/sda

Nun ist unsere Maschine auch in der Lage zu booten. Allerdings fehlt noch die Netzwerkunterstützung und ein reboot würde jetzt ein System erzeugen, das keine vernünftige Verbindung zur Außenwelt hat (abgesehen von noch einigen anderen Kleinigkeiten wie zB keinem root-password und einer fstab). Insofern richten wir nun das Netz ein.


Schritt 9: Einrichten des Netzwerks

Die Rootserver werden über DHCP konfiguriert, dazu brauchen wir einen dhcp-client und die entsprechende netplug-Funktionalität.

sysresccd grub # emerge sys-apps/netplug
sysresccd grub # emerge net-misc/dhcp

Die Datei /etc/conf.d/net richten wir mit folgendem Inhalt ein (mittels nano oder vim):

modules=( "dhclient" )
config_eth0=( "dhcp" )

Dann fügen wir noch einen Autostart für das Netz den RC-Scripten hinzu;:

sysresccd grub # rc-update add net.eth0 default
* net.eth0 added to runlevel default

Einloggen von außen wollen wir uns auch noch können, dazu brauchen wir einen ssh-Dämonen, den wir auch gleich automatisch starten wollen.

sysresccd grub # emerge openssh
sysresccd grub # rc-update add sshd default
* sshd added to runlevel default

Standardmäßig ist der ssh-Daemon so eingestellt, das man sich als root nicht von außen einloggen darf.  Das hat durchaus seinen Sinn und das möge jeder für sich entscheiden. Zur Einfachheit halber erlauben wir uns das Einloggen als root indem wir in /etc/ssh/sshd_config aus der Zeile “#PermitRootLogin yes” das davor stehende Kommentarzeichen (’#') entfernen.


Schritt 10: Restliche Einrichtung

Das root-Password gehört nun auch mal gesetzt. Man kann sich natürlich auch jetzt einen nicht-root-user anlegen und später ein su machen, dann braucht man das PermitRootLogin nicht. Root-Passwörter sollten inbesondere wenn man das Ganze schon von außen erlaubt auch besonders komplex sein.

sysresccd grub # passwd root

Ein system-Logger, logrotate und ein cron schaden nicht, sollte man haben:

sysresccd grub # emerge syslog-ng
sysresccd grub # rc-update add syslog-ng default
* syslog-ng added to runlevel default
sysresccd grub # emerge vixie-cron
sysresccd grub # rc-update add vixie-cron default
* vixie-cron added to runlevel default
sysresccd grub # emerge logrotate







Um Booten zu können benötigen wir noch eine fstab, damit das System seine Filesysteme auch findet. Dazu editieren wir die Datei /etc/fstab auf folgenden Inhalt:

/dev/sda1        /boot        ext2        noauto,noatime       1 2
/dev/sda3        /         ext3        noatime         0 1
/dev/sda2        none         swap        sw         0 0
shm              /dev/shm     tmpfs       nodev,nosuid,noexec  0 0

Die Standardeinträge für das cdrom können raus, so etwas haben wir nicht.

Nun ist es so weit, in der Rootserver Admin Console des Communicators auf www.de.inter.net können wir nun das Booten auf die Festplatte umstellen und das System mit einem einfachen

sysresccd grub # reboot







neu starten. Ca. 2 Minuten später sollte es via ssh als root mit dem selbst eingegeben Password erreichbar sein. Wenn dem nicht so ist, kann man es wieder mit dem Rescue-System neu starten, die Filesysteme einhängen und in der chroot Umgebung gucken was schief gelaufen ist oder was man vergessen hat.

Viel Spaß!

cpr certification online
cpr certification onlineCPR certificationcpr certification online