Difference between revisions of "Live DVD"

From LinuxMCE
Jump to: navigation, search
(Directory Structure)
(Generated Files)
Line 20: Line 20:
  
 
'''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.
 +
<code>auto lo
 +
iface lo inet loopback
 +
 +
auto eth0
 +
iface eth0 inet dhcp
 +
 +
auto eth1
 +
iface eth1 inet dhcp</code>
  
 
'''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)
 
'''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)
 +
<code>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 -</code>
  
 
'''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).
 +
<code>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 </code>
 +
 +
'''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.
 +
<code>#!/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</code>
 +
 +
'''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.
 +
<code>#!/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
 +
</code>
  
 
'''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.
 +
<code>#!/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
 +
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</code>
  
 
'''README.diskdefines''' Defines the architecture, diskname etc.
 
'''README.diskdefines''' Defines the architecture, diskname etc.
Line 41: Line 167:
  
 
'''linuxmce''' - absent avwizard, linuxmce will attempt to run.
 
'''linuxmce''' - absent avwizard, linuxmce will attempt to run.
 
  
 
== The Move ==
 
== The Move ==

Revision as of 00:56, 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. 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) 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

          1. menu color option forground #ALPHA/R/G/B background #ALPHA/R/G/B
          2. 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). 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. #!/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. #!/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. #!/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

  1. Execute Functions

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

  1. 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

  1. rm /target/tmp/messenger

reboot

README.diskdefines Defines the architecture, diskname etc.

_________________________________________________________________________________________________________________


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)