Различия

Показаны различия между двумя версиями страницы.


wiki:articles:create_livecd [14/09/2015 13:35] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +^   **Создание livecd с существующей системы**   ^
  
 +**Автор:** [[http://slackware.su/forum/index.php?action=profile;u=2865|Pasha]]\\
 +**Дата написания:** //Сентябрь 2015 г.//
 +
 +
 +<note tip>
 +  *в статье описан один из способов создания livecd со своими настройками
 +  *aufs собиралась модулем ядра
 +  *все действия производились на [[https://ru.wikipedia.org/wiki/Salix_OS|Salix 14.1]] и от пользователя root
 +</note>
 +<note tip>
 +В созданном livecd может использоваться [[https://ru.wikipedia.org/wiki/ZRam|zram]] для swap и он используется 
 +если модуль zram установлен в системе, с которой создается livecd. Но, к сожалению, в Salix 14.1 этот модуль по умолчанию не собран (в Salix 14.0 собран). Я пытался собрать его и он собирается, но не загружается в ядро ругаясь в dmesg:
 +<code>
 +[ 1291.921639] zram: Unknown symbol zs_unmap_object (err 0)
 +[ 1291.921665] zram: Unknown symbol zs_create_pool (err 0)
 +[ 1291.921675] zram: Unknown symbol zs_free (err 0)
 +[ 1291.921684] zram: Unknown symbol zs_malloc (err 0)
 +[ 1291.921688] zram: Unknown symbol zs_get_total_size_bytes (err 0)
 +[ 1291.921693] zram: Unknown symbol zs_destroy_pool (err 0)
 +[ 1291.921699] zram: Unknown symbol zs_map_object (err 0)
 +</code>
 +Беглый поиск в google не принес результатов и я решил "забить" т.к. оперативной памяти для моих нужд вполне достаточно.
 +</note>
 +**Написано по:**\\
 +  *[[http://www.linux-live.org/|скрипты для создания livecd]]
 +  *[[http://aufs.sourceforge.net/|файловая система для livecd]]
 +
 +======Общая картина состоит из двух этапов:=======
 +=====1-ый этап:=====
 +  - Создаем виртуальную машину, на которой собираем ядро с необходимыми патчами.
 +  - Собираем модуль ядра и утилиты к нему.
 +  - Перегружаемся с новым ядром, пробуем загрузить собранный модуль.
 +  - Если модуль загрузился, то собираем пакеты (по слакбилдам) с новым ядром, модулем, утилитами и заголовками ядра.
 +=====2-ой этап:=====
 +  - Создаем виртуальную машину и устанавливаем на нее минимальную установку Salix. Можно и не минимальную, главное чтобы Salix была той же версии, на которой проходил первый этап.
 +  - Устанавливаем созданные нами пакеты и грузимся с новым ядром.
 +  - Пробуем загрузить установленный нами модуль.
 +  - Если модуль загрузился, то настраиваем виртуалку как нам надо, т.е. ставим/удаляем нужный софт, производим настройку дистрибутива.
 +  - Создаем livecd с настроенной виртуалки.
 +
 +<note tip>
 +Можно обойтись и без второй виртуалки и создать livecd с виртуалки, на которой собирали ядро и модуль, предварительно удалив исходники ядра для уменьшения размера и каждый раз, когда понадобится новый livecd патчить ядро и собирать модуль.
 +Но, как мне кажется, удобней создать готовые пакеты с ядром, модулем, утилитами, заголовками ядра и накатывать их на свежую установку любимого дистрибутива Slackware (в данном случае Salix).
 +</note>
 +
 +======Подробное описание каждого этапа======
 +=====1-ый этап:=====
 +На виртуалку ставим Salix 14.1 с набором пакетов CORE\\
 +заходим на нее и обновляем список пакетов
 +<code>
 +# cd ~
 +# slapt-get --update
 +</code>
 +ставим исходники ядра
 +<code>
 +# slapt-get -i kernel-source
 +</code>
 +ставим пакет bc (нужен для сборки ядра (не уверен), но даже если и не нужен, то лишним не будет)
 +<code>
 +# slapt-get -i bc
 +</code>
 +качаем исходники модуля aufs
 +<code>
 +# git clone git://git.code.sf.net/p/aufs/aufs3-standalone
 +# cd ./aufs3-standalone/
 +</code>
 +переключаемся на нужную нам ветку
 +<note tip>
 +В README по выбору нужной ветки сказано, что нужно переключаться на ветку соответсвующую версии ядра. У нас версия ядра 3.10.17, веток для нее две: origin/aufs3.10 и origin/aufs3.10.x\\
 +Казалось бы, нам нужна ветка origin/aufs3.10.x , но патчи из этой ветки не накладываются на ядро, поэтому мы берем ветку origin/aufs3.10, патчи из которой ложатся на наше ядро без проблем.
 +</note>
 +<code>
 +# git checkout origin/aufs3.10
 +</code>
 +копируем патчи для ядра
 +<code>
 +# cp ./aufs3-base.patch /usr/src/linux/
 +# cp ./aufs3-mmap.patch /usr/src/linux/
 +# cp ./aufs3-standalone.patch /usr/src/linux/
 +</code>
 +переходим в каталог с исходниками ядра и накатываем патчи
 +<code>
 +# cd /usr/src/linux/
 +# patch -p1 < ./aufs3-base.patch
 +# patch -p1 < ./aufs3-mmap.patch
 +# patch -p1 < ./aufs3-standalone.patch
 +</code>
 +копируем конфиг ядра (патчи, что мы накатили выше, не трогают файл .config)
 +<code>
 +# cat /boot/config >/usr/src/linux/.config
 +</code>
 +собираем ядро
 +<code>
 +# make
 +</code>
 +копируем новое ядро, System.map и .config в /boot
 +<code>
 +# 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
 +</code>
 +удаляем старые ссылки и создаем новые
 +<code>
 +# 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
 +</code>
 +перезаписываем загрузчик
 +<code>
 +# lilo
 +</code>
 +ставим заголовки ядра и перегружаемся с новым ядром
 +<code>
 +# make headers_install
 +# reboot
 +</code>
 +собираем модуль ядра aufs.ko
 +<code>
 +# cd ~/aufs3-standalone/
 +# make
 +# make install
 +</code>
 +<note tip>
 +По умолчанию модуль aufs.ko ставится в /lib/modules/3.10.17-smp/extra/aufs.ko, но скрипты для сборки livecd ищут его в /lib/modules/3.10.17-smp/kernel/fs/aufs, поэтому если вы планируете делать livecd с этой виртуалки, то надо положить модуль в нужное место. Если же вы не планируете делать livecd с этой виртуалки, то делать следующий шаг не обязательно.
 +<code>
 +# 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
 +</code>
 +</note>
 +проверяем загружается ли модуль
 +<code>
 +# modprobe aufs
 +# lsmod | grep aufs
 +aufs                  241031 
 +</code>
 +модуль загружен и теперь собираем утилиты для aufs\\
 +качаем исходники утилит
 +<code>
 +# cd ~
 +# git clone git://git.code.sf.net/p/aufs/aufs-util
 +# cd ./aufs-util/
 +</code>
 +переключаемся на нужную нам ветку
 +<code>
 +# git checkout origin/aufs3.9
 +</code>
 +собираем утилиты
 +<code>
 +# make CPPFLAGS="-I /usr/src/linux/usr/include -I /root/aufs3-standalone/usr/include"
 +# make install
 +</code>
 +<note tip>
 +На этом, подготовка к созданию livecd закончена и если вы планируете делать livecd с этого дистрибутива, то можно настраивать дистрибутив как вам нужно и затем переходить к созданию livecd из второго этапа.
 +</note>
 +===Собирем готовые пакеты с новым ядром, модулем, утилитами и заголовками ядра===
 +==Собираем пакет с ядром==
 +----
 +<code>
 +# cd ~
 +# mkdir kernel-aufs-huge-smp
 +# cd ./kernel-aufs-huge-smp/
 +# mkdir kernel-aufs-huge-smp-3.10.17-smp
 +</code>
 +скопируем ядро
 +<code>
 +# 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/
 +</code>
 +создадим файл ./doinst.sh
 +<code>
 +( 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 )
 +</code>
 +создадим файл ./slack-desc 
 +<code>
 +# 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: 
 +</code>
 +создадим слакбилд ./kernel-aufs-huge-smp.SlackBuild (не забываем сделать его исполняемым)
 +<code bash>
 +#!/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}
 +</code>
 +собираем пакет
 +<code>
 +# ./kernel-aufs-huge-smp.SlackBuild
 +</code>
 +==Собираем пакет с заголовками ядра==
 +<code>
 +# cd ~
 +# mkdir kernel-aufs-headers
 +# cd ./kernel-aufs-headers/
 +</code>
 +создадим файл ./doinst.sh
 +<code>
 +( cd usr/include ; rm -rf asm )
 +( cd usr/include ; ln -sf asm-x86 asm )
 +</code>
 +создадим файл ./slack-desc
 +<code>
 +# 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: 
 +</code>
 +создадим слакбилд ./kernel-aufs-headers.SlackBuild (не забываем сделать его исполняемым)
 +<note tip>
 +При установке заголовков ядра "make headers_install" папка "/usr/include/asm-x86" не создается, но создается папка "/usr/include/asm", а в slackware при установки пакета kernel-headers-3.10.17_smp-x86-3.txz папка "/usr/include/asm" является ссылкой на "/usr/include/asm-x86" и поэтому в слакбилде папка "/usr/include/asm" переименовывается в "/usr/include/asm-x86" 
 +</note>
 +<code bash>
 +#!/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}
 +</code>
 +собираем пакет
 +<code>
 +# ./kernel-aufs-headers.SlackBuild
 +</code>
 +<note tip>
 +осталось собрать два пакета :-)
 +</note>
 +==Cобираем модуль ядра в пакет==
 +<code>
 +# cd ~
 +# mkdir aufs3-standalone_SlackBuild
 +# cd ./aufs3-standalone_SlackBuild/
 +</code>
 +создадим папку для модуля и скопируем нужные файлы
 +<code>
 +# 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/
 +</code>
 +создадим файл ./slack-desc
 +<code>
 +# 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: 
 +</code>
 +создадим слакбилд ./aufs3-standalone.SlackBuild (не забываем сделать его исполняемым)
 +<code bash>
 +#!/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}
 +</code>
 +собираем пакет
 +<code>
 +# ./aufs3-standalone.SlackBuild
 +</code>
 +==собираем утилиты для модуля в пакет==
 +<code>
 +# cd ~
 +# mkdir aufs-util_SlackBuild
 +# cd ./aufs-util_SlackBuild/
 +</code>
 +создадим файл ./slack-desc
 +<code>
 +# 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: 
 +</code>
 +создадим слакбилд ./aufs-util.SlackBuild (не забываем сделать его исполняемым)
 +<code bash>
 +#!/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}
 +</code>
 +собираем пакет
 +<code>
 +# ./aufs-util.SlackBuild
 +</code>
 +\\
 +В результате сборки у нас появится 4 пакета, которые мы и будем устанавливать на втором этапе.
 +<code>
 +# 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
 +</code>
 +=====2-ой этап:=====
 +На новую виртуалку ставим Salix 14.1 с набором пакетов CORE и уcтанавливаем созданные нами пакеты
 +<code>
 +# installpkg aufs-util-20141208-i486-1_krpsh.tgz
 +# installpkg aufs3-standalone-3.10-20141215-i486-1_krpsh.tgz
 +# installpkg kernel-aufs-headers-3.10.17-i486-1_krpsh.tgz
 +# installpkg kernel-aufs-huge-smp-3.10.17-smp-i486-1_krpsh.tgz
 +</code>
 +создаем modules.dep
 +<code>
 +# depmod -a
 +</code>
 +обновляем загрузчик
 +<code>
 +# lilo
 +</code>
 +перегружаемся с новым ядром и пробуем загрузить модуль
 +<code>
 +# modprobe aufs
 +# lsmod | grep aufs
 +aufs                  241031 
 +</code>
 +Если модуль загрузился, то настраиваем дистрибутив как надо, т. е. ставим/удаляем нужный софт, производим настройку конфигов.\\
 +Как только все настроили и проверили **создаем livecd:**\\
 +\\
 +установим зависимость скриптов (squashfs-tools)
 +<code>
 +# wget http://slackonly.com/pub/packages/14.1-x86/system/squashfs-tools/squashfs-tools-4.2-i486-1_slack.txz
 +# installpkg squashfs-tools-4.2-i486-1_slack.txz
 +</code>
 +качаем скрипты для сбрки livecd
 +<code>
 +# cd /tmp
 +# wget -O Linux_Live_Kit_v1_8.tar.gz https://github.com/Tomas-M/linux-live/tarball/v1.8
 +# tar -xzvf ./Linux_Live_Kit_v1_8.tar.gz
 +# cd ./Tomas-M-linux-live-783a0bb/
 +</code>
 +<note tip>
 +На скрипт ./initramfs/initramfs_create нужно наложить патч, который учитывает, что aufs собран модулем. Странно, что исходный скрипт этого не делает.
 +</note>
 +создадим файл ./initramfs/add_mod_aufs.patch
 +<code diff>
 +--- ./a/initramfs_create 2015-09-04 09:19:09.200234897 +0300
 ++++ ./b/initramfs_create 2015-09-03 14:04:39.000000000 +0300
 +@@ -68,6 +68,9 @@
 + 
 + # TODO: add all comon filesystems which are NOT compiled in kernel already
 + copy_including_deps /$LMK/kernel/fs/squashfs
 ++###### krpsh ###########################
 ++copy_including_deps /$LMK/kernel/fs/aufs
 ++########################################
 + copy_including_deps /$LMK/kernel/drivers/staging/zsmalloc # needed by zram
 + copy_including_deps /$LMK/kernel/drivers/staging/zram
 + copy_including_deps /$LMK/kernel/drivers/block/loop.*
 +</code>
 +наложим патч
 +<code>
 +# cd ./initramfs/
 +# patch -p2 < ./add_mod_aufs.patch
 +# cd ..
 +</code>
 +создадим livecd
 +<code>
 +# ./build
 +</code>
 +в результате у нас создадутся два файла
 +<code>
 +# ls -lh /tmp/ | grep mylinux
 +-rw-r--r-- 1 root root 256M Sep  7 15:44 mylinux-i686.iso
 +-rw-r--r-- 1 root root 256M Sep  7 15:44 mylinux-i686.zip
 +</code>
 +mylinux-i686.iso - для записи на cd диск\\
 +mylinux-i686.zip - для создания загрузочной флешки (не пробовал)\\
 +\\
 +степень сжатия очень хорошая\\
 +исходный размер системы, с которой делался licecd
 +<code>
 +# df -h
 +Filesystem      Size  Used Avail Use% Mounted on
 +/dev/sda1       4.4G  1.1G  3.1G  25% /
 +tmpfs           241M      241M   0% /dev/shm
 +</code>
 +т.е. исходный размер 1.1G , а livecd получился 256M
 +
 +======Заключение======
 +Вы можете подумать, а для чего создавать свой livecd, когда есть куча готовых "живых" дистрибутивов под любые нужды. Причины могут быть самыми разными: от "мне так хочется" до "есть свободное время".
 +Я же, использую созданный таким образом livecd на бездисковом серваке, который раздает по iscsi жесткие диски для камер наблюдения.\\
 +\\
 +При загрузки с этого livecd можно устанавливать пакеты и менять конфиги, но как вы понимаете, все изменения сохраняются до первой перезагрузки.
 +И поэтому, например для конфигов, можно использовать флешку, поскольку конфиги в основном читаются в момент старта программы, то флешка будет почти вечной при условии не частого изменения конфигов и перезагрузки сервака 1-2 раза в год.
Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:create_livecd (generated for current page)