Использование mkcd

Материал из Mandriva Russian Community Wiki

Перейти к: навигация, поиск
Примечание
Статья находится в стадии написания по материалам официальной документации

Цель данного документа состоит в том, чтобы научить пользоваться программой MKCD для создания ISO-образов дистрибутива Mandriva.

Примечание
Рассматриваемые возможности и функции программы затрагивают функционал программы версии 4.2.6, стоит заметить, что функционал программы может меняться от версии к версии.

Содержание

Необходимые директории

В своей домашней директории вы можете создать директории для хранения ISO-образов, файлов конфигурации, файлов отладки и других, но обычно в этом нет нужды, т.к. все необходимые пути указываются в файле настройки MKCD. Рассмотри директории и их содержимое:

  • input: содержит конфигурационные файлы;
  • log: содержит все файлы отладки;
  • pieces: содержит репозиторий (пакеты программ), дополнительные файлы;
  • build: в данной директории происходит сборка iso-образа;
  • iso: содержит собранные ISO-обььразы.

Стоит заметить, что директории build и iso при отсутствии будут созданы автоматически.

Директория input

В случае необходимости использования разных конфигураций, в этой директории вы можете создавать поддиректории с именами ваших проектов. Сохраните основной конфигурационный файл MKCD (например: 2008.0.conf), и файлы содержащие список RPM и SRPMS.

Основной конфигурационный файл MKCD (2008.0.conf)

При первом взгляде на файл конфигурации, он может показаться странным, хотя на самом деле он очень прост.

2008.0

VERSION=2008.0
TAG=galile
#beta1: cassini beta2: galile
BRANCH=cooker
INPUT=./input
PIECES=./pieces
CDSIZE=700M

# список для минимальной версии
# mini32
list 1 -k $PIECES/$VERSION/i586/media/media_info/pubkey_main \
    $INPUT/exclude \
    $INPUT/exclude-free \
    $INPUT/theme-free \
    $INPUT/basesystem_mini
rpmlist -b $PIECES/$VERSION/i586/media/main/release
    #$INPUT/main \

# mini 64
list 2 -k $PIECES/$VERSION/x86_64/media/media_info/pubkey_main \
    $INPUT/exclude \
    $INPUT/exclude-free \
    $INPUT/theme-free \
    $INPUT/basesystem_mini
rpmlist -b $PIECES/$VERSION/x86_64/media/main/release

###############################################
#                                             #
#       Мини диск двойной архитектуры         #
#                                             #
###############################################

# объем базового набора диска двойной архитектуры больше 700Мб потому, что мы использовали noarch-пакеты для обеих архитектур
disc 1 810M MDV2008-Mini "Mandriva Linux $VERSION Installer (Mini)" "2008-mini-disc" -v "Mandriva Linux - 2008 Spring (Mini)" -p Mandriva
dir main i586/media/main
dir main64 x86_64/media/main64
generic --synthesis main 1
generic --synthesis main64 2

advertising advertising/AD-ISV/IM_001-FON-UK.png \
    advertising/AD-ISV/IM_002-WENGOUK.png \
    advertising/AD-PWP-FREE-ONE/IM_01RANGE.png \
    advertising/AD-PWP-FREE-ONE/IM_02METISSE.png \
    advertising/AD-PWP-FREE-ONE/IM_03-3D.png \
    advertising/AD-PWP-FREE-ONE/IM_04virtualization.png \
    advertising/AD-PWP-FREE-ONE/IM_05AMAROK.png \
    advertising/AD-PWP-FREE-ONE/IM_06STUDIO.png

installation --askmedia --suppl --type basic --version $VERSION --branch $BRANCH --arch i586 --minor 0 --subversion 1 --product Download -o 50,3,0.1 -c pieces/cd/compssUsers.pl -r pieces/cd/rpmsrate -t $TAG --synthesis -l en,it,fr,de,es,pt,pt_BR -i $PIECES/$VERSION/i586/ -d 1/main 2/main2
installation --askmedia --suppl --type basic --version $VERSION --branch $BRANCH --arch x86_64 --minor 0 --subversion 1 --product Download -o 50,3,0.1 -c pieces/cd/compssUsers.pl -r pieces/cd/rpmsrate -t $TAG --synthesis -l en,it,fr,de,es,pt,pt_BR -i $PIECES/$VERSION/x86_64/ -d 1/main64

boot --isolinux --theme Mandriva-Free -b i586/isolinux/isolinux.bin -f --dest i586/isolinux --first $PIECES/$VERSION/i586/isolinux -f --dest x86_64/isolinux --first $PIECES/$VERSION/x86_64/isolinux -f --dest x86_64/install/images $PIECES/$VERSION/x86_64/install/images -f --dest i586/install/images $PIECES/$VERSION/i586/install/images
cp --first /usr/share/gfxboot/themes/Mandriva-Free/welcome.jpg i586/isolinux/
cp --first /usr/share/gfxboot/themes/Mandriva-Free/back.jpg i586/isolinux/
cp --first /usr/share/gfxboot/themes/Mandriva-Free/welcome.jpg x86_64/isolinux/
cp --first /usr/share/gfxboot/themes/Mandriva-Free/back.jpg x86_64/isolinux/

disc 2 700M MDV2008-Mini-CD2 "Mandriva Linux $VERSION Installer (Mini) CD2" "2008-mini-disc2" -v "Mandriva Linux - 2008 Spring (Mini)" -p Mandriva
dir main2 i586/media/main2
generic --synthesis main2 1
  • 2008.0 : имя диска
  • list 1 -k path_to_key/key rpm_list rpm_list2 : define list number X, and use this key for rpm checksig, and last arg are the list of the rpm
  • rpmlist -b path_to_RPM : path to RPMS, you can put more than one directory
  • rpmlist -s path_to_SRPM : path to SRPMS
  • disc X size cdrom_name "arch" "label" -v volume_name -p publisher : define disc number X, with a size (ie: 700m, 4.4g)
  • dir main i586/media/main : create an alias name main to the directory i586/media/main
  • generic --synthesis rpms X : create a synthesis hdlists number X for RPMS in i586/media/main. X is the number of the list.
  • installation --askmedia --suppl --type basic --version $VERSION --branch $BRANCH --arch i586 --minor 0 --subversion 1 --product Download -o 50,3,0.1 -c pieces/cd/compssUsers.pl -r pieces/cd/rpmsrate -t $TAG --synthesis -l en,it,fr,de,es,pt,pt_BR -i $PIECES/$VERSION/i586/ -d 1/main 2/main2
    • installation : this disc is an install CDROM
    • --branch cooker : branch could be cooker/2008.0/stable
    • --version : version of the release
    • --arch i586 : specify the architecture (i586 or x86_64)
    • --nosrcfit : do not stop if sources discs are full
    • --synthesis : synthesis will be present
    • -l fr,en : language on CD will be FR and EN
    • -t galile : tag added to the VERSION file
    • -d 1/main : Select rpms dir to take into account. 1 is a reference to Disc 1, and main a reference to the name of the directory on Disc 1
    • -d 1/main 2/main2 : specify to put main on first disc, and main2 on second disc. Note: hdlists and synthesis will be store on the first disc (in that case it's just an example, mini-cd is a one CD set)
    • -r rpmsrate : specify a custom rpmsrate
    • boot --isolinux -b isolinux/isolinux.bin -f --first pieces/install/iggi/x86/isolinux -f --dest install/images pieces/install/iggi/x86/install/images
    • cp /usr/share/gfxboot/themes/Mandriva-Free/welcome.jpg i586/isolinux/ : if you want to put files on disc, just copy them. You need to specify full name, cause it's not the cp of the system

input/basesystem_mini : list of RPM

List files allow to select which packages will be included into discs. The syntax is "[package] ,". Options are not mandatory. Available options:

  • regexp : the package is a regular expression
  • rate X : increase the packages rpmsrate value to X.
  • section : the given package is a section name of the rpmsrate
  • nodeps : do not handle these packages dependencies
  • noalternatives : do not use these packages to resolve dependencies in alternatives
  • force : put given packages before anything else on the discs (really a dangerous option... use it with care)
  • needed X : put given packages not after the Xth rpms directory
  • limit : only put given packages if there is space left at the end of build
  • nosrc : do not put sources of the given packages

Several options can be put, separated with "," but without spaces. Last release of MKCD tell if an error occur while reading the list. If you want to exclude an RPM, put it at the top of the configuration file. ie: if you want to exclude a specific kernel, because you use an update kernel, put the "exclude" before the "needed":

kernel-2.6.22.(1-6)mdv.* regexp,exclude
kernel-legacy-2.6.22.6mdv.* regexp,needed 1

This tip is available for all package: always put exclude rules at the top of configuration's file list. Please do not use force option, it's really a dangerous option, and it can lead you to write bad configuration file.

a typical input/basesystem_mini file

basesystem needed 1
kbd

# exclude old kernels
kernel-.*2.6.17.* regexp,exclude
kernel-2.6.19 regexp,exclude
kernel-2.6.20 regexp,exclude
kernel.*-2.4. regexp,exclude

# official kernel
kernel-2.6.22.(1-6)mdv.* regexp,exclude
kernel-legacy-2.6.22.6mdv.* regexp,needed 1

# we don't release contrib kernels, at all
kernel-.*tmb- regexp,exclude
kernel-.*uml- regexp,exclude
kernel-.*win4lin- regexp,exclude
kernel-.*desktop regexp,exclude
kernel-.*laptop regexp,exclude
kernel-.*vserver regexp,exclude
kernel-.*linus regexp,exclude
kernel-.*multimedia- regexp,exclude

mandriva-kde-icons exclude
mandriva-kde-config-common exclude
x11-server-xmetisse exclude
grub needed any

acpitool
acpi needed any
acpid needed any

mandi
mandi-ifw force
dhcp-client
mandriva-gfxboot-theme
alsa-utils
#alsa-plugins
screen
openssh-server
openssh-clients
#postfix
traceroute
wget
#lynx
lsof
tcpdump
smartmontools
gnupg
file
#xorg-x11-75dpi-fonts
xterm
monitor-edid
vim-enhanced
urpmi
locales-(en|fr|pt_BR) regexp,limit
iputils
lftp
cpio
msec
wireless-tools
cpufreqd
cpufreq
apmd
hotkeys
pcmciautils
dmraid
laptop-mode-tools
numlock
netprofile
nscd
sndconfig
fbset
vlan-utils
reiserfsprogs
xfsprogs
#quota
alsa-utils
aoss
task-x11
pptp-linux
ppp
nfs-utils-clients
nfs-utils
ppp-pppoe
ppp-pppoatm
autologin
ntp
shorewall
bind-utils
mkinitrd
irssi
iptables
perl-Net-DNS
nc
sndconfig
curl
usbutils
zcip
ibod
isdn4net
isdn-light
isdn4k-utils
eagle-usb
speedtouch
bpalogin
ndiswrapper
bcm43xx-fwcutter
synaptics
dkms-minimal
imwheel
prism2-utils
wpa_supplicant
linuxwacom

x11-driver-input needed any
x11-driver-video needed any
xfs
drakxtools
drakx-kbd-mouse-x11
drakx-net
drakx-net-text
drakconf
drakxtools-curses
rpmdrake
alsaconf

brltty needed any
lilo needed 1

jfsprogs needed any
hfsutils needed any
dosfstools needed any
e2fsprogs needed any
util-linux needed any
dmidecode
setarch
eject
ldetect
harddrake
udev
sharutils
urpmi
tmpwatch
gnupg
lvm2 needed any
mdadm needed any
ethtool needed any
rp-pppoe needed any
mozilla-firefox
mozilla-firefox-(en|fr|pt_BR) regexp,limit
icewm regexp,needed 1

sudo
usermode
gdm

Log directory

MKCD can create verbose log. We store them into log directory. It's very usefull to create verbose log because it explains how discs were created, and why it rejects some RPMS/SRPMS.-verbose X where X can be 1 (less) to 10 (more).

Another log options is --printdiscsfiles name. It's create a file wich contains all RPMS available on each disc, and why some RPMS where not present on the disc. Use the printediscfile.cd before the .log to debug an MKCD bug.

Pieces directory

This directory contains various subdirectory. One for each project (here 2008.0). In the 2008.0 directory, there is two subdir for each arch: x86_64 wich contains a mirror of 2008.0 repositery for x86_64 arch, and i586 for i586 arch.

build directory

It contains all needed to build ISO.

build
`-- 2008.0
    |-- 1
    |   `-- i586
    |       |-- COPYING
    |       |-- INSTALL.txt
    |       |-- LICENSE.txt
    |       |-- README.txt
    |       |-- VERSION
    |       |-- autorun.inf
    |       |-- default.xbe
    |       |-- doc
    |       |   `-- install
    |       |       |-- af
    |       |       |   |-- INSTALL.txt
    |       |       |   |-- LICENSE-APPS.txt
    |       |       |   |-- LICENSE.txt
    |       |       |   |-- README.txt
    |       |       |   |-- index.htm
    |       |       |   `-- install.htm
    |       |       |-- ar
...........
    |       |-- dosutils
    |       |   |-- COPYING
    |       |   |-- README
    |       |   |-- autorun.exe
    |       |   |-- autorun.ico
    |       |   |-- changes.txt
    |       |   |-- diskio.dll
    |       |   |-- fips.exe
    |       |   |-- gzip.exe
    |       |   |-- lang
    |       |   |   |-- autorun-10.1.jpg
    |       |   |   `-- autorun.conf
    |       |   |-- rawrite.exe
    |       |   |-- rawwrite.exe
    |       |   |-- rawwritewin.exe
    |       |   |-- rdev.exe
    |       |   |-- readme.txt
    |       |   `-- restorrb.exe
    |       |-- export
    |       |-- index.htm
    |       |-- install
    |       |   |-- extra
    |       |   |   `-- advertising
    |       |   |       |-- IM_001-FON-UK.pl
    |       |   |       |-- IM_001-FON-UK.png
    |       |   |       |-- IM_002-WENGOUK.pl
    |       |   |       |-- IM_002-WENGOUK.png
    |       |   |       |-- IM_01RANGE.pl
......
    |       |   |       `-- list
    |       |   |-- images
    |       |   |   |-- MD5SUM
    |       |   |   |-- all.img
    |       |   |   |-- alternatives
    |       |   |   |   |-- MD5SUM
    |       |   |   |   `-- all.img-2.6.22-4mdvlegacy
    |       |   |   |-- boot.iso
    |       |   |   `-- hd_grub.img
    |       |   `-- stage2
    |       |       |-- VERSION
    |       |       |-- mdkinst.sqfs
    |       |       `-- rescue.sqfs
    |       |-- lang
    |       |   |-- autorun-10.1.jpg
    |       |   `-- autorun.conf
    |       |-- linuxboot.cfg
    |       |-- media
    |       |   |-- main
    |       |   |   `-- media_info
    |       |   |       |-- MD5SUM
    |       |   |       `-- synthesis.hdlist.cz
    |       |   |-- media_info
    |       |       |-- MD5SUM
    |       |       |-- compss
    |       |       |-- compssUsers.pl
    |       |       |-- depslist.ordered
    |       |       |-- file-deps
    |       |       |-- hdlist1.cz
    |       |       |-- hdlist2.cz
    |       |       |-- hdlists
    |       |       |-- media.cfg
    |       |       |-- provides
    |       |       |-- pubkey1
    |       |       |-- pubkey2
    |       |       |-- rpmsrate
    |       |       |-- synthesis.hdlist1.cz
    |       |       `-- synthesis.hdlist2.cz
    |       |            `-- synthesis.hdlist.cz
    |       |-- misc
    |       |   |-- ChangeLog.bz2
    |       |   |-- README
    |       |   |-- auto
    |       |   |   `-- URPM
    |       |   |       `-- URPM.so
    |       |   |-- autorun.tar.gz
    |       |   |-- bin
    |       |   |   `-- mkisofs
    |       |   |-- drakx-in-chroot
    |       |   |-- gendistrib
    |       |   |-- mdkinst_stage2_tool
    |       |   |-- packdrake
    |       |   |-- packdrake.pm
    |       |   `-- rpm2header
    |       |-- pkg-2008.0-cassini.idx
    |       |-- product.id
    |       `-- release-notes.txt
    |-- README
    `-- first
        `-- 1
            `-- i586
                `-- isolinux
                    |-- advanced.msg
                    |-- alt0
                    |   |-- all.rdz
                    |   `-- vmlinuz
                    |-- alt1
                    |   |-- all.rdz
                    |   `-- vmlinuz
                    |-- bg.hlp
                    |-- bootlogo
                    |-- help.msg
                    |-- isolinux.bin
                    |-- isolinux.cfg
                    |-- langs
                    |-- mandriva.pcx
                    |-- memtest
                    |-- pt.hlp
                    |-- pt_BR.hlp
....

Iso directory

It contains all ISO.

iso/
`-- 2008.0
    |-- 1-2008.0.i586.idx
    |-- 1-2008.0.iso

Advertising directory

In this directory sore all adverts.

advertising
|-- AD-DISCOVERY
|   |-- IM_01RANGE.png
|   |-- IM_02METISSE.png
|   |-- IM_03-3D.png
|   |-- IM_04virtualization.png
|   `-- IM_05AMAROK.png
|-- AD-ISV
|   |-- IM_001-FON-FR.png
|   |-- IM_001-FON-UK.png
|   |-- IM_002-WENGOFR.png
|   `-- IM_002-WENGOUK.png
|-- AD-PWP+
|   |-- IM_01RANGE.png
|   |-- IM_02METISSE.png
|   |-- IM_03-3D.png
|   |-- IM_04virtualization.png
|   |-- IM_05ERP.png
|   `-- IM_06CRM.png
`-- AD-PWP-FREE-ONE
    |-- IM_01RANGE.png
    |-- IM_02METISSE.png
    |-- IM_03-3D.png
    |-- IM_04virtualization.png
    |-- IM_05AMAROK.png
    `-- IM_06STUDIO.png

MKCD help

An MKCD help exists for each fonctions. Use them if you want more explanation about an MKCD's fonction. for example:

mkcd -h installtion
mkcd -h generic
mkcd -h boot
mkcd -h disc
mkcd -h list
mkcd -h dir
mkcd -h rpmlist

Build script

A simple script to build ISO. MKCD options used are:

--printdiscsfiles name_fil : print the contains of each disc into name_fil
--noiso : do not create iso images of the discs
--verbose X : print more messages (the higher the more, 5 is the higher)
-s input/$NAME/$NAME.conf : configuration file
-m 1,2 : build the disc 1 and 2 (define in MKCD configuration file
-l : use it if you want to rebuild a Disc, leave untouched others (Advanced option)
#!/bin/bash

NAME=iggi
DATE=`date "+20%y%m%d-%H%M"`

clean_old_data() {
    echo "- Cleaning old builds"
# comment this if you dont want to erase old mkcd_build_list
#rm -rf ~/Build/tmp/.mkcd_build_hdlist
#rm -rf tmp/*

    rm -rf build/$NAME
    rm -rf log/*
    rm -rf iso/$NAME/1*
}

build_cdrom() {
    echo "- Building CD"
    mkcd --printdiscsfiles log/printdiscfiles1-$NAME --noiso --verbose 5 -f -s input/$NAME/$NAME.conf -m 1 >log/$NAME-1.log 2>&1
}

list_cdrom() {
    echo "- list RPM on CD"
    mkcd --testlist input/$NAME/$NAME.conf 1 input/$NAME/x86/rpmsrate --printdiscsfiles log/printdiscfiles-$NAME
}


build_cdrom_iso() {
    echo "- Building CD + ISO"
    mkcd --printdiscsfiles log/printdiscfiles1-$NAME --cpu 2 --verbose 9 -f -s input/$NAME/$NAME.conf -m 1 >log/$NAME-1.log 2>&1
    mv iso/$NAME/1-$NAME.iso iso/$NAME/1-$NAME-$DATE.iso
    create_md5sum
}


create_md5sum() {
    echo "- Creating md5sum"
    md5sum iso/$NAME/*.iso > iso/$NAME/$NAME-$DATE.md5sum
}

# MAIN
clean_old_data
#list_cdrom
#build_cdrom
build_cdrom_iso