Difference between revisions of "Live DVD"

From LinuxMCE
Jump to: navigation, search
(Generated Files)
(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
auto lo
+
  iface lo inet loopback
iface lo inet loopback
+
 
 +
  auto eth0
 +
  iface eth0 inet dhcp
 +
 
 +
  auto eth1
 +
  iface eth1 inet dhcp
  
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
+
  default vesamenu.c32
prompt 0
+
  prompt 0
timeout 450
+
  timeout 450
totaltimeout 450
+
  totaltimeout 450
 
+
 
menu width 78
+
  menu width 78
menu margin 14
+
  menu margin 14
menu rows 6
+
  menu rows 6
menu vshift 2
+
  menu vshift 2
menu timeoutrow 11
+
  menu timeoutrow 11
menu tabmsgrow 10
+
  menu tabmsgrow 10
menu background splash.png
+
  menu background splash.png
menu title $LIVECDLABEL
+
  menu title $LIVECDLABEL
menu color tabms 0 #fffc9306 #fffc9306 std
+
  menu color tabms 0 #fffc9306 #fffc9306 std
menu color timeout 0 #ff000000 #fffc9306 std
+
  menu color timeout 0 #ff000000 #fffc9306 std
menu color border 0 #ffffffff #ee000000 std
+
  menu color border 0 #ffffffff #ee000000 std
menu color title 0 #ff00ff00 #ee000000 std
+
  menu color title 0 #ff00ff00 #ee000000 std
menu color sel 0 #ffffffff #fffc9306 std
+
  menu color sel 0 #ffffffff #fffc9306 std
menu color unsel 0 #ffffffff #ee000000 std
+
  menu color unsel 0 #ffffffff #ee000000 std
menu color hotkey 0 #ff00ff00 #ee000000 std
+
  menu color hotkey 0 #ff00ff00 #ee000000 std
menu color hotsel 0 #ffffffff #85000000 std
+
  menu color hotsel 0 #ffffffff #85000000 std
#####menu color option  forground #ALPHA/R/G/B  background #ALPHA/R/G/B
+
  #####menu color option  forground #ALPHA/R/G/B  background #ALPHA/R/G/B
#####blue ff98a5e0
+
  #####blue ff98a5e0
 
+
 
label live
+
  label live
  menu label Live - Boot LinuxMCE Live! from DVD
+
    menu label Live - Boot LinuxMCE Live! from DVD
  kernel /casper/vmlinuz
+
    kernel /casper/vmlinuz
  append preseed/file=/cdrom/preseed.cfg boot=casper initrd=/casper/initrd.gz quiet splash --
+
    append preseed/file=/cdrom/preseed.cfg boot=casper initrd=/casper/initrd.gz quiet splash --
 
+
 
label install
+
  label install
  menu label Install LinuxMCE - Start the installer
+
    menu label Install LinuxMCE - Start the installer
  kernel /casper/vmlinuz
+
    kernel /casper/vmlinuz
  append preseed/file=/cdrom/preseed.cfg boot=casper only-ubiquity initrd=/casper/initrd.gz quiet splash --
+
    append preseed/file=/cdrom/preseed.cfg boot=casper only-ubiquity initrd=/casper/initrd.gz quiet splash --
 
+
 
label xforcevesa
+
  label xforcevesa
  menu label xforcevesa - boot Live in safe graphics mode
+
    menu label xforcevesa - boot Live in safe graphics mode
  kernel /casper/vmlinuz
+
    kernel /casper/vmlinuz
  append preseed/file=/cdrom/preseed.cfg boot=casper xforcevesa initrd=/casper/initrd.gz quiet splash --
+
    append preseed/file=/cdrom/preseed.cfg boot=casper xforcevesa initrd=/casper/initrd.gz quiet splash --
 
+
 
label memtest
+
  label memtest
  menu label memtest - Run memtest
+
    menu label memtest - Run memtest
  kernel /isolinux/memtest
+
    kernel /isolinux/memtest
 +
    append -
 +
 
 +
  label hd
 +
    menu label hd - boot the first hard disk
 +
    localboot 0x80
 
   append -
 
   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
+
  tasksel tasksel/first multiselect
d-i pkgsel/install-language-support boolean false
+
  d-i pkgsel/install-language-support boolean false
d-i preseed/early_command string service mysql stop  
+
  d-i preseed/early_command string service mysql stop  
d-i netcfg/choose_interface select auto
+
  d-i netcfg/choose_interface select auto
d-i finish-install/reboot_in_progress note
+
  d-i finish-install/reboot_in_progress note
ubiquity ubiquity/success_command string bash /cdrom/install/postseed.sh </code>
+
  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.
 
'''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
+
  #!/bin/bash
mount -o bind /dev /target/dev
+
  mount -o bind /dev /target/dev
mount -t proc none /target/proc
+
  mount -t proc none /target/proc
mount -t devpts none /target/dev/pts
+
  mount -t devpts none /target/dev/pts
mount -t proc sysfs /target/sys
+
  mount -t proc sysfs /target/sys
echo "Performing post-install steps. Please be patient." > /target/tmp/messenger
+
  echo "Performing post-install steps. Please be patient." > /target/tmp/messenger
export DISPLAY=:0  
+
  export DISPLAY=:0  
/cdrom/install/messages.sh && chroot /target bash /root/new-installer/postinst.sh</code>
+
  /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.
 
'''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
+
  #!/bin/bash
export DISPLAY=:0
+
  export DISPLAY=:0
msgchk=/target/tmp/msgchk
+
  msgchk=/target/tmp/msgchk
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\`"; touch -r \$newmsg \$msgchk; fi; done
+
  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
+
  #!/bin/bash
. /usr/pluto/bin/GeneralFunctions.sh
+
  . /usr/pluto/bin/GeneralFunctions.sh
. /root/new-installer/dvd-installer.sh
+
  . /root/new-installer/dvd-installer.sh
export LC_ALL=C
+
  export LC_ALL=C
echo "Please be patient while post-installer finalizes new install" > /tmp/messenger
+
  echo "Please be patient while post-installer finalizes new install" > /tmp/messenger
service mysql stop
+
  service mysql stop
sleep 3
+
  sleep 3
\`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
pinger
+
  pinger
gpgUpdate
+
  gpgUpdate
TimeUpdate
+
  TimeUpdate
Pre-InstallNeededPackages
+
  Pre-InstallNeededPackages
CreatePackagesFiles
+
  CreatePackagesFiles
PreSeed_Prefs
+
  PreSeed_Prefs
Fix_Initrd_Vmlinux
+
  Fix_Initrd_Vmlinux
Nic_Config
+
  Nic_Config
Setup_Pluto_Conf
+
  Setup_Pluto_Conf
Setup_NIS
+
  Setup_NIS
Create_And_Config_Devices
+
  Create_And_Config_Devices
Configure_Network_Options
+
  Configure_Network_Options
UpdateUpgrade
+
  UpdateUpgrade
VideoDriverSetup
+
  VideoDriverSetup
addAdditionalTTYStart
+
  addAdditionalTTYStart
TempEMIFix
+
  TempEMIFix
CreateFirstBoot
+
  CreateFirstBoot
InitialBootPrep
+
  InitialBootPrep
echo "/bin/false" > /etc/X11/default-display-manager
+
  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.
+
  # 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
+
  chattr +i /etc/X11/default-display-manager
mv /root/new-installer/lmcemaster/runners/* /etc/init.d
+
  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-alternatives --install /lib/plymouth/themes/default.plymouth default.plymouth /lib/plymouth/themes/LinuxMCE/LinuxMCE.plymouth 900
update-initramfs -u
+
  update-initramfs -u
umount -lf /dev/pts
+
  umount -lf /dev/pts
umount -lf /sys
+
  umount -lf /sys
umount -lf /proc
+
  umount -lf /proc
service mysql stop
+
  service mysql stop
killall -9 mysqld_safe
+
  killall -9 mysqld_safe
kill \`lsof |grep mysqld|cut -d" " -f3|sort -u\`
+
  kill \`lsof |grep mysqld|cut -d" " -f3|sort -u\`
umount -lf /dev
+
  umount -lf /dev
echo "Rebooting" > /target/tmp/messenger
+
  echo "Rebooting" > /target/tmp/messenger
sleep 3
+
  sleep 3
#rm /target/tmp/messenger
+
  #rm /target/tmp/messenger
reboot</code>
+
  reboot
  
 
'''README.diskdefines''' Defines the architecture, diskname etc.
 
'''README.diskdefines''' Defines the architecture, diskname etc.
 
+
  #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
 
_________________________________________________________________________________________________________________
 
_________________________________________________________________________________________________________________
  

Revision as of 02:06, 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
 #####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).

 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
 #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

README.diskdefines Defines the architecture, diskname etc.

 #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)