Difference between revisions of "Live DVD"
(→Generated Files) |
(→Generated Files) |
||
Line 19: | Line 19: | ||
We create a few files throughout this process. This explains what and why. | We create a few files throughout this process. This explains what and why. | ||
− | '''interfaces.temp''' This file sets two nics as dhcp so as to find internet when needed, as when it is needed, it is needed. This file is used twice. The chrooted environment needs internet and presumes there are two nics, and doesn't know which one it is on. The post installer needs internet prior to DCE nic configuration and presumes the same. If there is only one nic avail, this still works, though it is hacky and I do not like it. | + | '''interfaces.temp''' This file sets two nics as dhcp so as to find internet when needed, as when it is needed, it is needed. This file is used twice. The chrooted environment needs internet and presumes there are two nics, and doesn't know which one it is on. The post installer needs internet prior to DCE nic configuration and presumes the same. If there is only one nic avail, this still works, though it is hacky and I do not like it. Exists at /target/etc/network |
auto lo | auto lo | ||
iface lo inet loopback | iface lo inet loopback | ||
Line 30: | Line 30: | ||
− | '''isolinux.cfg''' this is the boot configuration for isolinux. This sets up the menu, and specifies boot options etc as well as layout options and the preseed file. Colors are in hex format, preceded by an alpha level ATRRGGBB where AT=Alpha Transparency RR=Red GG=Green BB=Blue | + | '''isolinux.cfg''' this is the boot configuration for isolinux. This sets up the menu, and specifies boot options etc as well as layout options and the preseed file. Colors are in hex format, preceded by an alpha level ATRRGGBB where AT=Alpha Transparency RR=Red GG=Green BB=Blue (example FFFC9306). Exists at /cdrom/isolinux/isolinux.cfg |
default vesamenu.c32 | default vesamenu.c32 | ||
prompt 0 | prompt 0 | ||
Line 81: | Line 81: | ||
− | '''preseed.cfg''' There are a LOT of possible options for this menu. I am currently only disabling language packs, performing autoconfig for the dvd host (not the target mind you), and performing the post-install (note, late_command not currently working). | + | '''preseed.cfg''' There are a LOT of possible options for this menu. I am currently only disabling language packs, performing autoconfig for the dvd host (not the target mind you), and performing the post-install (note, late_command not currently working). Exists at /cdrom/preseed.cfg and at /cdrom/casper/preseed.cfg |
tasksel tasksel/first multiselect | tasksel tasksel/first multiselect | ||
d-i pkgsel/install-language-support boolean false | d-i pkgsel/install-language-support boolean false | ||
Line 90: | Line 90: | ||
− | '''postseed.sh''' This is the local file which mounts the target appropriately to perform the post install, and launches said post install and the local OnScreenDisplay which alerts the installer what is occurring. This is problematic atm. | + | '''postseed.sh''' This is the local file which mounts the target appropriately to perform the post install, and launches said post install and the local OnScreenDisplay which alerts the installer what is occurring. This is problematic atm. It exists at /cdrom/install/postseed.sh |
#!/bin/bash | #!/bin/bash | ||
mount -o bind /dev /target/dev | mount -o bind /dev /target/dev | ||
Line 101: | Line 101: | ||
− | '''messages.sh''' This makes use of BootMessages.sh, which the gnome on-screen display utility. This method prevents the messages from blinking... however defining and calling these messages is proving elusive atm. I can drop to tty and export DISPLAY=:0 and run the script and it works like a dream. Calling it from the script the preseed calls isn't working atm. | + | '''messages.sh''' This makes use of BootMessages.sh, which the gnome on-screen display utility. This method prevents the messages from blinking... however defining and calling these messages is proving elusive atm. I can drop to tty and export DISPLAY=:0 and run the script and it works like a dream. Calling it from the script the preseed calls isn't working atm. exists at /cdrom/install/messages.sh |
#!/bin/bash | #!/bin/bash | ||
export DISPLAY=:0 | export DISPLAY=:0 | ||
Line 107: | Line 107: | ||
newmsg=/target/tmp/messenger | newmsg=/target/tmp/messenger | ||
if [ ! -f $msgchk ]; then touch -r $msgchk; fi | if [ ! -f $msgchk ]; then touch -r $msgchk; fi | ||
− | while true; do if [ $newmsg -nt $msgchk ]; then /target/usr/pluto/bin/BootMessage.sh "`cat $newmsg | + | while true; do |
+ | if [ $newmsg -nt $msgchk ]; then | ||
+ | /target/usr/pluto/bin/BootMessage.sh "`cat $newmsg`" | ||
+ | touch -r $newmsg $msgchk | ||
+ | fi | ||
+ | done | ||
− | '''postinst.sh''' is the post installer. This is designed to be run from the preseed post, which chroots into the /target directory and performs the post install before rebooting. It is currently being run on reboot, which will itself need to be rebooted when finished. Should it be run chrooted, the mysqld commands must be unhashed for version control. | + | '''postinst.sh''' is the post installer. This is designed to be run from the preseed post, which chroots into the /target directory and performs the post install before rebooting. It is currently being run on reboot, which will itself need to be rebooted when finished. Should it be run chrooted, the mysqld commands must be unhashed for version control. Exists at /target/root/new-installer/postinst.sh |
#!/bin/bash | #!/bin/bash | ||
. /usr/pluto/bin/GeneralFunctions.sh | . /usr/pluto/bin/GeneralFunctions.sh | ||
Line 120: | Line 125: | ||
`mysqld --skip-networking&` & | `mysqld --skip-networking&` & | ||
cp /etc/network/interfaces.temp /etc/network/interfaces | cp /etc/network/interfaces.temp /etc/network/interfaces | ||
− | #Execute Functions | + | |
+ | #Execute Functions ---these functions exist mostly in /target/root/new-installer/dvd-installer.sh | ||
pinger | pinger | ||
gpgUpdate | gpgUpdate | ||
Line 158: | Line 164: | ||
− | '''README.diskdefines''' Defines the architecture, diskname etc. | + | '''README.diskdefines''' Defines the architecture, diskname etc. Exists at /cdrom/README.diskdefines and /cdrom/casper/README.diskdefines |
#define DISKNAME $LIVECDLABEL | #define DISKNAME $LIVECDLABEL | ||
#define TYPE binary | #define TYPE binary |
Revision as of 01:21, 4 March 2012
This wiki attempts to explain the live DVD creation techniques used to produce a universally installable DVD in lmcemaster.sh
Directory Structure
You will note the script creates 3 temporary folders.
$ISODIR is the file structure of the DVD itself. This contains the casper/ubiquity bits, the sqashed file system, bootloader and preseed data. The only files placed here should relate to the operations of the DVD itself. [[1]]
$WORKDIR is the work in progress, that is to say the file structure that will be installed on the target machine from the dvd. This root directory is where we put things, and manipulate them for the most part instead of the host. There are some catch-22s which require us to manipulate the host image prior to its being copied to this directory.
$DDDIR is the chrooted host directory structure we are building the DVD to install from. This file structure is ALSO the host environment on the DVD which Ubiquity functions over top of, and how we will facilitate live booting. This expects a DD image, which is then loop mounted to a temporary directory for manipulation. As little change as possible should be made to this directory. If you destroy/move things around in here, those changes persist, making it difficult or impossible to create more than one DVD from a single image.
The WORKDIR directory will serve as the host environment on the live DVD over which ubiquity is run. The WORKDIR is also the file system which will be installed on the hard drive, and become /target on the DVD after it is installed to the drive. Post operation can occur via the d-i preseed/late_command in the preseed.cfg file. The DDDIR and WORKDIR look identical on the DVD save the addition of the /target directory on the DDDIR, which contains the mounted WORKDIR. Chroot operations can occur to that /target directory as well.
Generated Files
We create a few files throughout this process. This explains what and why.
interfaces.temp This file sets two nics as dhcp so as to find internet when needed, as when it is needed, it is needed. This file is used twice. The chrooted environment needs internet and presumes there are two nics, and doesn't know which one it is on. The post installer needs internet prior to DCE nic configuration and presumes the same. If there is only one nic avail, this still works, though it is hacky and I do not like it. Exists at /target/etc/network
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp
isolinux.cfg this is the boot configuration for isolinux. This sets up the menu, and specifies boot options etc as well as layout options and the preseed file. Colors are in hex format, preceded by an alpha level ATRRGGBB where AT=Alpha Transparency RR=Red GG=Green BB=Blue (example FFFC9306). Exists at /cdrom/isolinux/isolinux.cfg
default vesamenu.c32 prompt 0 timeout 450 totaltimeout 450 menu width 78 menu margin 14 menu rows 6 menu vshift 2 menu timeoutrow 11 menu tabmsgrow 10 menu background splash.png menu title $LIVECDLABEL menu color tabms 0 #fffc9306 #fffc9306 std menu color timeout 0 #ff000000 #fffc9306 std menu color border 0 #ffffffff #ee000000 std menu color title 0 #ff00ff00 #ee000000 std menu color sel 0 #ffffffff #fffc9306 std menu color unsel 0 #ffffffff #ee000000 std menu color hotkey 0 #ff00ff00 #ee000000 std menu color hotsel 0 #ffffffff #85000000 std #####menu color option forground #ALPHA/R/G/B background #ALPHA/R/G/B #####blue ff98a5e0 label live menu label Live - Boot LinuxMCE Live! from DVD kernel /casper/vmlinuz append preseed/file=/cdrom/preseed.cfg boot=casper initrd=/casper/initrd.gz quiet splash -- label install menu label Install LinuxMCE - Start the installer kernel /casper/vmlinuz append preseed/file=/cdrom/preseed.cfg boot=casper only-ubiquity initrd=/casper/initrd.gz quiet splash -- label xforcevesa menu label xforcevesa - boot Live in safe graphics mode kernel /casper/vmlinuz append preseed/file=/cdrom/preseed.cfg boot=casper xforcevesa initrd=/casper/initrd.gz quiet splash -- label memtest menu label memtest - Run memtest kernel /isolinux/memtest append - label hd menu label hd - boot the first hard disk localboot 0x80 append -
preseed.cfg There are a LOT of possible options for this menu. I am currently only disabling language packs, performing autoconfig for the dvd host (not the target mind you), and performing the post-install (note, late_command not currently working). Exists at /cdrom/preseed.cfg and at /cdrom/casper/preseed.cfg
tasksel tasksel/first multiselect d-i pkgsel/install-language-support boolean false d-i preseed/early_command string service mysql stop d-i netcfg/choose_interface select auto d-i finish-install/reboot_in_progress note ubiquity ubiquity/success_command string bash /cdrom/install/postseed.sh
postseed.sh This is the local file which mounts the target appropriately to perform the post install, and launches said post install and the local OnScreenDisplay which alerts the installer what is occurring. This is problematic atm. It exists at /cdrom/install/postseed.sh
#!/bin/bash mount -o bind /dev /target/dev mount -t proc none /target/proc mount -t devpts none /target/dev/pts mount -t proc sysfs /target/sys echo "Performing post-install steps. Please be patient." > /target/tmp/messenger export DISPLAY=:0 /cdrom/install/messages.sh && chroot /target bash /root/new-installer/postinst.sh
messages.sh This makes use of BootMessages.sh, which the gnome on-screen display utility. This method prevents the messages from blinking... however defining and calling these messages is proving elusive atm. I can drop to tty and export DISPLAY=:0 and run the script and it works like a dream. Calling it from the script the preseed calls isn't working atm. exists at /cdrom/install/messages.sh
#!/bin/bash export DISPLAY=:0 msgchk=/target/tmp/msgchk newmsg=/target/tmp/messenger if [ ! -f $msgchk ]; then touch -r $msgchk; fi while true; do if [ $newmsg -nt $msgchk ]; then /target/usr/pluto/bin/BootMessage.sh "`cat $newmsg`" touch -r $newmsg $msgchk fi done
postinst.sh is the post installer. This is designed to be run from the preseed post, which chroots into the /target directory and performs the post install before rebooting. It is currently being run on reboot, which will itself need to be rebooted when finished. Should it be run chrooted, the mysqld commands must be unhashed for version control. Exists at /target/root/new-installer/postinst.sh
#!/bin/bash . /usr/pluto/bin/GeneralFunctions.sh . /root/new-installer/dvd-installer.sh export LC_ALL=C echo "Please be patient while post-installer finalizes new install" > /tmp/messenger service mysql stop sleep 3 `mysqld --skip-networking&` & cp /etc/network/interfaces.temp /etc/network/interfaces #Execute Functions ---these functions exist mostly in /target/root/new-installer/dvd-installer.sh pinger gpgUpdate TimeUpdate Pre-InstallNeededPackages CreatePackagesFiles PreSeed_Prefs Fix_Initrd_Vmlinux Nic_Config Setup_Pluto_Conf Setup_NIS Create_And_Config_Devices Configure_Network_Options UpdateUpgrade VideoDriverSetup addAdditionalTTYStart TempEMIFix CreateFirstBoot InitialBootPrep echo "/bin/false" > /etc/X11/default-display-manager # In general I don't think chattr is a great idea... but this will prevent it from EVER being overwritten again without chattr -i first. chattr +i /etc/X11/default-display-manager mv /root/new-installer/lmcemaster/runners/* /etc/init.d update-alternatives --install /lib/plymouth/themes/default.plymouth default.plymouth /lib/plymouth/themes/LinuxMCE/LinuxMCE.plymouth 900 update-initramfs -u umount -lf /dev/pts umount -lf /sys umount -lf /proc service mysql stop killall -9 mysqld_safe kill \`lsof |grep mysqld|cut -d" " -f3|sort -u\` umount -lf /dev echo "Rebooting" > /target/tmp/messenger sleep 3 #rm /target/tmp/messenger reboot
README.diskdefines Defines the architecture, diskname etc. Exists at /cdrom/README.diskdefines and /cdrom/casper/README.diskdefines
#define DISKNAME $LIVECDLABEL #define TYPE binary #define TYPEbinary 1 #define ARCH $ARCH #define ARCH$ARCH 1 #define DISKNUM 1 #define DISKNUM1 1 #define TOTALNUM 0 #define TOTALNUM0 1
_________________________________________________________________________________________________________________
Moved upstart jobs
I am also moving and rewriting the following files for various reasons/conflicts from /etc/init.d, and using the opportunity to run a couple of commands on boot. I will probably add more to this list as the enormous list of things running for LMCE slow down the operation of the DVD. These files are moved to /root/new-installer/lmcemaster/runners
nis - ypbind server fails and takes forever to do so. Painful.
0start_avwizard - we need to do some work before we try that.
linuxmce - absent avwizard, linuxmce will attempt to run.
The Move
The move is the process of creating the required subdirectories in the WORKDIR, and copying over most of the DDDIR. The majority of the move is done with rsync in the /etc folder. cp is used for the home directory to capture hidden files. Then install specific files are removed. During this time, the initrd.gz, vmlinuz, vesamenu32, and isolinux.bin files are created or moved. The plymouth theme is also created at this and the initramfs is generated, and the process is then repeated and updated with the -u option as the shutdown screen from the original was persisting after the make.
The Squash
Both the WORKDIR and the DDDIR file systems are squashed. The file system, again, is the base of the target image. The working DDDIR file system is the FS the DVD is running, and that which casper takes its cues from as to how to implement the backend to the WORKDIR target. Ubiquity is the front end with the KDE installer which installs the root system for kubuntu, using the casper ghosting. Again... key pieces that you want on the target that are specific to our system should go in the work directory.
(more to follow)