home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / sbin / lpdev_config < prev    next >
Text File  |  1999-11-12  |  6KB  |  207 lines

  1. #!/usr/bin/perl
  2. ###################################
  3. #Name : lpdev_config
  4. #
  5. #Description: To create filesystems and setup loop devices for loop
  6. # device installs and create and linuxrc for the ramdisk used during
  7. # loadlin boot.  
  8. #
  9. # lpdev_config should be invoked as follows 
  10. # 1st arg: windows partition device to install cdl on 
  11. # 2nd arg: size of root filesystem (in MB) 
  12. # 3rd arg: size of swap filesystem (in MB)
  13. # 4th arg: 1 if we want badblock checking. 
  14. #            
  15. #Copyright (C) 1999 Corel Corporation 
  16. # EXHIBIT A -Corel Public License. 
  17. # The contents of this file are subject to the Corel Public License 
  18. # Version 1.0 (the "License"); you may not use this file except in 
  19. # compliance  with the License. You may obtain a copy of the License at 
  20. # linux.corel.com/linuxproducts/corellinux/license.htm. 
  21. # Software distributed under the License is distributed on an "AS IS" 
  22. # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 
  23. # License for the specific language governing rights and limitations 
  24. # under the License. 
  25. # The Original Code is lpdev_config. 
  26. # The Initial Developer of the Original Code is Corel Corporation. 
  27. # Portions created by Corel are Copyright (C) 1999  All Rights Reserved. 
  28. # Contributor(s): ______________________________________. 
  29. ###################################################################
  30.  
  31. # to be safe and since we might have typos in variable names
  32. use strict;
  33.  
  34. my( $TEMP_MOUNT, $DEV, $ROOT_SIZE, $SWAP_SIZE, $ROOT, $SWAP, $TARGET, $ROOT_LOOPDEV, $SWAP_LOOPDEV, $FSTYPE, $TEMP_MOUNT2, $BOOTDSK_IMG, $TMP_DIR, $KERNEL_PKG, $DOSUTILS, $BADBLOCKCHK) = ();
  35.  
  36. $TEMP_MOUNT="/tmp/mnt";
  37. $TEMP_MOUNT2="/tmp/mnt2";
  38. $TMP_DIR="$TEMP_MOUNT/cdl_tmp";
  39. $DEV=$ARGV[0];
  40. $ROOT_SIZE=$ARGV[1];
  41. $SWAP_SIZE=$ARGV[2];
  42. $BADBLOCKCHK=$ARGV[3];
  43. $ROOT="$TEMP_MOUNT/cdl/system/root.img";
  44. $SWAP="$TEMP_MOUNT/cdl/system/swap.img";
  45. $TARGET="/target";
  46. $ROOT_LOOPDEV="/dev/loop1";
  47. $SWAP_LOOPDEV="/dev/loop2";
  48. $FSTYPE="";
  49. $BOOTDSK_IMG="/instmnt/boot/boot1440.img";
  50. $KERNEL_PKG="/instmnt/dists/stable/main/binary-i386/base/kernel-2.2.x.deb";
  51. #$INITRD="ws/initrd";
  52. $DOSUTILS="/instmnt/tools";
  53.  
  54. # make sure we have a temp mount point ready
  55. `umount $TEMP_MOUNT`;
  56. `rm -fr $TEMP_MOUNT`;
  57. `mkdir $TEMP_MOUNT`;
  58.  
  59. `umount $TEMP_MOUNT2`;
  60. `rm -fr $TEMP_MOUNT2`;
  61. `mkdir $TEMP_MOUNT2`;
  62.  
  63. if( ! -e $DEV ) {
  64.     die "$DEV not found: $!";
  65. }
  66.  
  67. # mount the device properly depending on its partition type
  68. #if( `fdisk -l|grep $DEV|grep Win95` ) {
  69.     $FSTYPE="vfat";
  70. #} elsif( `fdisk -l|grep $DEV|grep DOS` ) {
  71. #    $FSTYPE="msdos";
  72. #}
  73.  
  74. if( $BADBLOCKCHK == 1 ) {
  75.     $BADBLOCKCHK="-c";
  76. } else {
  77.     $BADBLOCKCHK="";
  78. }
  79.  
  80. `mount -t $FSTYPE $DEV $TEMP_MOUNT`;
  81.  
  82. # if an installation of cdl already exists move it to cdl-# 
  83. # and update the linuxrc to use the modified directory
  84. if( -e "$TEMP_MOUNT/cdl" ) {
  85.     my ($c, @linuxrc) = (0, (), "");
  86.     for($c=1;(-e "$TEMP_MOUNT/cdl_$c");$c++)
  87.     {
  88.     }
  89.     `mv $TEMP_MOUNT/cdl $TEMP_MOUNT/cdl_$c`;
  90.  
  91.     `gunzip $TEMP_MOUNT/cdl_$c/initrd.gz`;
  92.     `mount -o loop $TEMP_MOUNT/cdl_$c/initrd $TEMP_MOUNT2`;
  93.     @linuxrc = `cat $TEMP_MOUNT2/linuxrc`;
  94.     foreach my $elem (@linuxrc) 
  95.     {
  96.         $elem =~ s/\/cdl[_\d]*\//\/cdl_$c\//;
  97.     }
  98.  
  99.     `rm $TEMP_MOUNT2/linuxrc`;
  100.     open(FOUT, ">$TEMP_MOUNT2/linuxrc");
  101.     print FOUT @linuxrc;
  102.     close FOUT;
  103.  
  104.     # set proper permissions for linuxrc
  105.     `chmod a+x $TEMP_MOUNT2/linuxrc`;
  106.  
  107.     `umount $TEMP_MOUNT2`;
  108.     `gzip $TEMP_MOUNT/cdl_$c/initrd`;
  109. }
  110.  
  111. `mkdir $TEMP_MOUNT/cdl`;
  112. `mkdir $TEMP_MOUNT/cdl/system`;
  113.  
  114. # create the root/swap ``partitions''
  115. `dd if=/dev/zero of=$ROOT bs=1024 count=$ROOT_SIZE`;
  116. `dd if=/dev/zero of=$SWAP bs=1024 count=$SWAP_SIZE`;
  117.  
  118. # unhook /dev/loopX (pray that they are not currently busy)
  119. `losetup -d $ROOT_LOOPDEV`;
  120. `losetup -d $SWAP_LOOPDEV`;
  121.  
  122. # connect the root/swap ``partitions'' to loopback devices 
  123. # (requires loopback device support in the kernel)
  124. `losetup $ROOT_LOOPDEV $ROOT`;
  125. `losetup $SWAP_LOOPDEV $SWAP`;
  126.  
  127. `sync;sync`;
  128.  
  129. #`e2label $SWAP_LOOPDEV cdl:`;
  130.  
  131. # create the filesystems
  132. `mke2fs $BADBLOCKCHK $ROOT_LOOPDEV -L "cdl:/"`;
  133.  
  134. `sync; sync`;
  135.  
  136. `mkswap $BADBLOCKCHK $SWAP_LOOPDEV`;
  137.  
  138. `sync; sync`;
  139.  
  140. `swapon $SWAP_LOOPDEV`;
  141.  
  142. `sync;sync`;
  143.  
  144. # copy the compressed ramdisk image to the cdl dir on the windows
  145. # partition and uncompress it
  146. `mount -t ext2 -o loop $BOOTDSK_IMG $TEMP_MOUNT2`;
  147. `cp $TEMP_MOUNT2/boot/initrd.gz $TEMP_MOUNT/cdl`;
  148.  
  149. # for now we use the install kernel as the runtime kernel
  150. `cp $TEMP_MOUNT2/boot/vmlinuz $TEMP_MOUNT/cdl`;
  151. `umount $TEMP_MOUNT2`;
  152.  
  153. # copy the runtime kernel from a kernel deb pkg (should be added when
  154. # the runtime kernel pkg is ready)
  155. #`mkdir $TMP_DIR`;
  156. #`dpkg -x $KERNEL_PKG $TMP_DIR`;
  157.  
  158. # this assume the dpkg extract puts the kernel into boot/vmlinuz. This
  159. # probably will need changing
  160. #`cp $TMP_DIR/boot/vmlinuz $TEMP_MOUNT/cdl`;
  161.  
  162.  
  163. `gunzip $TEMP_MOUNT/cdl/initrd.gz`;
  164.  
  165. `sync; sync`;
  166.  
  167. # mount the initrd image
  168. `mount -t ext2 -o loop $TEMP_MOUNT/cdl/initrd $TEMP_MOUNT2`;
  169.  
  170. # write the proper linuxrc file
  171. open(FOUT, ">$TEMP_MOUNT2/linuxrc") or die "Cannot open $TEMP_MOUNT2/linuxrc: $!";
  172.  
  173. print FOUT "#!/bin/kiss\n";
  174. print FOUT "mount -t $FSTYPE $DEV /mnt\n";
  175. print FOUT "echo \"linuxrc: DOS partition mounted!\"\n";
  176. print FOUT "/sbin/losetup $ROOT_LOOPDEV /mnt/cdl/system/root.img\n";
  177. print FOUT "/sbin/losetup $SWAP_LOOPDEV /mnt/cdl/system/swap.img\n";
  178. print FOUT "echo \"linuxrc: Loop devices attached!!\"\n";
  179.  
  180. close FOUT;
  181.  
  182. # set proper permissions for linuxrc
  183. `chmod a+x $TEMP_MOUNT2/linuxrc`;
  184.  
  185. `sync;sync`;
  186. # umount the ramdisk image and recompress it
  187. `umount $TEMP_MOUNT2`;
  188. `gzip $TEMP_MOUNT/cdl/initrd`;
  189.  
  190. # remove the temp dir
  191. `rm -fr $TMP_DIR`;
  192.  
  193. # uncompress the loadlin binary and the batch file to start cdl from
  194. # the dos/windows partition
  195. `cp $DOSUTILS/loadlin.exe $TEMP_MOUNT/cdl`;
  196.  
  197. open(FOUT, ">$TEMP_MOUNT/cdl/startcdl.bat") or die "Cannot open $TEMP_MOUNT/cdl/startcdl.bat: $!";
  198.  
  199. print FOUT "echo Starting Corel Linux ...\r\n";
  200. print FOUT "loadlin vmlinuz root=$ROOT_LOOPDEV initrd=initrd.gz\r\n";
  201. close FOUT;
  202.  
  203. `sync;sync`;
  204. `sync;sync`;
  205.