Samsung SMT-7020S - Etherboot und USB Boot
Inhaltsverzeichnis |
Allgemein
Das Ziel dieser beschreibung ist es auf dem original DOM (Disk On a Module) von der Samsung SMT-7020s ein Grub boot laufwerk einzurichten. Das kann dann wahlweise Etherboot oder Linux von USB-stick booten.
Damit muß man entweder nichts dazukaufen oder nur einen 4GB USB stick besorgen. Einen 2GB stick geht notfalls auch mit abzügen. Dann muß man aber /usr/src und /usr/local/src weglassen - womit man nicht mehr kompilieren kann !
Man muß also die Hardware nicht modifizieren, Strom abknapsen o.ä, um linux zu booten. Und da keine platte im gehäuse ist wird es auch nicht so warm und damit leiser.
Vorgesehen ist verschiedene Etherboot Disks zu integrieren - damit man mehr möglichkeiten hat.
Offene fragen/ TODO's
Braucht ZenDeb einen Swapfile ?
Wenn ja, wie bei Etherboot (Netzwerkboot) lösen ? Ein USB-Stick ?
Hintergrundinfos und links
Wenn hier "PXE boot" steht dann ist damit Netzwerk boot gemeint. Das kann entweder über der Netzwerkkarte (geht nicht beim Samsung 7020s) oder per Etherboot image stattfinden. Siehe dazu auch http://de.wikipedia.org/wiki/Preboot_Execution_Environment
Infos zu etherboot einrichtung (wir machen das ggf. ein bischen anderes - aber gute hintergrundinfos).
http://syslinux.zytor.com/pxe.php (pxelinux infos) http://www.rrze.uni-erlangen.de/dienste/arbeiten-rechnen/linux/howtos/booten/pxe.shtml http://syslinux.zytor.com/wiki/index.php/PXELINUX http://www.vdr-portal.de/board/thread.php?postid=657188#post657188
NFS boot :
http://www.faqs.org/docs/Linux-mini/NFS-Root.html
ETHERBOOT einrichten
PXE boot auf dem server vorbereiten
NFS-server installieren und z.b. unter /srv/zendeb die ZenDeb distribution ablegen.
Dann folgende zeile in die datei /etc/exports hinzufügen :
/srv/zendeb 192.168.0.0/255.255.255.0(rw,async,no_root_squash,no_all_squash)
(hier ggf. IP's und freigabe anpassen)
und nfs-server aktualisieren :
sudo exportfs -a
Dann den tftpd server (unbedingt tftp-hpa oder atftpd nutzen) installieren
DHCP oder Feste IP-Adressen für PXE nutzen ?
Jetzt muss man sich entscheiden zwischen der nutzung von einen DHCP Server oder Etherboot mit Feste IP-Adressen. Am besten vorher beides durchlesen. Zu Feste IP's siehe weiter unten unter "PXE mit feste IP-Adressen".
PXE mit DHCP-server
jetzt die konfiguration für den DHCP server für PXE boot. ACHTUNG !! ggf. zuerst einen alten DHCP server jetzt deaktivieren - der in einen Router o.ä. enthalten ist !!! Dann dhcp-server installieren und im config (z.b. /etc/dhcp3/dhcp.conf oder /etc/ltsp/dhcpd.conf) dann so was wie das hier eintragen :
group { filename "/pxelinux.0"; use-host-decl-names on; subnet 192.168.0.0 netmask 255.255.255.0 { # tftp server next-server 192.168.0.2; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name "example.com"; option domain-name-servers 192.168.0.1; option perform-mask-discovery false; option router-discovery false; option default-ip-ttl 10; }
Möchte man auf einen server mehrere verschiedene pxe files booten können (z.b. auf einen ubuntu LTSP server), dann kann man über die eindeutige MAC adresse eine bestimmte datei zuweisen :
host test-pc1 { hardware ethernet 00:0c:29:2f:c6:33; filename "/pxelinux.0"; }
PXE mit feste IP-Adressen
ACHTUNG !! Das hier muß man nur machen wenn man sich für Feste IP-Adressen entschieden hat und DHCP nicht benutzt/eingerichtet hat. Mit Feste IP's hat man den nachteil das man PRO CLIENT (also pro Samsung) selber eine eigene Etherboot datei erstellen muß und diese dann auf dem DOM bringen. Es hat aber den vorteil das man den DHCP Server nicht anfassen muß, z.B. weil man das nicht kann weil er nicht abschaltbar ist, jemand anderes gehört, o.ä.
DHCP ist viel flexibler !
Tipp : Vorkonfigurierte Etherboot-images mit den daten von unten sind in mein tar enthalten ! Ein mal mit tftp-server 192.268.0.1 und ein mal mit 192.168.0.99
Wir erstellen jetzt ein boot image das wir später auf den DOM bringen.
Im Browser http://www.rom-o-matic.net/5.4.3/ aufrufen und die einstellungen wie folgt vornehmen :
NIC/ROM type: eepro100:82562em ROM output format: .zlilo
Dann "Configure" anklicken und einige einstellungen wie folgt vornehmen :
ASK_BOOT: -1 (beschleuningt das booten um 3 sekunden)
Jetzt müssen wir die korrekten IP-Adressen einrichten. ACHTUNG !! Hier muß jeder selber die für sein netz gültige adressen eintragen. Ggf. die adresse im vorhandenen DHCP server reservieren oder welche nutzen die außerhalb des DHCP bereichs liegen ! Das hier sind jetzt adressen die ich nutze.
Bei "USE_STATIC_BOOT_INFO" den haken setzen, damit die folgende infos beutzt werden STATIC_CLIENT_IP: 192.168.0.5 (diese ist pro Samsung im haus anders) STATIC_SUBNET_MASK: 255.255.255.0 STATIC_SERVER_IP: 192.168.0.1 STATIC_GATEWAY_IP: 192.168.0.1 STATIC_BOOTFILE: /pxelinux.0-1.61
dann (ganz unten oder ganz oben) "Get ROM" klicken und speichern z.b. auf einen USB stick unter dem namen :
eb-5.4.3-eepro100-IP.zlilo
Später unten bei Grub "installieren" wir dieses dann auf dem DOM.
Da wir Grub nutzen können wir jetzt weitere Etherboot images auf dem selben weg erstellen, z.b. wenn wir mehrere Samsungs's haben ;)
PXE boot file installieren
Dann brauchen wir den pxelinux.0 von der neuesten version hier laden. Ich habe für DHCP die version 3.63 von http://www.kernel.org/pub/linux/utils/boot/syslinux/ benutzt :
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.63.tar.bz2 tar -xvjf syslinux-3.63.tar.bz2 syslinux-3.63/pxelinux.0
und pxelinux.0 in den tftp root legen (ubuntu = /var/lib/tftpboot).
sudo cp -v syslinux-3.63/pxelinux.0 /var/lib/tftpboot/
Alte pxelinux.0 version laden + installieren unter einen anderen namen - wird nur benötigt für Feste IP-Adressen mit Etherboot :
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/Old/syslinux-1.61.tar.bz2 tar -xvjf syslinux-1.61.tar.bz2 syslinux-1.61/pxelinux.0 sudo cp -v syslinux-1.61/pxelinux.0 /var/lib/tftpboot/pxelinux.0-1.61
Tipp: das ist auch die datei die wir oben im Etherboot image mit Feste IP's eingestellt hatten !
Wir legen die datei ab unter anderen namen damit man ggf. beides (Feste IP und DHCP) gemeinsam verwenden kann.
Dann im tftp root (/var/lib/tftpboot) ein verzeichnis pxelinux.cfg anlegen
sudo mkdir /var/lib/tftpboot/pxelinux.cfg
und eine datei pxelinux.cfg/default anlegen mit folgender inhalt :
LABEL linux KERNEL vmlinuz-2.6.17.6-det APPEND root=/dev/nfs nfsroot=192.168.0.1:/data/nfsroot/zendeb,tcp,timeo=60,rsize=8192,wsize=8192 IPAPPEND 1
(Evt. die IP-adressen und /srv/zendeb auf die genutze NFS server + freigabe anpassen.)
"tcp,timeo=60" war bei mir notwendig ansonten brachte NFS immer wieder die meldungen :
kernel: nfs: server 192.168.0.1 not responding, still trying kernel: nfs: server 192.168.0.1 OK
wsize und rsize kann ect. erhöht werden auf 32768 - einfach mal ausprobieren und (später) auf dem samsung dann überprüfen was genommen wurde mit: nfsstat -m
Kernel für Netzwerk boot anpassen
Jetzt den (ZenDeb) kernel anpassen für Network boot.
Tipp: In dem boot-tar unten unter "Download" findet ihr den heute 29.05.2008) aktuellen kernel für ZenDeb mit Netzwerk boot eingebaut. Ihr müsst sie also ggf. nicht selber kompilieren !
Dies klappt (zumindest bei mir) bei ZenDeb direkt, ansonsten die zu der distribution dazugehörige Kernel Compile doku lesen !
cd /usr/src/linux make menuconfig
Dann bei diesen optionen es so einstellen das "*" am anfang der zeile steht (nicht "M") damit wird es fest im kernel integriert und nicht als modul kompiliert :
Networking / Networking Options / IP: kernel level autoconfiguration IP: DHCP support File systems / Network File systems / Root file system on NFS Device drivers / Network device support / Ethernet (10 or 100M) / Intel(R) Pro/100+ Support
und Kompilieren (evt. ohne "make clean") :
make clean && make >make.log 2>&1 make install
Dann den NEUEN Netzwerk-boot-kernel ins tftp root dir kopieren :
sudo cp /srv/zendeb/boot/vmlinuz-2.6.17.6-det /var/lib/tftpboot/
/etc/fstab anpassen für Netzwerk boot
Jetzt die /srv/zendeb/etc/fstab (von dem zendeb im NFS export !) wie folgt ändern :
proc /proc proc defaults 0 0 tmp tmp tmpfs defaults 1 2 none / tmpfs defaults 0 0
ggf. auch NFS mount für /video oder /media einrichten.
Dann vieleicht "/srv/zendeb/etc/vdr/sysconfig" einstellung "NETWORK" ändern in "AUS" (war notwendig im VMware test - sonst kein kompletter boot möglich)
DOM mit Grub Einrichten für Ether- und USB-boot
Downloads
TODO: Downloadlinks kommen noch !
- Fertiges USB+Etherboot DOM
- Tar mit inhalt von dem DOM zum selbermachen.
Vorarbeiten
!!! VORHER CHECKEN / BESORGEN !!!
- USB stick mit Grub bzw. die benötigten dateien vorhanden (siehe download) ? Oder per NFS mounten ? Oder auf eine Festplatte ? Sonst ist kein Grub einrichtbar !
- Entscheiden ob wir per DHCP oder mit Feste IP-Adressen arbeiten wollen, siehe weiter oben unter "PXE mit feste IP-Adressen".
- "Ubuntu Desktop edition" oder "Knoppix" boot-cd besorgen. Ich benutze hier Ubuntu 8.04 Desktop.
DOM anschliessen und Linux-CD booten
Damit wir das DOM neu beschreiben können müssen wir es ein einen anderen rechner an den ersten IDE port (Primary IDE) anschliessen.
DOM anschliessen inkl. 5V - anleitung hier :
Nur so als tipp, man braucht nur 5V anzulegen, null kommt von dem IDE stecker. Und noch ein tipp, schimft aber nicht auf mich wenn es schief geht! Und man muss auch nicht löten, man kann mit etwas vorsicht einfach ein kabel durch das 5V loch stecken und umbiegen. Es darf nur kein kontakt zu anderen stellen haben!!
Ubuntu Desktop oder Knoppix CD einlegen und booten. Dann Terminal Shell starten.
Jetzt müssen wir feststellen welches device das DOM ist. Das kann man z.b. mit
ls /dev/sd*
Wenn nur das DOM angeschlossen ist sollte hier nur /dev/sda auftauchen. Ansonsten mit
fdisk -l /dev/sda
Schauen wie gross das device ist. Es sollte 32MB gross sein !
Wenn das korrekte DOM-device gefunden wurde und nicht /dev/sda ist, dann an allen stellen in diesem beitrag "/dev/sda" ersetzen durch eurer device.
Achtung, für nicht-Ubuntu-user. Das sudo ist ggf. bei anderen Linux Distributionen nicht notwendig bzw. verhindert die ausführung. Notfalls das hier eingeben, dann klappt es wieder ;)
Bei Ubuntu NICHT !!
alias sudo=' '
Vorgefertigtes Boot Image
Statt alles zu fuß zu machen kann man hier einfach ein vorgefertigtes DOM einspielen.
Als erstes oben unter Samsung_SMT-7020S_-_Etherboot_und_USB_Boot#Downloads das DOM-image runterladen und auf ein USB stick oder ähnliches ablegen.
Dann den USB Stick mit dem DOM image einlegen - er wird dann automatisch gemountet unter /media
Wechseln auf den USB-stick (XXX ersetzen durch den korrekten namen) :
cd /media/X bzip2 -d dom_grub_*.bz2
DOM image install (das datum 20080601 ggf. anpassen) :
sudo dd if=dom_grub_20080601.img of=/dev/sda
Nur interessant wenn ihr USB-boot machen wollt.
Zur zeit ist USB boot im DOM-image auf /dev/sda3 eingestellt. Und zware weil ich das so brauche - es gibt auf mein USB stick drei partitionen und die dritte ist das mit ZenDeb. Das ist wahrscheinlich bei euch nicht korrekt und ihr könnt das entweder jetzt sofort anpassen oder später.
Als erstes das DOM mounten :
mkdir /tmp/dom-boot ; sudo mount /dev/sda1 /tmp/dom-boot
und dann mit
sudo vi /tmp/dom-boot/grub/menu.lst
die menu.lst anpassen. In der zeile der mit "kernel" anfängt müssen wir das "root=/dev/sda3" ändern in "root=/dev/sda1".
Grub beim booten für USB-Boot anpassen
Man kann aber auch beim booten vom Samsung im Grub menü das device anpassen - achtung !! die änderung ist nicht permanent !! Man muss also nach erfolgreicher boot die menu.lst auf dem DOM noch mal anpassen !
Das macht man so. Im Grub boot menü drückt man die taste "e", dann wählt man mit den pfeiltasten die zeile die mit "kernel" anfängt aus und drückt noch mal "e". Jetzt kann man mit pfeiltaste links zurückgehen bis "root=/dev/sda3" und ändern in das korrekte device, z.b. "root=/dev/sda1". Wenn man fertig mit der änderung ist drückt man die Enter-taste und kann mit der taste "b" die geänderte konfiguration booten.
Nach dem ersten erfolgreichen boot bitte folgende zeile in die /etc/fstab hinzufügen :
/dev/hda1 /boot ext2 defaults,noatime 1 1
und dann das DOM unter /boot mounten + änderungen permanent machen mit
sudo vi /boot/grub/menu.lst
Siehe aber auch weiter unten [[Samsung_SMT-7020S_-_Etherboot_und_USB_Boot#.2Fetc.2Ffstab_anpassen] für weitere anpassungen an fstab.
Alles selber zu fuß einrichten
Nur zur Info, es gibt oben ein fertiges DOM-Image das man einspielen kann.
Wir wollen jetzt Grub installieren auf das DOM.
Ich gehe davon aus das das DOM wie oben beschreiben angeschlossen ist, das die Linux-CD gebootet ist und wir haben das korrekte device (/dev/sda) gefunden.
DOM partitionieren
Zuerst den DOM einrichten mit cfdisk
sudo fdisk /dev/sda
Die erste Partition so groß machen wie es geht und bootbar markieren, dazu folgendes eingeben :
- "n", "p", "1", "Enter", "Enter"
- "a", "1"
- "w"
Mit dem "w" werden die änderungen geschreiben.
Das sieht dann ungefähr so aus mit
sudo fdisk -l /dev/sda
Device Boot Start End Blocks Id System /dev/sda1 * 1 97 97744+ 83 Linux
(Größe passt nicht genau da es von einem experiment unter vmware ist !)
Dann filesystem auf den ersten partition erstellen
sudo mkfs.ext2 /dev/sda1
DOM Mounten und befüllen
Dann DOM boot device mounten :
mkdir /tmp/dom-boot ; sudo mount /dev/sda1 /tmp/dom-boot
Dann den USB stick oder was auch immer, wo das Grub etc. enthalten ist , mounten
mkdir /tmp/usb-stick ; sudo mount /dev/sdY1 /tmp/usb-stick
damit die beispiele funktioniern könnt ihr aber auch ein link erzeugen auf dem jeweilgen (automatisch) gemountetes media
ln -s /media/XXXXXXX /tmp/usb-stick
(XXXXXXX ersetzen durch das korrekte verzeichnis)
Boot laufwerk befüllen mit dem tar von Download oben :
cd /tmp/dom-boot/ sudo tar -xvjf /tmp/usb-stick/dom-boot-grub-general.tar.bz2
Das sieht dann z.b. wie folgt aus.
/tmp/dom-boot/ :
lrwxrwxrwx 1 root root 1 2008-05-29 14:32 boot -> . lrwxrwxrwx 1 root root 19 2008-05-29 14:32 config -> config-2.6.17.6-det -rw-r--r-- 1 root root 37301 2008-05-16 16:16 config-2.6.17.6-det -rw-r--r-- 1 cjac cjac 23932 2008-05-29 10:22 eb-5.4.3-eepro100-IP-99.zlilo -rw-r--r-- 1 cjac cjac 23928 2008-05-29 10:23 eb-5.4.3-eepro100-IP.zlilo -rw-r--r-- 1 root root 24605 2008-05-19 14:28 eb-5.4.3-eepro100.zlilo drwxr-xr-x 2 root root 1024 2008-05-29 10:27 grub drwx------ 2 root root 12288 2008-05-16 16:05 lost+found lrwxrwxrwx 1 root root 23 2008-05-29 14:32 System.map -> System.map-2.6.17.6-det -rw-r--r-- 1 root root 683052 2008-05-16 16:16 System.map-2.6.17.6-det lrwxrwxrwx 1 root root 20 2008-05-29 14:32 vmlinuz -> vmlinuz-2.6.17.6-det -rw-r--r-- 1 root root 1578353 2008-05-16 16:16 vmlinuz-2.6.17.6-det
/tmp/dom-boot/grub :
-rw-r--r-- 1 root root 197 2008-05-16 16:16 default -rw-r--r-- 1 root root 60 2008-05-16 16:16 device.map -rw-r--r-- 1 root root 8056 2008-05-16 16:16 e2fs_stage1_5 -rw-r--r-- 1 root root 7904 2008-05-16 16:16 fat_stage1_5 -rw-r--r-- 1 root root 16 2008-05-16 16:16 installed-version -rw-r--r-- 1 root root 8608 2008-05-16 16:16 jfs_stage1_5 -rw-r--r-- 1 root root 1171 2008-05-29 09:42 menu.lst -rw-r--r-- 1 root root 7324 2008-05-16 16:16 minix_stage1_5 -rw-r--r-- 1 root root 9632 2008-05-16 16:16 reiserfs_stage1_5 -rw-r--r-- 1 root root 512 2008-05-16 16:16 stage1 -rw-r--r-- 1 root root 108356 2008-05-16 16:16 stage2 -rw-r--r-- 1 root root 729088 2008-05-16 16:16 startup.mpeg -rw-r--r-- 1 root root 9276 2008-05-16 16:16 xfs_stage1_5
Eventuelt link erstellen damit grub funktioniert (ist im listing oben schon enthalten) :
cd /tmp/dom-boot/ sudo ln -s . boot
(wenn der link vergessen wird dann gibt's probleme ;) - siehe http://www.gnu.org/software/grub/grub-faq.en.html#q11)
grub /tmp/dom-boot/grub/menu.lst ggf. anpassen mit :
sudo vi /tmp/dom-boot/grub/menu.lst
- rootdelay ist bei USB-boot notwendig damit der kernel zeit hat die USB module zu laden
- ggf. /dev/sda1 bei USB boot anpasen wenn ihr ein anderes device nutzt !
- ggf. timeout anpassen ;)
default saved timeout 1 color cyan/blue white/blue title USB boot, Debian, Kernel 2.6.17.6-det root (hd0,0) kernel /boot/vmlinuz-2.6.17.6-det root=/dev/sda1 ro rootdelay=10 savedefault title Etherboot DHCP - eepro100 root (hd0,0) kernel /boot/eb-5.4.3-eepro100.zlilo savedefault title Etherboot Feste-IP - Server 192.168.0.1 - eepro100 root (hd0,0) kernel /boot/eb-5.4.3-eepro100-IP.zlilo savedefault title Etherboot Feste-IP - Server 192.168.0.99 - eepro100 root (hd0,0) kernel /boot/eb-5.4.3-eepro100-IP-99.zlilo savedefault
Grub installiern
Jetzt müssen wir gut aufpassen fehler hier bedeuten das das DOM hinterher nicht bootet oder das wir was anderes kaput machen !
Also ACHTUNG !!!
In /boot/grub/device.map ist eine liste der devices die im rechner vorhanden sind. Hier muß das DOM korrekt eingeordnet werden! Das wird von grub dazu benutzt die BIOS drives auf den real vorhandenen disks zu "mappen", also zuweisen.
Also mit
sudo vi /tmp/dom-boot/boot/grub/device.map
das device.map editieren, der inhalt sollte so aussehen :
(hd0) /dev/hda (hd1) /dev/sda
Wir gehen davon aus das /dev/sda das DOM ist auf dem jetzigen boot-rechner. /dev/hda ist später auf den Samsung das korrekte device. Wir stellen hier ein wie es nachher aussieht wenn das DOM im Samsnung SMT drin steckt !
Dann grub in /dev/sda1 installieren. Wir arbeiten jetzt mit einen trick damit wir nicht grub auf das falsche device schreiben. Und zwar ist es so das es auf unser boot device kein /boot verzeichnis gibt, /boot ist nur ein link. Deshlab liegt grub auch direkt unter /grub/stage1
sudo grub --config-file=/tmp/dom-boot/boot/grub/device.map find /grub/stage1
das sollte nur ein device auflisten, und zwar das auf dem DOM :
(hd0,0)
Grub wird auf hd0 gefunden weil grub beim starten einen laufwerkserkennung startet und die liste intern selber aufbaut. Ubuntu benutzt nur /dev/sd* devices und da wir jetzt gerade auf /dev/sda installieren findet es grub auf hd0.
(Zur kontrolle kann man dann auch mal find /boot/grub/stage1 eingeben um zu sehen ob er mehr findet.)
Auf jeden fall installieren wir jetzt grub in hd0 (oder auf was auch immer unter dem ersten "find" gefunden wurde !) :
root (hd0,0) setup (hd0)
Dann sollte das hier kommen :
Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done.
Damit ist grub installiert :)
Eventuell Etherboot Images auf DOM kopieren
Falls wir die Etehrboot images selber angepast haben oder mein tar nicht benutzt hat, dann müssen wir jetzt die Etherboot + Kernel images von dem USB stick aus installieren.
Stick ggf. mounten und die oben erstellten Etherboot Images kopieren :
sudo cp -vi eb-5.4.3-eepro100-IP.zlilo /tmp/dom-boot/ sudo cp -vi eb-5.4.3-eepro100.zlilo /tmp/dom-boot/
Den Zendeb Kernel (oder welchen auch immer ihr verwenden wollt für USB boot) :
sudo cp -dpv /srv/zendeb/boot/* /var/lib/tftpboot/
DOM umounten und booten
Zuletzt dann umounten :
sudo umount /dev/sda1
Tja, das sollte alles sein. Jetzt können wir den ersten boot wagen. Am besten auf dem PC wo ihr gerade das DOM einrichtet.
Dann sieht man schon mal ob grub korrekt eingerichtet ist !
Wenn ihr glück habt und ein eepro100 in dem rechner eingebaut ist, könnt ihr vieleicht sogar den etherboot testen.
/etc/fstab anpassen
Egal wie man jetzt gebootet hat, muß man hinterher /etc/fstab anpassen.
damit man grub auch nachträglich anpassen kann oder andere kernels an der richtigen stelle abgelegt werden müssen wir /boot mounten. Dazu bitte folgende zeile in die /etc/fstab hinzufügen :
/dev/hda1 /boot ext2 defaults,noatime 1 1
und testen mit
mount /boot
TODO