User:Az990tony/squashfs-surgery: Difference between revisions
(New page: In the case of the XS School Server, the CD is designed to run in "batch mode" unattended. This may not be what you want. This can be fixed with some minor "squashfs surgery" as follows....) |
No edit summary |
||
(7 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
The following was based on information found in |
|||
[[ http://forums.fedoraforum.org/showthread.php?t=174916 | FedoraForum ]]. |
|||
In the case of the XS School Server, the CD is designed to run in "batch mode" |
In the case of the XS School Server, the CD is designed to run in "batch mode" |
||
unattended. This may not be what you want. This can be fixed with some minor |
unattended. This may not be what you want. This can be fixed with some minor |
||
Line 48: | Line 51: | ||
[root ~]# cd /root |
[root ~]# cd /root |
||
[root ~]# rpm -qa --root /root/LIVE | sort > xs-packages.lst |
[root ~]# rpm -qa --root /root/LIVE | sort > xs-packages.lst |
||
[root ~]# cp LIVE/root/anaconda-ks.cfg |
[root ~]# cp LIVE/root/anaconda-ks.cfg old-anaconda-ks.cfg |
||
[root ~]# |
[root ~]# cp old-anaconda-ks.cfg new-anaconda-ks.cfg |
||
[root ~]# |
[root ~]# gedit new-anaconda-ks.cfg |
||
[root ~]# cp new-anaconda-ks.cfg LIVE/root/anaconda-ks.cfg |
|||
[root ~]# cat LIVE/root/anaconda-ks.cfg |
[root ~]# cat LIVE/root/anaconda-ks.cfg |
||
# Kickstart file for installing a school server |
# Kickstart file for installing a school server |
||
# For now, due to anaconda bug #243374 |
|||
# |
# |
||
# Use text mode install interactive |
# Use text mode install interactive - modified by Tony Pearson |
||
text |
text |
||
install |
install |
||
Line 65: | Line 68: | ||
# Network information |
# Network information |
||
network --device eth0 --bootproto dhcp --hostname schoolserver |
network --device eth0 --bootproto dhcp --hostname schoolserver |
||
network --device=eth1 --bootproto=static --gateway=192.168.0.1 --ip=192.168.0.77 -- |
|||
nameserver=216.39.128.2 --netmask=255.255.255.0 --onboot=on |
|||
network --device=eth2 --bootproto=dhcp --onboot=on |
|||
# rootpw --iscrypted $1$Bf0Ag93M$weSucLBipI6jTjtolgZE61 |
|||
firewall --enabled |
firewall --enabled |
||
authconfig --enableshadow --enablemd5 |
authconfig --enableshadow --enablemd5 |
||
Line 97: | Line 96: | ||
[root ~]# rm new-squash.img |
[root ~]# rm new-squash.img |
||
[root ~]# mksquashfs squashfs-root new-squash.img |
[root ~]# mksquashfs squashfs-root new-squash.img |
||
[root ~]# mksquashfs squashfs-root new-squash.img -no-sparse -b 64k # if you have squashfs 3.3.x |
|||
</tt> |
</tt> |
||
Line 110: | Line 110: | ||
</tt> |
</tt> |
||
7. Now we generate the "iso" file itself. Note, the ''mkisofs'' command must be run from within the BUILD directory. The final character "." is important, and means all files in the BUILD directory are included in the ''*.iso'' image. Make sure that the new ISO has the same "CDLABEL" as the original by specifying the "-V" parameter. Compare the size of the ''new-xs163.iso'' file just created with the ''old-xs163.iso'' that we made in step 1. |
7. Now we generate the "iso" file itself. Note, the ''mkisofs'' command must be run from within the BUILD directory. The final character "." is important, and means all files in the BUILD directory are included in the ''*.iso'' image. Make sure that the new ISO has the same "CDLABEL" as the original by specifying the "-V" parameter. Compare the size of the ''new-xs163.iso'' file just created with the ''old-xs163.iso'' that we made in step 1. They should be similar in size. |
||
<tt> |
<tt> |
||
Line 137: | Line 137: | ||
3dnowext 3dnow pni cx16 lahf_lm cmp_legacy '''svm''' extapic cr8_legacy misalignsse |
3dnowext 3dnow pni cx16 lahf_lm cmp_legacy '''svm''' extapic cr8_legacy misalignsse |
||
ts fid vid ttp tm stc 100mhzsteps |
ts fid vid ttp tm stc 100mhzsteps |
||
[root ~]# yum install kvm qemu |
|||
[root ~]# modprobe kvm-amd |
[root ~]# modprobe kvm-amd |
||
[root ~]# qemu-kvm -m 1024 -cdrom new-xs163.iso |
[root ~]# qemu-kvm -m 1024 -cdrom new-xs163.iso |
||
</tt> |
</tt> |
||
9. Finally, we are ready to burn the ISO to a CD. You can use any graphical program, or use the ''wodim'' |
9. Finally, we are ready to burn the ISO to a CD. You can use any graphical program, or use the ''wodim'' command line interface. |
||
<tt> |
|||
[root ~]# wodim --devices |
|||
wodim: Overview of accessible drives (1 found) : |
|||
------------------------------------------------------------------------- |
|||
0 dev='/dev/scd0' rwrw-- : 'ATAPI' 'DVD A DH20A4H' |
|||
------------------------------------------------------------------------- |
|||
[root ~]# cdrecord -v -dao -eject speed=4 dev=/dev/scd0 new-xs163.iso |
|||
</tt> |
Latest revision as of 02:44, 19 August 2008
The following was based on information found in [[ http://forums.fedoraforum.org/showthread.php?t=174916 | FedoraForum ]].
In the case of the XS School Server, the CD is designed to run in "batch mode" unattended. This may not be what you want. This can be fixed with some minor "squashfs surgery" as follows. Note: you need root authority to issue mount commands, so I found it easier to do the entire process logged in as root. I am sure that this can be done with appropriate sudo or su - commands.
1. Mount the source, in this case the old-XS-163.iso file. If you have the CD itself, you can unmount the physical CD (/media/OLPC_XS_163) and make the iso file using the "dd" command. Listing out the directory shows there are three items, a subdirectory called isolinux, a file called squashfs.img, and a subdirectory called sysroot.
[root ~]# cd /root [root ~]# umount /media/OLPC_XS_163 [root ~]# dd if=/dev/cdrom of=old-xs163.iso bs=2k [root ~]# mkdir /root/ISO [root ~]# mount -t iso9660 -o loop old-XS-163.iso ISO [root ~]# ls ISO isolinux squashfs.img sysroot
2. Unpack the file system "squashfs.img". This shows an os.img file, and another sysroot subdirectory. Note the -d squashfs-root is the default, but I include here for completeness.
[root ~]# cd /root [root ~]# yum install squashfs-tools (* if you have not yet installed it, now you can) [root ~]# modprobe squashfs (* make sure it is loaded into the system) [root ~]# unsquash -d squashfs-root ISO/squashfs.img [root ~]# ls squashfs-root os.img sysroot
3. This is like peeling layers off an onion. We are now going to mount the os.img as a file system in rw=read/write mode so that we can modify it.
[root ~]# cd /root [root ~]# mkdir LIVE [root ~]# mount -o loop,rw squashfs-root/os.img LIVE [root ~]# ls LIVE bin dev fsroot.olpc lib lost+found mnt proc ... boot etc home library media opt root ...
4. Here you can edit files, install or uninstall RPMs, etc., by using the --root parameter. In my case, I just want to edit the kickstart file with one I made using the "kickstart configurator". You may prefer instead just to edit it with your favorite text editor, such as gedit or vi. If you comment out any lines in the anaconda-ks.cfg, make sure the "#" is in column one, and a space exists in column 2 for each line you want ignored.
[root ~]# cd /root [root ~]# rpm -qa --root /root/LIVE | sort > xs-packages.lst [root ~]# cp LIVE/root/anaconda-ks.cfg old-anaconda-ks.cfg [root ~]# cp old-anaconda-ks.cfg new-anaconda-ks.cfg [root ~]# gedit new-anaconda-ks.cfg [root ~]# cp new-anaconda-ks.cfg LIVE/root/anaconda-ks.cfg [root ~]# cat LIVE/root/anaconda-ks.cfg # Kickstart file for installing a school server # # Use text mode install interactive - modified by Tony Pearson text install interactive # lang en_US.UTF-8 # keyboard us skipx # xconfig --startxonboot # Network information network --device eth0 --bootproto dhcp --hostname schoolserver firewall --enabled authconfig --enableshadow --enablemd5 # selinux --permissive selinux --disabled timezone --utc America/New_York # bootloader --location=mbr --driveorder=sda --append="rhgb quiet" bootloader --location=none # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work # clearpart --linux --drives=sda # part /boot --fstype ext3 --size=100 --ondisk=sda # part / --fstype ext3 --size=8192 --ondisk=sda # part pv.6 --size=0 --grow --ondisk=sda # volgroup VolGroup00 --pesize=32768 pv.6 # logvol /library --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=200000 --grow # logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=2048 clearpart --none
5. When you are done with the edits, unmount LIVE and re-pack the contents. If you have a new-squash.img from a previous run, delete it first. The mksquashfs process can take a while, so now is a good time to get up and stretch or drink some coffee.
[root ~]# cd /root [root ~]# umount LIVE [root ~]# rm new-squash.img [root ~]# mksquashfs squashfs-root new-squash.img [root ~]# mksquashfs squashfs-root new-squash.img -no-sparse -b 64k # if you have squashfs 3.3.x
6. We are now going to create a new folder that contains everything we need to burn a new CD. Note that the "/" (slash) after ISO is very important. The exclude copies all files except the original squashfs.img file, which we will replace with the new-squash.img we just made in step 5. Listing the BUILD directory shows that it is an exact match of what we had in step 1.
[root ~]# cd /root [root ~]# mkdir BUILD [root ~]# rsync -av --exclude='squash.img' ISO/ BUILD [root ~]# cp new-squashfs.img BUILD/squashfs.img [root ~]# ls BUILD isolinux squashfs.img sysroot
7. Now we generate the "iso" file itself. Note, the mkisofs command must be run from within the BUILD directory. The final character "." is important, and means all files in the BUILD directory are included in the *.iso image. Make sure that the new ISO has the same "CDLABEL" as the original by specifying the "-V" parameter. Compare the size of the new-xs163.iso file just created with the old-xs163.iso that we made in step 1. They should be similar in size.
[root ~]# cd /root/BUILD [root BUILD]# cat isolinux/isolinux.cfg | grep CDLABEL append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg live_ram append initrd=initrd.img ro quiet root=CDLABEL=OLPC_XS_163 rootfstype=iso9660 liveimg check [root BUILD]# mkisofs -R -l -D -b isolinux/isolinux.bin -c isolinux/boot.catalog -o /root/new-xs163.iso -allow-leading-dots -input-charset default -no-emul-boot -boot-load-size 4 -boot-info-table -V "OLPC_XS_163" [root BUILD]# cd /root [root ~]# ls -l *.iso -rw-r--r-- 1 root root 474998784 2008-06-17 07:10 new-xs163.iso -rw-r--r-- 1 root root 475021312 2008-06-17 06:22 old-xs163.iso
8. We can test this "iso" file out with QEMU-KVM virtualization first, so that we don't burn any coasters. This step is optional, but can help reduce wasting blank CD media. First, we verify that our CPU has vmx or svm support, it has svm. Next we load the kvm module specific to the processor time, in this case AMD.
[root ~]# cd /root [root ~]# cat /proc/cpuinfo | grep svm flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse ts fid vid ttp tm stc 100mhzsteps [root ~]# yum install kvm qemu [root ~]# modprobe kvm-amd [root ~]# qemu-kvm -m 1024 -cdrom new-xs163.iso
9. Finally, we are ready to burn the ISO to a CD. You can use any graphical program, or use the wodim command line interface.
[root ~]# wodim --devices wodim: Overview of accessible drives (1 found) : ------------------------------------------------------------------------- 0 dev='/dev/scd0' rwrw-- : 'ATAPI' 'DVD A DH20A4H' ------------------------------------------------------------------------- [root ~]# cdrecord -v -dao -eject speed=4 dev=/dev/scd0 new-xs163.iso