Seite 1 von 1

Netboot Scriptfehler

Verfasst: 11 Jun 2012, 19:11
von Barde
Hallo liebe Leute,

von Zeit zu Zeit hat mir das Forum immer weitergeholfen aber nun hab ich seltsames Problem.
Zur Vorgeschichte:
Ich hab unter OPSI 3.4 ein kleines Script zur Installation von Ubuntu 10.04 LTS auf einem Rechner mit Windows XP als Dualboot-System erstellt.
Im Vorfeld installiere ich einmal Ubuntu mit allen benötigten Paketen und Einstellungen. Dann starte ich das OPSI-Boot-Image und melde mich als root an, mounte die OPSI-Freigabe
und packe die gesamte Ubuntu-root-Partition in ein Archiv wie ubuntu-root.tar.gz - ca. 1.1GB.
Das Installationsscript verkleinert die Windows Partition und legt SWAP-,ROOT- und HOME Partitionen an. Nach der Formatierung mit EXT2 wird
das Archiv auf die neue root-Partition erst kopiert und dann entpackt. Anschließend wird ein Bash-Script auf die neue root-Partition kopiert und
im chroot-Modus ausgeführt um den Bootloader zu installieren.

So hat es hat auch immer funktioniert. Bis vor kurzem hab ich das Paket nicht mehr benötigt und zwischenzeitlich eine Upgrade auf OPSI 4.0 durchgeführt.

Nun habe ich etwa 24 Clients mit Windows 7 x64 (2 Partitionen) und die sollen auch Linux (Dualboot) installiert bekommen. Dazu hab ich das Script angepasst.
Es wird die zweite Partition auf 80GB verkleinert, die Linux-Partitionen werden angelegt und formatiert...dann ist Schluss.
Das OPSI-Bootimage weigert sich kontinuierlich das 1,1GB-Ubuntu-Archiv zu kopieren.

Mit

Code: Alles auswählen

copy(DEPOT_MOUNT + '/install/ubuntu/ubuntu_root.tar.gz', '/mnt/root/')
erhalte ich im Bootimage-Log:
[7] [Jun 11 18:16:42] MessageSubject 'copy_progress' created (Message.py|112)
[7] [Jun 11 18:16:42] ProgressSubject 'copy_progress' created (Message.py|238)
[6] [Jun 11 18:16:42] Copying from '/mnt/opsi/install/ubuntu/ubuntu_root.tar.gz' to '/mnt/root/' (__init__.py|257)
[6] [Jun 11 18:16:42] Copy done (__init__.py|267)
Aber es wurde nichts kopiert.
Das Selbe Problem und Ergebnis gibt es mit

Code: Alles auswählen

depot.copy('/install/ubuntu/ubuntu_root.tar.gz', '/mnt/root/')
Wenn ich die OPSI-Freigabe manuell im Bootimage mounte kann ich auch per

Code: Alles auswählen

cp -av /mnt/opsi/install/ubuntu/ubuntu.tar.gz /mnt/root 
das Archiv erfolgreich kopieren.
Aber selbst mit den Funktionen mount() und execute() funktioniert das kopieren nicht. Das mounten an sich funktioniert aber das kopieren gar nicht.
Alle anderen Pakete wie WindowsXP oder Windows7 funktionieren anstandslos. Auch andere Bootimages (ältere und experimental) habe ich ausprobiert.

Ich hoffe ihr könnt mir weiterhelfen.

Zum System:
OPSI auf Debian Squeeze in VirtualBox 4.1.16
opsi-atftpd 0.7.dfsg-1.7
opsi-configed 4.0.1.24-1
opsi-depotserver 4.0.2.1-1
opsi-linux-bootimage 20120119-1
opsi-utils 4.0.2.1-1
opsiconfd 4.0.2.1-1
opsipxeconfd 4.0.2.1-1
python-opsi 4.0.2.1-1

Test-PC: physische Maschine Acer M275

Re: Netboot Scriptfehler

Verfasst: 14 Jun 2012, 15:56
von Barde
So, hab jetzt das Problem umgangen und während dessen ist ein weiterer Fehler aufgetaucht.
Die Funktion mount hat Probleme die OPSI-Freigaben zu mounten. Es erscheint folgender Fehler:
[2] [Jun 14 01:09:04] Traceback: (Logger.py|742)
[2] [Jun 14 01:09:04] line 1387 in '<module>' in file '/usr/local/bin/master.py' (Logger.py|742)
[2] [Jun 14 01:09:04] line 82 in '<module>' in file '/tmp/ubuntu.py' (Logger.py|742)
[2] [Jun 14 01:09:04] line 835 in 'mount' in file '/usr/lib/pymodules/python2.6/OPSI/System/Posix.py' (Logger.py|742)
[2] [Jun 14 01:09:04] ==>>> 'domain' (master.py|1435)
Laut der Doku für das Bootimage können auch erweiterte Partitionen angelegt werden. Was aber nicht funktioniert. Dieser Vorgang wird mit:
[2] [Jun 14 13:02:16] Traceback: (Logger.py|742)
[2] [Jun 14 13:02:16] line 1387 in '<module>' in file '/usr/local/bin/master.py' (Logger.py|742)
[2] [Jun 14 13:02:16] line 53 in '<module>' in file '/tmp/ubuntu.py' (Logger.py|742)
[2] [Jun 14 13:02:16] line 1703 in 'createPartition' in file '/usr/lib/pymodules/python2.6/OPSI/System/Posix.py' (Logger.py742)
[2] [Jun 14 13:02:16] ==>>> Type 'extended' not supported! (master.py|1435)
quitiert. (Ich hoffe die Doku wird bald aktualisiert weil die ist ja mittlerweile auch 6 Jahre alt.)
Demzufolge darf Windows 7 nur noch auf einer Partition installiert werden. Weil ich /home unter Linux eine eigene Partition spendieren will.
Gut, das Script ist zwar nicht schön aber es funktioniert jetzt. Dazu habe ich den ursprünglichen, problematischen Bereich wie folgt umgeschrieben:

Code: Alles auswählen

# Servername
Server = urlparse.urlparse(depotUrl)
ServerName = Server.hostname

ui.getMessageBox().addText( "\n...kopiere root-Archiv...\n")
execute(u'mount -o username=pcpatch,password=' + pcpatchPassword + ' //' + ServerName + '/opsi_depot /mnt/opsi')
depot.copy('/ubuntu/ubuntu_root.tar.gz', '/mnt/root/')
Ich hoffe es hilft jemanden.

Das komplette Script:

Code: Alles auswählen

#
# This script requires opsi >= 4.0, opsi-linux-bootimage version >= 20120119
#
import time, os, urlparse

if not bootimageVersion or (int(bootimageVersion) < 20120119):
	raise Exception("This product requires opsi-linux-bootimage version >= 20120119")

# Get harddisks
disks = getHarddisks()

# Use first Harddisk
disk = disks[0]
ui.getMessageBox().addText( "Verwende Festplatte %s (%s MB).\n" % (disk.device, round(disk.size/1024/1024)) )

# Check disk size !!!TEMP!!!
if (disk.size < 61440*1024*1024): 
    # Disk smaller than 60GB => give up
    raise Exception("Festplatte zu klein!\n")

#Get current partitions
partitions = disk.getPartitions()

#------ SNIPP --------------------------------------------------------------------------------------

##NTFS check
ui.getMessageBox().addText( "Check Dateisystem... 60 Sekunden\n")
execute(u'/usr/bin/ntfsfix /dev/sda1', nowait=False, getHandle=True)
time.sleep(60)

#NTFS auf 80GB verkleinern
ui.getMessageBox().addText("\nverkleinere Dateisystem Windowspartition auf 80GB, warte... 300 Sekunden\n")
disk.resizeFilesystem(1, size=85899345920)
time.sleep(300)

##Windows Partition neu anlegen
ui.getMessageBox().addText( "...passe Partitionstabelle an...\n")
disk.deletePartition(1)
disk.createPartition(start='0M', end='81920M', fs='ntfs', type='primary', boot=False)

#HDD neu einlesen
ui.getMessageBox().addText( "...lese Partitionstabelle neu ein...\n")
execute(u'/usr/bin/sfdisk -R', nowait=False, getHandle=True)

#Linuxpartition erstellen
ui.getMessageBox().addText( "\n...erstelle Linux Swap...-> 2GB\n")
disk.createPartition(start='81920M', end='83968M', fs='linux-swap', type='primary', boot=False) #swap
time.sleep(5)
ui.getMessageBox().addText( "\n...erstelle root Partition...-> 10GB\n")
disk.createPartition(start='83968M', end='94208M', fs='ext2', type='primary', boot=False) #boot/root
time.sleep(5)
ui.getMessageBox().addText( "\n...erstelle home Partition...-> 40GB\n")
disk.createPartition(start='94208M', end='135168M', fs='ext2', type='primary', boot=False) #home
time.sleep(5)

execute(u'/usr/bin/sfdisk -R', nowait=False, getHandle=True)
time.sleep(5)

#------ SNIPP -------------------------------------------------------------------------------------------

#Partitionen formatieren
ui.getMessageBox().addText( "\n...formatiere neue Partitionen...\n")
disk.createFilesystem(2, fs='linux-swap')
disk.createFilesystem(3, fs='ext2')
disk.createFilesystem(4, fs='ext2')

# mount Ordner anlegen und mounten
mkdir(newDir='/mnt/root')
mkdir(newDir='/mnt/opsi')
ui.getMessageBox().addText( "\n...mounte neue Partitionen...\n")
disk.mountPartition(3, mountpoint='/mnt/root')
mkdir(newDir='/mnt/root/home')
execute(u'chmod 777 /mnt/root/home')
disk.mountPartition(4, mountpoint='/mnt/root/home')
mkdir(newDir='/mnt/root/mnt')
mkdir(newDir='/mnt/root/proc')
mkdir(newDir='/mnt/root/sys')

# Servername
Server = urlparse.urlparse(depotUrl)
ServerName = Server.hostname

ui.getMessageBox().addText( "\n...kopiere root-Archiv...\n")
execute(u'mount -o username=pcpatch,password=' + pcpatchPassword + ' //' + ServerName + '/opsi_depot /mnt/opsi')
depot.copy('/ubuntu/ubuntu_root.tar.gz', '/mnt/root/')

# Ubuntu entpacken
ui.getMessageBox().addText( "\n...entpacke root...bitte warten...\n")
os.system("cd /mnt/root/ && /bin/tar -xz --numeric-owner -f /mnt/root/ubuntu_root.tar.gz")
#time.sleep(300)

#entferne Archiv
ui.getMessageBox().addText( "\n...entferne Archiv...\n")
execute(u'rm -f /mnt/root/ubuntu_root.tar.gz', nowait=False, getHandle=True)
time.sleep(10)

#Einstellungen vornehmen
ui.getMessageBox().addText( "\n...nehme lokale Einstellungen vor...bitte warten...\n")
depot.copy('/ubuntu/einst.sh', '/mnt/root/')
execute(u'chmod u+x /mnt/root/einst.sh', nowait=False, getHandle=True)
os.system('/usr/sbin/chroot /mnt/root /einst.sh')

#Neustart
time.sleep(10)
reboot()
Noch das Script für die Ubuntu-Einstellungen

Code: Alles auswählen

#! /bin/bash

PC_NAME=`hostname`
PC_DOMAIN="[DOMAIN]"
PC_IP=`ifconfig eth0 | grep inet | cut -d " " -f12 | cut -d : -f2`
HOST_ETC="/etc"

#Hostname setzen
echo "...setze PC Namen..."
echo $PC_NAME > $HOST_ETC/hostname

#Name und Domain setzen
echo "...bearbeite hosts..."
sed s/[NAME INSTALLATION-PC]/$PC_NAME/g $HOST_ETC/hosts > /tmp/hosts
mv -f /tmp/hosts $HOST_ETC/hosts

#Domain vorbereiten
echo "...bearbeite smb.conf"
echo "[global]" > $HOST_ETC/samba/smb.conf
echo "workgroup = SEMINAR" >> $HOST_ETC/samba/smb.conf
echo "security = domain" >> $HOST_ETC/samba/smb.conf

#fstab bearbeiten
echo "...bearbeite fstab..."
echo "# /etc/fstab: static file system information." > $HOST_ETC/fstab
echo "#" >> $HOST_ETC/fstab
echo "# <file system> <mount point>   <type>  <options>       <dump>  <pass>" >> $HOST_ETC/fstab
echo "proc            /proc           proc    nodev,noexec,nosuid        0       0" >> $HOST_ETC/fstab
echo "/dev/sda3       /               ext2    errors=remount-ro 0       1" >> $HOST_ETC/fstab
echo "/dev/sda4       /home           ext2    defaults        0       2" >> $HOST_ETC/fstab
echo "/dev/sda2       none            swap    sw        0       0" >> $HOST_ETC/fstab
echo "" >> $HOST_ETC/fstab

#rclocal bearbeiten
#echo "...bearbeite rc.local..."
#echo "/domain.sh" >> /etc/rc.local

#Grub Install
#ui.getMessageBox().addText( "...installiere Grub...\n")
/bin/mount /proc
/bin/mount /sys
/usr/sbin/grub-install /dev/sda
/bin/sed s/GRUB_DEFAULT=0/GRUB_DEFAULT=4/g $HOST_ETC/default/grub > /tmp/grub
mv -f /tmp/grub /etc/default/grub
/bin/sed s/GRUB_TIMEOUT=5/GRUB_TIMEOUT=10/g $HOST_ETC/default/grub > /tmp/grub
mv -f /tmp/grub /etc/default/grub
/usr/sbin/update-grub2

rm -f /einst.sh

exit 0