Development/Packaging/Tools/mkcd
Aus Mandriva Community Wiki
There is a script located in the misc directory of the distribution tree that will make a set of ISO images to burn to CDR.
Automatic modeThe basic syntax for automatic operation is: ./misc/MakeCD -a /path/to/cooker/ The leading ./ is necessary if your pwd is the top of an ISO-like tree because the MakeCD script pulls out the path from $0, deletes the "misc/" from it, and if the result is empty various things complain about missing arguments. To limit the number of ISO images that are created, use the -c option followed by the number of disks you want: ./misc/MakeCD -a -c 2 /path/to/cooker/ By default, the script makes ISO images that will fit on 650MB blanks. If you want to change this, use the --discsize option to select an alternative image size: ./misc/MakeCD --discsize 700m -a /path/to/cooker/ It is a good idea to send the ISOs elsewhere, otherwise any subsequent auto runs will try to include the previous generation of ISOs on the first ISO, with predictable results. ./misc/MakeCD -i /path/for/ISOs -a /path/to/cooker/ Note that since it's release LE2005, the distribution does not propose any more the MakeCd script in the /misc tree directory, it is henceforth necessary to directly use mkcd Howto. More information on Configuration filesMost of the help regarding a command line option can be accessed with: mkcd -h The help about configuration file syntax can be accesses with: mkcd -h config The help about a specific function can be accessed with: mkcd -h installation boot Disc specification filesThe specification file contains first the definition of the list of rpms that will be used and then the definition of the different discs. List files syntaxList files allow to select which packages will be included in the discs. The syntax is [package] <option1>,<options2>. Options are not mandatory. The available options are:
Several options can be put in, separated with "," but without spaces. Testing list filesYou can test the result of the package selection of your list file with: mkcd --testlist <configuration file> <list number> <rpmsrate path> This mode will list every line of the list configuration file with the packages found into the list associated rpm repositories. e.g.: $ mkcd--testlist mkcd/10.1/10.1.conf 1 /c/i586/media/media_info/rpmsrate Checking kolab-server exclude Exclude kolab-server-1.0-0.23mdk.i586 Checking kdebluetooth kdebluetooth-0.0.cvs20040718-2mdk.i586 Checking gnome-bluetooth gnome-bluetooth-0.5.1-7mdk.i586 Checking kernel-enterprise regexp kernel-enterprise-2.6.8.0.rc2.2mdk-1-1mdk.i586 kernel-enterprise-2.4.27.0.pre2.1mdk-1-1mdk.i586 Basic configuration9.2 list -k <rep_path>/Mandrake/base/pubkey 1 <config_path>/download <config_path>/main rpmlist -b <RPMS_path>/RPMS # download disc 1 650m 92DOWNLOAD1 "Installation CD 1 (x86)" "Mandrakelinux9.2-Download-1" -p Mandrakesoft dir rpms Mandrake/RPMS generic --synthesis rpms 1 advertising <ad_path>/01-thanks.png <ad_path>/02-community.png <ad_path>/03-software.png installation -o 50,3,0.1 --synthesis -l fr,it,en,de,es -t [[GuessWhat-download-i586]] \\ -i <install_path>/ -d 1/rpms 2/rpms 3/rpms boot --isolinux isolinux -b isolinux/isolinux.bin --first <install_path>/isolinux \\ -f <install_path>/images disc 2 695m 92DOWNLOAD2 "Installation CD 2 (x86)" "Mandrakelinux9.2-Download-2" -p Mandrakesoft dir rpms Mandrake/RPMS2 generic --synthesis rpms 1 boot -b Boot/cdrom-changedisk.img -- -d -f Boot/ <install_path>/images/cdrom-changedisk.img disc 3 695m 92DOWNLOAD3 "International CD (x86)" "Mandrakelinux9.2-Download-3" -p Mandrakesoft dir rpms Mandrake/RPMS3 generic --synthesis rpms 1 Such a configuration might be run like this (after <appropriate_symbols> have been replaced): mkcd -s nameofconfigfile -m 1,2,3 More complex configurationThis example was cribbed from a message thoughtfully posted by Warly today: 9.2 list -k pieces/9.2/install/i586/Mandrake/base/pubkey 1 input/9.2/main rpmlist -b pieces/9.2/updates/RPMS -s pieces/9.2/updates/SRPMS rpmlist -b pieces/9.2/extra/RPMS -s pieces/9.2/extra/SRPMS rpmlist -b pieces/9.2/RPMS -s pieces/9.2/SRPMS list 7 input/9.2/all rpmlist -b pieces/9.2/plf/i586/ pieces/9.2/plf/noarch/ list 12 input/9.2/all rpmlist -b pieces/9.2/contrib/all/RPMS disc 42 4.36g 01SPP-9214 "DVD" "MandrakeLinux9.2w-DVD" -p PLF dir rpms Mandrake/RPMS dir rpms2 Mandrake/RPMS2 dir rpms3 Mandrake/RPMS3 dir rpms4 Mandrake/RPMS4 generic --synthesis rpms 1 cdcom -k pieces/9.2/install/i586/Mandrake/base/pubkey rpms2 -d Applications pieces/9.2/cdcom/Discovery cdcom -k pieces/9.2/install/i586/Mandrake/base/pubkey rpms2 -d Applications pieces/9.2/cdcom/Discovery-updates generic --synthesis rpms3 12 generic --synthesis rpms4 7 generic srpms 1 advertising img1.png img2.png img3.png img4.png installation -o 50,3,0.1 --nosrcfit --synthesis -l en,fr -c pieces/9.2/plf/install/compssUsers \\ -r pieces/9.2/plf/install/rpmsrate -t [[FiveStar-i586]] -i pieces/9.2/install/i586/ -d 42/rpms 42/rpms2 42/rpms3 42/rpms4 boot --isolinux isolinux -b isolinux/isolinux.bin --first pieces/9.2/install/i586/isolinux -f pieces/9.2/install/i586/images Caveats for copying from CDsRemove the files .rr_moved and isolinux/boot.cat before starting MakeCD or mkcd. They are generated by the script and may interfere with it's operation (Warly is enhancing mkcd to cope with this cleanly). Adding extra stuff to the first ISOIf you have branded material, special instructions, pat-and-stanley videos etc that you want included in the first ISO image, just put them in the tree you specify to -a or the list config command, and they are included. For an example of this, see below. Selecting a non-standard set of packagesAdding packages is easy, just add more directory names after the main RPM collection, or place the extras in subdirectories of it. For 9.2, the main distro plus the contribs comes out to about 7 ISOs. Subtracting packages is harder since it's easy to break dependencies. The following technique has worked well for selecting a viable subset of existing packages:
Since I had disparate sources scattered all over the drive, I made symlinks called mdk92* to them, for example mdk92main, mdk92updates, mdk92contrib, mdk92local and used mdk92* as the dir_wildcard to keep it simple. Example: trimmed-back single CD with foreign files includedHere is the file tree cloned from CD1 of a 9.2 download set (with the messy and unrelated bits trimmed off, along with any files called .rr_moved or boot.cat): 28M ./Mandrake/base 484K ./Mandrake/mdkinst/etc 19M ./Mandrake/mdkinst/lib 38M ./Mandrake/mdkinst/usr 57M ./Mandrake/mdkinst 1.6M ./Mandrake/share/advertising 1.6M ./Mandrake/share 4.0K ./Mandrake/RPMS [packages not included] 86M ./Mandrake 196K ./screenshots/thumbs 2.5M ./screenshots [screenshots of this CD installing] 400K ./ColdFusionTute [this is supporting material for a Cold Fusion tute] 4.0K ./doc 8.0K ./dosutils/lang 676K ./dosutils 4.3M ./images/alternatives 13M ./images 3.7M ./isolinux/alt0 2.5M ./isolinux/alt1 6.3M ./isolinux 8.0K ./lang 180K ./misc/auto/URPM 184K ./misc/auto 412K ./misc/bin 28K ./misc/doc 764K ./misc/perl5 1.5M ./misc 248M ./WinDev [this is a Windows-based IDE] 358M . Here is the mkcd script to pack that all up; the above tree lives in adcd/ and the RPMs for it live in server-RPMs/ The disc and advertising lines are shown backslashed below but in the real config file they are each on only one line. 9.2 list -k adcd/Mandrake/base/pubkey1 1 adcd/misc/doc/main adcd/misc/doc/download rpmlist -b server-RPMs disc 1 680m 92AUSDEVEL "AusDeveloper CD 1 (x86)" \\ "MandrakeLinux9.2-AusDeveloper-1" -p [[Australian_Developer]] dir rpms Mandrake/RPMS generic --synthesis rpms 1 advertising adcd/Mandrake/share/advertising/warning.png \\ adcd/Mandrake/share/advertising/AusDeveloper.png \\ adcd/Mandrake/share/advertising/01-thanks.png \\ adcd/Mandrake/share/advertising/02-community.png \\ adcd/Mandrake/share/advertising/03-software.png \\ adcd/Mandrake/share/advertising/computer-angels.png \\ adcd/Mandrake/share/advertising/CyberKnights.png \\ adcd/Mandrake/share/advertising/GoldenLight.png \\ adcd/Mandrake/share/advertising/lca2004.png \\ adcd/Mandrake/share/advertising/LinuxAus.png \\ adcd/Mandrake/share/advertising/04-configuration.png \\ adcd/Mandrake/share/advertising/05-desktop.png \\ adcd/Mandrake/share/advertising/06-development.png \\ adcd/Mandrake/share/advertising/07-server.png \\ adcd/Mandrake/share/advertising/08-store.png \\ adcd/Mandrake/share/advertising/09-mdksecure.png \\ adcd/Mandrake/share/advertising/10-security.png \\ adcd/Mandrake/share/advertising/11-mnf.png \\ adcd/Mandrake/share/advertising/12-mdkexpert.png \\ adcd/Mandrake/share/advertising/13-mdkexpert_corporate.png installation -o 50,3,0.1 --synthesis -l en -t [[GuessWhat-ausdevel-i586]] -i adcd/ -d 1/rpms boot --isolinux isolinux -b isolinux/isolinux.bin --first adcd/isolinux -f adcd/images Various mails about MakeCDhttp://archives.mandrivalinux.com/cooker/2004-05/msg04994.php |

