Это старая версия документа!
Содержание
Создание livecd с существующей системы |
---|
- в статье описан один из способов создания livecd со своими настройками
- aufs собиралась модулем ядра
- все действия производились на Salix 14.1 и от пользователя root
Написано по:
Общая картина состоит из двух этапов:
1-ый этап:
- Создаем виртуальную машину, на которой собираем ядро с необходимыми патчами.
- Собираем модуль ядра и утилиты к нему.
- Перегружаемся с новым ядром, пробуем загрузить собранный молуль.
- Если модуль загрузился, то собираем пакеты (по слакбилдам) с новым ядром, модулем, утилитами и заголовками ядра.
2-ой этап:
- Создаем виртуальную машину и устанавливаем на нее минимальную установку Salix. Можно и не минимальную, главное чтобы Salix была той же версии, на которой проходил первый этап.
- Устанавливаем созданные нами пакеты и грузимся с новым ядром.
- Пробуем загрузить установленный нами модуль.
- Если модуль загрузился, то настраиваем виртуалку как нам надо, т.е. ставим/удаляем нужный софт, производим настройку дистрибутива.
- Создаем livecd с настроенной виртуалки.
Подробное описание каждого этапа
1-ый этап:
На виртуалку ставим Salix 14.1 с набором пакетов CORE
заходим на нее и обновляем список пакетов
# cd ~ # slapt-get --update
ставим исходники ядра
# slapt-get -i kernel-source
ставим пакет bc (нужен для сборки ядра (не уверен), но даже если и не нужен, то лишним не будет)
# slapt-get -i bc
качаем исходники модуля aufs
# git clone git://git.code.sf.net/p/aufs/aufs3-standalone # cd ./aufs3-standalone/
переключаемся на нужную нам ветку
Казалось бы, нам нужна ветка origin/aufs3.10.x , но патчи из этой ветки не накладываются на ядро, поэтому мы берем ветку origin/aufs3.10, патчи из которой лажатся на наше ядро без проблем.
# git checkout origin/aufs3.10
копируем патчи для ядра
# cp ./aufs3-base.patch /usr/src/linux/ # cp ./aufs3-mmap.patch /usr/src/linux/ # cp ./aufs3-standalone.patch /usr/src/linux/
переходим в каталог с исходниками ядра и накатываем патчи
# cd /usr/src/linux/ # patch -p1 < ./aufs3-base.patch # patch -p1 < ./aufs3-mmap.patch # patch -p1 < ./aufs3-standalone.patch
копируем конфиг ядра (патчи, что мы накатили выше, не трогают файл .config)
# cat /boot/config >/usr/src/linux/.config
собираем ядро
# make
копируем новое ядро, System.map и .config в /boot
# cp ./arch/x86/boot/bzImage /boot/vmlinuz-aufs-huge-smp-3.10.17-smp # cp ./System.map /boot/System.map-aufs-huge-smp-3.10.17-smp # cp ./.config /boot/config-aufs-huge-smp-3.10.17-smp
удаляем старые ссылки и создаем новые
# rm /boot/vmlinuz # rm /boot/System.map # rm /boot/config # ln -s /boot/vmlinuz-aufs-huge-smp-3.10.17-smp /boot/vmlinuz # ln -s /boot/System.map-aufs-huge-smp-3.10.17-smp /boot/System.map # ln -s /boot/config-aufs-huge-smp-3.10.17-smp /boot/config
перезаписываем загрузчик
# lilo
ставим заголовки ядра и перегружаемся с новым ядром
# make headers_install # reboot
собираем модуль ядра aufs.ko
# cd ~/aufs3-standalone/ # make # make install
# mkdir -p /lib/modules/3.10.17-smp/kernel/fs/aufs # cp ./aufs.ko /lib/modules/3.10.17-smp/kernel/fs/aufs/ # rm /lib/modules/3.10.17-smp/extra/aufs.ko # depmod -a
проверяем загружается ли модуль
# modprobe aufs # lsmod | grep aufs aufs 241031 0
модуль загружен и теперь собираем утилиты для aufs
качаем исходники утилит
# cd ~ # git clone git://git.code.sf.net/p/aufs/aufs-util # cd ./aufs-util/
переключаемся на нужную нам ветку
# git checkout origin/aufs3.9
собираем утилиты
# make CPPFLAGS="-I /usr/src/linux/usr/include -I /root/aufs3-standalone/usr/include" # make install
Собирем готовые пакеты с новым ядром, модулем, утилитами и заголовками ядра
Собираем пакет с ядром
# cd ~ # mkdir kernel-aufs-huge-smp # cd ./kernel-aufs-huge-smp/ # mkdir kernel-aufs-huge-smp-3.10.17-smp
скопируем ядро
# cp /boot/vmlinuz-aufs-huge-smp-3.10.17-smp ./kernel-aufs-huge-smp-3.10.17-smp/ # cp /boot/System.map-aufs-huge-smp-3.10.17-smp ./kernel-aufs-huge-smp-3.10.17-smp/ # cp /boot/config-aufs-huge-smp-3.10.17-smp ./kernel-aufs-huge-smp-3.10.17-smp/
создадим файл ./doinst.sh
( cd boot ; rm -rf config ) ( cd boot ; ln -sf config-aufs-huge-smp-3.10.17-smp config ) ( cd boot ; rm -rf System.map ) ( cd boot ; ln -sf System.map-aufs-huge-smp-3.10.17-smp System.map ) ( cd boot ; rm -rf vmlinuz ) ( cd boot ; ln -sf vmlinuz-aufs-huge-smp-3.10.17-smp vmlinuz )
создадим файл ./slack-desc
# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' # on the right side marks the last column you can put a character in. You must # make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| kernel-aufs-huge-smp: kernel-aufs-huge-smp (aufs - http://aufs.sourceforge.net/) kernel-aufs-huge-smp: kernel-aufs-huge-smp: This is a Linux kernel with built-in support for most disk kernel-aufs-huge-smp: controllers. If you're looking for a more stripped down kernel kernel-aufs-huge-smp: (this one contains everything but the kitchen sink ;-), then install kernel-aufs-huge-smp: the kernel-generic-smp in the /boot directory along with an initrd to kernel-aufs-huge-smp: load support for your boot device and filesystem. For instructions kernel-aufs-huge-smp: on the initrd, see README.initrd in the /boot directory. kernel-aufs-huge-smp: kernel-aufs-huge-smp: SMP is "Symmetric multiprocessing", or multiple CPU/core support. kernel-aufs-huge-smp:
создадим слакбилд ./kernel-aufs-huge-smp.SlackBuild (не забываем сделать его исполняемым)
#!/bin/sh PRGNAM=kernel-aufs-huge-smp VERSION=${VERSION:-3.10.17-smp} BUILD=${BUILD:-1} TAG=${TAG:-_krpsh} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/krpsh} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT mkdir -p $PKG/boot cp -a $CWD/$PRGNAM-$VERSION/System.map-aufs-huge-smp-3.10.17-smp $PKG/boot cp -a $CWD/$PRGNAM-$VERSION/config-aufs-huge-smp-3.10.17-smp $PKG/boot cp -a $CWD/$PRGNAM-$VERSION/vmlinuz-aufs-huge-smp-3.10.17-smp $PKG/boot cd $PKG chown -R root:root . chmod -R u+w,go+r-w,a-s . # Add docs to the proper location mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION #cp -a README $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh #cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
собираем пакет
# ./kernel-aufs-huge-smp.SlackBuild
Собираем пакет с заголовками ядра
# cd ~ # mkdir kernel-aufs-headers # cd ./kernel-aufs-headers/
создадим файл ./doinst.sh
( cd usr/include ; rm -rf asm ) ( cd usr/include ; ln -sf asm-x86 asm )
создадим файл ./slack-desc
# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' # on the right side marks the last column you can put a character in. You must # make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| kernel-aufs-headers: kernel-aufs-headers (aufs - http://aufs.sourceforge.net/) kernel-aufs-headers: kernel-aufs-headers: These are the include files from the Linux kernel. kernel-aufs-headers: kernel-aufs-headers: You'll need these to compile most system software for Linux. kernel-aufs-headers: kernel-aufs-headers: kernel-aufs-headers: kernel-aufs-headers: kernel-aufs-headers: kernel-aufs-headers:
создадим слакбилд ./kernel-aufs-headers.SlackBuild (не забываем сделать его исполняемым)
#!/bin/sh #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LINUXSRC=/usr/src/linux #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PRGNAM=kernel-aufs-headers VERSION=${VERSION:-3.10.17} BUILD=${BUILD:-1} TAG=${TAG:-_krpsh} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/krpsh} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $LINUXSRC mkdir -p $PKG/usr make headers_install INSTALL_HDR_PATH=$PKG/usr ########################################## mv $PKG/usr/include/asm $PKG/usr/include/asm-x86 ########################################## # Add docs to the proper location mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION #cp -a COPYING README sample $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
собираем пакет
# ./kernel-aufs-headers.SlackBuild
Cобираем модуль ядра в пакет
# cd ~ # mkdir aufs3-standalone_SlackBuild # cd ./aufs3-standalone_SlackBuild/
создадим папку для модуля и скопируем нужные файлы
# mkdir aufs3-standalone-3.10-20141215 # cp -a ~/aufs3-standalone/Documentation ./aufs3-standalone-3.10-20141215/ # cp -a ~/aufs3-standalone/COPYING ./aufs3-standalone-3.10-20141215/ # cp -a ./aufs3-standalone-3.10-20141215/Documentation/filesystems/aufs/README ./aufs3-standalone-3.10-20141215/ # cp -a ~/aufs3-standalone/aufs.ko ./aufs3-standalone-3.10-20141215/ # cp -a ~/aufs3-standalone/aufs3-base.patch ./aufs3-standalone-3.10-20141215/ # cp -a ~/aufs3-standalone/aufs3-mmap.patch ./aufs3-standalone-3.10-20141215/ # cp -a ~/aufs3-standalone/aufs3-standalone.patch ./aufs3-standalone-3.10-20141215/
создадим файл ./slack-desc
# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' # on the right side marks the last column you can put a character in. You must # make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| aufs3-standalone: kernel module aufs - http://aufs.sourceforge.net/ aufs3-standalone: aufs3-standalone: advanced multi layered unification filesystem aufs3-standalone: http://aufs.sf.net aufs3-standalone: Junjiro R. Okajima aufs3-standalone: aufs3-standalone: aufs3-standalone: aufs3-standalone: aufs3-standalone: aufs3-standalone:
создадим слакбилд ./aufs3-standalone.SlackBuild (не забываем сделать его исполняемым)
#!/bin/sh PRGNAM=aufs3-standalone VERSION=${VERSION:-3.10-20141215} BUILD=${BUILD:-1} TAG=${TAG:-_krpsh} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/krpsh} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT mkdir -p $PKG/lib/modules/$(uname -r)/kernel/fs/aufs cp -a $CWD/$PRGNAM-$VERSION/aufs.ko $PKG/lib/modules/$(uname -r)/kernel/fs/aufs cd $PKG chown -R root:root . chmod -R u+w,go+r-w,a-s . # Add docs to the proper location mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cd $CWD/$PRGNAM-$VERSION cp -a COPYING Documentation README aufs3-base.patch aufs3-mmap.patch aufs3-standalone.patch $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc #cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
собираем пакет
# ./aufs3-standalone.SlackBuild
собираем утилиты для модуля в пакет
# cd ~ # mkdir aufs-util_SlackBuild # cd ./aufs-util_SlackBuild/
создадим файл ./slack-desc
# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' # on the right side marks the last column you can put a character in. You must # make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| aufs-util: util for kernel module aufs - http://aufs.sourceforge.net/ aufs-util: aufs-util: advanced multi layered unification filesystem aufs-util: http://aufs.sf.net aufs-util: Junjiro R. Okajima aufs-util: aufs-util: aufs-util: aufs-util: aufs-util: aufs-util:
создадим слакбилд ./aufs-util.SlackBuild (не забываем сделать его исполняемым)
#!/bin/sh #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MAKEDIR=/root/aufs-util #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PRGNAM=aufs-util VERSION=${VERSION:-20141208} BUILD=${BUILD:-1} TAG=${TAG:-_krpsh} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi CWD=$(pwd) TMP=${TMP:-/tmp/krpsh} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $MAKEDIR make install DESTDIR=$PKG # Add docs to the proper location mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a COPYING README sample $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc #cat $CWD/doinst.sh > $PKG/install/doinst.sh ###--------gz man page--------- cd $PKG/usr/share/man/man5 for file in * do gzip ./$file done cd $PKG/usr/share/man/man8 for file in * do gzip ./$file done ###---------------------------- cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
собираем пакет
# ./aufs-util.SlackBuild
В результате сборки у нас появится 4 пакета, которые мы и будем устанавливать на втором этапе.
# ls -l /tmp/ | grep aufs -rw-r--r-- 1 root root 1669979 Sep 7 14:13 aufs-util-20141208-i486-1_krpsh.tgz -rw-r--r-- 1 root root 181737 Sep 7 14:08 aufs3-standalone-3.10-20141215-i486-1_krpsh.tgz -rw-r--r-- 1 root root 899340 Sep 7 13:51 kernel-aufs-headers-3.10.17-i486-1_krpsh.tgz -rw-r--r-- 1 root root 6972133 Sep 7 13:27 kernel-aufs-huge-smp-3.10.17-smp-i486-1_krpsh.tgz