[Eisfair] nochmal..Installation eisfair1 auf vServer -- geht es einfacher?
Thomas Bork
tom at eisfair.org
Fr Aug 25 20:59:34 CEST 2017
Am 24.08.2017 um 23:08 schrieb Kay Martinen:
> Und ich nahm an man könnte das gleiche prozedere nehmen, nur das man
> eben ein virtio(modul?) für Platte und net direkt lädt und diese dann
> ebenso benutzen kann wie es der normale kernel tut. Da hab ich mangels
> besserer Kenntniss wohl zu einfach gedacht.
Da sind dann eben eventuell andere Devices in Benutzung. Darauf ist die
Logik im Installer nicht ausgelegt. Und diese Logik schüttele ich nicht
einfach aus dem Ärmel, sondern muss sie mir per trial and error mühsam
erarbeiten.
>> Experimentieren eine entsprechende (lokale) Gegenstelle fehlt, die ich
>> ständig im Zugriff habe. Und ein anderer hat sich bisher nicht
>> gefunden, das zu implementieren und mir die nötigen Patches
>> zuzuschicken...
> Tja, da ich es auch nicht kann, Würde es dir denn weiter helfen zugriff
> auf einen Proxmox VE (KVM/QEMU) Server zu bekommen auf dem du das testen
> könntest? Oder ist das nicht das gleiche oder nicht genug?
Siehe oben. Da das eine langwierige Aktion wird (ich habe für so etwas
auch nicht immer Zeit und Lust) benötige ich idealerweise eine lokale
Installation, mit der ich spielen kann und deren Parameter ich verändern
kann. Weil bei anderen Emulation eben andere Devices verwendet werden.
>> Sieh Dir die Logik für IDE, SCSI, SATA, USB, Stick hier
>> http://int-ch.starwarsfan.de/browse/eisfair/trunk/install/eisfair-1/initramfs/init?r=46683
>> http://int-ch.starwarsfan.de/browse/eisfair/trunk/install/eisfair-1/eis-installer/opt/linuxrc2?r=46683
>> http://int-ch.starwarsfan.de/browse/eisfair/trunk/install/eisfair-1/eis-installer/scsi.sh.316?r=46499
> Puh, ein bisschen zu viel für meiner einer. Aber in dem Zusammenhang ne
Ein Beispiel aus linuxrc2, es wird nach installierbaren Festplatten und
ihren Devices gesucht:
#----------------------------------------------------------------------------
# search for harddisks and cdroms
#----------------------------------------------------------------------------
#echo "Boot media : ${boot_media}"
#echo "Boot device: ${boot_dev}"
#ask "show boot dev"
echo
colecho "Searching hard disks ..." gn
disk=none
cdrom=none
ide_found=false
scsi_found=false
cpqscsi_found=false
cpqprefix=''
disk_other=''
ide_devices="hda hdb hdc hdd hde hdf hdg hdh"
scsi_devices="sda sdb sdc sdd sde sdf sdg"
cpq_devices="c0d0 c0d1 c0d2 c0d3 c0d4 c0d5 c0d6 c0d7"
for j in $ide_devices
do
eval $j=`cat /proc/ide/$j/media 2>/dev/null`
eval type='$'$j
case "$type" in
disk)
ide_found=true
if [ "$disk" = "none" ]
then
disk=$j
fi
;;
cdrom)
ide_found=true
if [ "$cdrom" = "none" ]
then
cdrom=$j
fi
;;
"")
eval $j=none
;;
esac
done
for j in $scsi_devices
do
grep " $j" /proc/partitions >/dev/null 2>&1
if [ $? = 0 ]
then
scsi_found=true
eval $j=disk
if [ "$disk" = "none" ]
then
if [ "${j}" != "`echo ${boot_dev} | cut -c6-8 `" ]
then
disk=$j
fi
else
disk_other=$j
fi
if [ "${boot_media}" = "USB-Stick" ]
then
if [ "${j}" = "`echo ${boot_dev} | cut -c6-8 `" ]
then
eval ${j}="USB-Stick"
fi
fi
else
eval $j=none
fi
done
for cpqprefix in ida cciss
do
for j in $cpq_devices
do
grep " $cpqprefix/$j$" /proc/partitions >/dev/null 2>&1
if [ $? = 0 ]
then
cpqscsi_found=true
eval $j=disk
j=$cpqprefix/$j
if [ $disk = none ]
then
disk=$j
else
disk_other=$j
fi
else
eval $j=none
fi
done
if [ $cpqscsi_found = true ]
then
break
fi
done
sizeMB=''
sizeKB=''
if [ $ide_found = true ]
then
header=1
for a in $ide_devices
do
eval new_disk='$'${a}
if [ "$new_disk" = "disk" ]
then
sizeKB=`sfdisk -s /dev/${a}`
# disk fuer RAID rausschreiben
echo "${sizeKB} ${a}" >>/have_raid_disk
if [ -n "$sizeKB" ]
then
sizeMB=`expr ${sizeKB} / 1024`
sizeMB="($sizeMB MiB)"
fi
if [ ${header} -ne 0 ]
then
echo
echo " IDE-Disk | Device | Type"
echo "
-----------------------------+----------+-------------------------------------"
header=0
fi
case "${a}" in
hda) echo " hda Master on 1st controller |/dev/hda
|${new_disk} ${sizeMB}" ;;
hdb) echo " hdb Slave on 1st controller |/dev/hdb
|${new_disk} ${sizeMB}" ;;
hdc) echo " hdc Master on 2nd controller |/dev/hdc
|${new_disk} ${sizeMB}" ;;
hdd) echo " hdd Slave on 2nd controller |/dev/hdd
|${new_disk} ${sizeMB}" ;;
hde) echo " hde Master on 3nd controller |/dev/hde
|${new_disk} ${sizeMB}" ;;
hdf) echo " hdf Slave on 3nd controller |/dev/hdf
|${new_disk} ${sizeMB}" ;;
hdg) echo " hdg Master on 4nd controller |/dev/hdg
|${new_disk} ${sizeMB}" ;;
hdh) echo " hdh Slave on 4nd controller |/dev/hdh
|${new_disk} ${sizeMB}" ;;
esac
fi
sizeMB=''
sizeKB=''
done
echo
fi
if [ ${scsi_found} = true ]
then
if [ "${boot_media}" = "USB-Stick" ]
then
new_boot_dev="`echo ${boot_dev} | cut -c6-8 `"
fi
header=1
for a in $scsi_devices
do
eval new_disk='$'${a}
if [ "${a}" = "${new_boot_dev}" ]
then
new_disk="USB-Stick"
fi
if [ "$new_disk" = "disk" -o "$new_disk" = "USB-Stick" ]
then
sizeKB=`sfdisk -s /dev/${a}`
if [ "${new_disk}" != "USB-Stick" ]
then
# disk fuer RAID rausschreiben
echo "${sizeKB} ${a}" >>/have_raid_disk
fi
if [ -n "$sizeKB" ]
then
sizeMB=`expr ${sizeKB} / 1024`
sizeMB="($sizeMB MiB)"
fi
if [ ${header} -ne 0 ]
then
echo
echo " SCSI-/SATA-/USB-Disk | Device | Type"
echo "
-----------------------------+----------+-------------------------------------"
header=0
fi
echo " ${a} |/dev/${a}
|${new_disk} ${sizeMB}"
fi
sizeMB=''
sizeKB=''
done
echo
fi
if [ $cpqscsi_found = true ]
then
if [ "$cpqprefix" = "ida" ]
then
fill=' '
elif [ "$cpqprefix" = "cciss" ]
then
fill=''
fi
header=1
for a in $cpq_devices
do
eval new_disk='$'${a}
if [ "$new_disk" = "disk" ]
then
sizeKB=`sfdisk -s /dev/${cpqprefix}/${a}`
# disk fuer RAID rausschreiben
echo "${sizeKB} ${cpqprefix}/${a}" >>/have_raid_disk
if [ -n "$sizeKB" ]
then
sizeMB=`expr ${sizeKB} / 1024`
sizeMB="($sizeMB MiB)"
fi
if [ ${header} -ne 0 ]
then
echo
echo " SmartArray-Disk | Device | Type"
echo "
---------------------+------------------+-------------------------------------"
header=0
fi
echo " ${a} |/dev/$cpqprefix/${a} ${fill}
|${new_disk} ${sizeMB}"
fi
sizeMB=''
sizeKB=''
done
echo
fi
Es fehlt z.B. eine Erkennung für /dev/vd*-Devices. Die tauchen natürlich
erst auf, wenn die entsprechenden Treiber geladen wurden. Dabei muss
sich der Installer merken, welche Treiber das sind, um diese nachher in
die initramfs zu packen
> Frage. Ich hab gestern einen Eis neu installiert und mich gefragt wieso
> der eth0 bis eth3 durch probiert wo doch eine einzige Karte reichen
> würde? Weitere kann man doch später hinzu fügen.
Es hängt von der Anbindung Deiner Karte ab, ob die nun als eth0 oder was
auch immer auftaucht.
> Da wäre es nach meinem Denken schon einfacher gewesen direkt mit einem
> virt-kernel zu installieren. Das brachte mich eben auch auf die
> Eingangs-Frage.
Es gibt schon mal einen simplen Grund, warum der Installer nicht auf
einem VIRT-Kernel basiert. Bei jeder Veröffentlichung eines Kernels
schreibe ich:
###
Der SMP-Kernel unterstützt Systeme mit einem oder mehreren Prozessoren
und Prozessoren mit einem oder mehreren physikalischen oder virtuellen
Kernen.
Der PAE-Kernel ist der SMP-Kernel plus PAE und Sparse-Memory-Model. Die
CPU muss die Features cmov und pae unterstützen - das wird bei der
Installation überprüft.
Ein emulierter mathematischer Co-Prozessor (CONFIG_MATH_EMULATION) ist
nur noch bei SMP gesetzt (um auch alte 486 ohne Co-Prozessor zu
unterstützen). Ab PAE ist sowieso immer ein solcher Co-Prozessor
vorhanden, PAE und VIRT bringen die Emulation deswegen bei uns nicht mit
- das spart Platz.
Ab PAE ist das NX-Bit gesetzt, PAE und VIRT sind somit sicherer als SMP.
Ab PAE ist ausserdem CONFIG_TRANSPARENT_HUGEPAGE gesetzt.
###
Basiert der Installer auf dem VIRT, sind alle Systeme mit Prozessoren
raus, die cmov und pae nicht unterstützen. Auf diese Systemen lässt sich
dann einfach nicht mehr installieren.
>> Es müssen virtuelle Treiber geladen werden, es muss gecheckt werden,
>> ob dann virtuelle Festplatten existieren, es müssen die richtigen
>> Devices für boot, swap, root, data angesprochen werden, es muss eine
>> initrd mit den virtuellen Treibern erstellt werden, es müssen die
>> richtigen Devices in die fstab geschrieben werden, usw.
> swap in einer VM? Macht m.E. keinen sinn solange genug RAM da ist.
> Wie gesagt, ich dachte "einfach" das mit dem virt-kernel eh klar wäre
> das es nur virtuelle devices gäbe und es dadurch genau so einfach ist
> wie mit dem normalen. Man hat ein blockdevice zum installieren und ein
> netzwerk-device zur Außenwelt - nur eben in "virtuell". :)
Da geht es schon mal los:
Welches Blockdevice habe ich denn? Aus "eisfair unter KVM/Proxmox":
###
3. device-nodes anlegen:
#mknod /dev/vda b 253 0
#mknod /dev/vda1 b 253 1
#mknod /dev/vda2 b 253 2
#mknod /dev/vda3 b 253 3
###
Hier sind das /dev/vd*-Devices. Unter einer anderen Emulation eventuell
/dev/sd*-Devices. Ich schlage vor, die siehst doch einmal in die oben
von mir genannten Dateien aus dem Installer hinein, um festzustellen,
dass dort exzessiv mit den Devices gearbeitet wird.
Ausserdem muss das System feststellen, welche Treiber zum Booten in der
initramfs benötigt werden, welche Devices in die fstab geschrieben
werden müssen, mit welchen Devices und Einstellungen die lilo.conf
geschrieben werden muss usw.
> Worin unterscheidet sich das partitionieren einer virtuellen platte denn
> von dem einer echten, wenn man da die Logik anpassen müsste?
Z.B. durch die Devices.
>> Das macht sich alles irgendwie von selbst? Glaub ich nicht ;-)
> Oh, das wird nicht (zumindest Teil-)automagisch von einem Script
> zusammengeklöppelt? Das wusste ich nicht. Ernsthaft!
Die Skripte (die Logik im Installer) erstellt kein Skript. Wenn Du eins
dafür kennst, schicke es mir :-)
--
der tom
[eisfair-team]
Mehr Informationen über die Mailingliste Eisfair