Конечно очень радостно, что существуют такие инструменты как Reconstructor и Ubuntu Customization Kit, однако они всё выполняют в автоматическом режиме и не очень-то подходят для тонкой настройки под себя. В этой статье я постараюсь рассказать как можно руками сделать всё то, что делают вышеназванные инструменты и как изменить многие недоступные им параметры.

Фронт работ

Для создания Ubuntu Custom Live CD нужно продумать три важных момента: 1) В какой системе мы будем строить наш диск. Надеюсь, все Вы прекрасно понимаете, что мы ведем речь про компьютер под управлением Ubuntu. Если Ubuntu у Вас не установлена, то Вы можете поставить ее на виртуальную машину и там уже строить образ диска. Помимо этого, нам нужно поставить следующие пакеты для создания живого диска: SYSLINUX, Squashfs-tools, genisoimage Первый пакет — загрузчик ядра, второй — файловая система SquashFS, а третий — создатель образа диска.

2) Папка для образа диска. Образ диска — это то, что будет записано на CD/DVD/BluRay/USB (в зависимости от того кому что нравится). Просто создайте отдельную папку для образа диска. Для образа нужно скопировать: - Загрузчик ISOLinux - Ядро с initrd и изолированной системой - Дополнительные файлы для указания времени загрузки и других важных (и не очень) параметров

Папка для образа диска создается отдельно от корня будущей изолированной системы.

3) Изолированная система

Изолированная система — это та система, которая будет загружена в LiveCD. Ей не нужны ни ядро, ни загрузчик, если Вы собираетесь устанавливать ОС с помощью установщика Ubiquity. Для того чтобы провести автоматическое определение и настройку оборудования, потребуется живая система под символичным названием Casper. Ее нужно установить в initrd, а ядро Casper скопировать в папку образа диска.

Изолированная система хранится и выполняется в виде файла, сжатого в файл SquashFS. На данный момент ИС будет сохранена в виде папки в хост-системе.

Таким образом, создание ISO образа сводится к - созданию изолированной системы и установки в ней пакетов с ПО; - сжатию изолированной системы в файл; - созданию и конфигурированию образа диска, состоящего из загрузчика ISOLinux, ядра системы, сжатого файла файловой системы (простите за тавтологию) и многого другого; - записи ISO на диск и проверки его работы.

Создание изолированной системы

Для начала, установим debootstrap в хост-системе с помощью командной строки, после чего создадим папки «work» (для работы) и «image» (для изолированной системы). После установки запускаем debootstrap

Обратите внимание: Версия debootstrap для Ubuntu содержит файлы для загрузки только следующего релиза Ubuntu! Т. е. Вы не сможете скачать базовую систему для raring (Ubuntu 13.04) в precise (Ubuntu 12.04 LTS). На наше счастье, обойти это ограничение легко обойти, скачав debootstrap из репозитория raring или взяв последнюю версию из папки pool и установив его с помощью dpkg. Помимо того, у debootstrap нет зависимостей, а значит его установка вручную не вызовет никаких проблем в Вашей системе

sudo apt-get install debootstrap
mkdir -p work/chroot
cd work 
sudo debootstrap —arch=i386 trusty chroot http://mirror.yandex.ru/ubuntu

Обратите внимание: Если Вы хотите собрать следующий релиз Ubuntu, но не можете его загрузить, воспользуйтесь следующей хитростью:

cd /usr/share/debootstrap/scripts/ # переходим в папку со скриптами загрузки
sudo ln -s gutsy trusty # Создаем символическую ссылку в trusty на gutsy (т. е. показываем программе: загружать Ubuntu 14.04 надо также, как и 7.10) 
mkdir -p work/chroot # создаем папку для работы и изолированной системы
cd work 
sudo debootstrap —arch=i386 trusty chroot http://mirror.yandex.ru/ubuntu # скачиваем минимальную базовую систему (Ubuntu 14.04 LTS x86) в папку chroot с зеркала Яндекса
Обратите внимание, что в последней строке вместо trusty (Ubuntu 14.04 LTS) можно написать любое другое прилагательное из списка отсюда, например precise или quantal: http://ru.wikipedia.org/wiki/Ubuntu#.D0.92.D1.8B.D0.BF.D1.83.D1.81.D0.BA.D0.B8 Помимо этого, Вы можете загрузить систему не только из главного архива, но и с одного из множества зеркал. Для этого нужно дописать адрес зеркала в конце команды debootstrap. По умолчанию будет использован адрес http://archive.ubuntu.com/ubuntu.

Важно установить приложения вроде MySQL, Virtualbox после того как были скачаны ядро Linux (а оно у нас не скачано!(настолько у нас минимальна система)) и установлены общие настройки, потому что эти приложения требуют установки своих модулей ядра для полной настройки.

Если Вы планируете установить что-либо, использующее метапакеты окружений рабочего стола (например xfce4), Вам также потребуется связать файл в изолированной системе как следует (не только с помощью devpts). Иначе, GRUB при установке выдаст ошибку и Вы не сможете настроить пакеты. Чтобы этого избежать свяжите устройства с помощью команды:

sudo mount —bind /dev путь/до/chroot/dev

Аналогично нужно примонтировать proc, sysfs и devpts Теперь скопируем системные файлы (их можно взять на любой машине с Ubuntu, подключенной к интернету):

sudo cp /etc/hosts путь/до/chroot/etc/hosts
sudo cp /etc/resolv.conf путь/до/chroot/etc/resolv.conf
sudo cp /etc/apt/sources.list путь/до/chroot/etc/apt/sources.list
Обратите внимание: Если Вы скачали одну версию Ubuntu, а у Вас установлена другая, Вам нужно сменить прилагательное в chroot/etc/apt/sources.list командой:
sudo sed s/<Версия, которая у Вас установлена>/<Версия, которую Вы скачали>/ </etc/apt /sources.list> путь/до/chroot/etс/apt/sources.list
Например, у Вас стоит Ubuntu 12.04, а Вы скачали Ubuntu 11.10, то команда будет выглядеть так:
sudo sed s/precise/oneiric/ < /etс/apt/sources.list > chroot/etc/apt/sources.list

Если Вам нужно, Вы можете подправить sources.list и добавить туда сторонний репозиторий. Если Вы добавляете PPA репозиторий, то Вам помимо самого репозитория нужно добавить еще и OpenPGP ключ для пакетного менеджера в изолированной системе. Его можно найти на странице описания репозитория (он может выглядеть вот так: 1024/12345678). Скопируйте или запишите часть после косой черты (как здесь: 12345678). Этот ключ нужно добавить как можно скорее, как только мы чрутнемся в изолированную систему.

Обязательно! Сделайте бекап /sbin/initctl, потому что следующий шаг удаляет этот файл. Дело в том что начиная с версии 10.04 upstart не содержит файла /sbin/initctl.distrib и обновление этого пакета этот файл не возвращает.
sudo chroot chroot
mount none-t proc /proc
mount none-t sysfs /sys
mount none-t devpts /dev/pts
export HOME=/etc/skel
export LC_ALL=C
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 12345678 # Substitute " 12345678 " with the PPA's OpenPGP ID.
apt-get update
apt-get install --yes dbus
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl

Отсутствие этого файла вызывает массу проблем в изолированных системах во всех системах, начиная с Ubuntu 9.10: https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/430224

Решением может стать символическая ссылка на /bin/true:

ln -s /bin/true /sbin/initctl

Если Вы этого не сделаете, то консоль выругается:

initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
invoke-rc.d: initscript systemd-logind, action "start" failed.
dpkg: error processing package libpam-systemd:i386 (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 libpam-systemd:i386
E: Sub-process /usr/bin/dpkg returned an error code (1)

Обновите пакеты, если хотите :

apt-get --yes upgrade

Установите пакеты, необходимые для живой системы:

apt-get install --yes ubuntu-standard casper lupin-casper
apt-get install --yes discover laptop-detect os-prober
apt-get install --yes linux-generic

Ранее, до Ubuntu 10.10 пакет discover назывался discover1.

Если Вы загружаете ОС Ubuntu 10.04, то Вам нужно поставить следующие пакеты: grub2 plymouth-x11

apt-get install --yes grub2 plymouth-x11

Для ранних релизов (заканчивая версией 9.04) была характерна следующая проблема: ОС вешала сеть, если был установлен Network Manager. На наше счастье, данная проблема была устранена в релизе 9.10. Команда для установки NM:

apt-get install --no-install-recommends network-manager

Далее, установите те программы какие Вы захотите. На данном этапе Вы создаете свою систему. Заполняйте ее тем, чем хотите. Однако перед этим поставьте программу ubuntu after install для установки тех программ, которые Вы добавить забыли. После наполнения ПО возвращайтесь к данному руководству.

Установка программы установки

Для GTK интерфейса — Unity, GNOME, XFCE и LXDE

Unity — стандартная ОРС для ubuntu, самая красивая ОРС (по моему мнению) GNOME — что-то по-новому от старого доброго Mac OS X XFCE и LXDE — это ОРС, не нагружающие ресурсы. Рекомендованы для установки на старых компьютерах

apt-get install ubiquity-frontend-gtk

Для Qt интерфейса — KDE

KDE — это Windows-подобное окружение рабочего стола и пожалуй, во всем хочет походить на своего старшего собрата (например это ОРС самое большое по объему данных)

apt-get install ubiquity-frontend-kde

Дополнительная подготовка

На данном этапе я расскажу, как создать файлы initrd.lz и casper-uuid-generic, необходимые для нормальной работы образа. В chroot выполняем

cd /tmp # Заходим в оперативную память
cp /initrd.img ./initrd0.gz # копируем в /tmp initrd.img  
casper-new-uuid /tmp/initrd0.gz /tmp/initrd.gz /tmp/casper-uuid-generic # Создаем файлы initrd.gz и casper-uuid-generic
mkdir /tmp/tmp # создаем папку для временного хранения initramfs
cd ./tmp # входим в нее
gunzip -dc ../initrd.gz | cpio -imvd --no-absolute-filenames # распаковка gz
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../initrd.lz # упаковка в lz

В том же терминале открываем вторую вкладку и выполняем:

cp -v chroot/tmp/{initrd.lz,casper-uuid-generic} . # копируем файлы за chroot

Возращаемся в первую вкладку и удаляем из /tmp все:

cd /
rm -rfv /tmp/*

Очистка Чрута.

Если Вы установили все программы, то убедитесь что будет работать

rm /var/lib/dbus/machine-id

Ранее в этом руководстве я просил Вас сделать бекап /sbin/initctl. Вы его сделали? Он сейчас может потребоваться. Если эта команда не сработает, восстановите /sbin/initctl из бекапа.

rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl

Если у Вас более одного ядра Linux, удалите старые ядра:

ls /boot/vmlinuz-3.**-**-generic > list.txt
sum=$(cat list.txt | grep '[^ ]' | wc -l)
if [ $sum -gt 1 ]; then
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
fi
rm list.txt

После чего проведите очистку:

apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf
umount -lf  /proc
umount -lf  /sys
umount -lf  /dev/pts
exit

Если у Вас все еще подключен /dev, отключите его:

sudo umount  /путь/до/чрута/dev

То есть, Вы вошли в изолированную систему, установили пакеты, провели очистку и вышли.

Настройка окружающей среды по умолчанию

Данный пункт не является обязательным. При загрузке окружения рабочего стола (в моем случае Unity 7) хочется настроить программы на боковой панели, настроить часы, которые выглядят ужасно в обычной версии Unity. Поэтому здесь я расскажу как можно настроить unity 7. Общеизвестно, что Unity 7 настраивается через dconf. Файлы настроек по умолчанию находятся в папке

/usr/share/glib-2.0/schemas/

и имеют имена соответствующие иерархии в dconf-editor. Мы изменим некоторые из них:

com.canonical.Unity.gschema.xml # Основная схема настройка Unity 7. В ней изменим программы по умолчанию.
com.canonical.indicator.datetime.gschema.xml # Схема по настройке часов в апплете уведомлений. Изменим формат часов
org.gnome.nautilus.desktop.gschema.xml # Укажем, какие папки всегда выводить на рабочий стол (Корзина, Домашняя папка, Сеть и Компьютер), а также шрифт рабочего стола
Листинг com.canonical.Unity.gschema.xml
<schemalist>
  <enum id="form-factor-enum">
    <value nick="Automatic" value="0" />
    <value nick="Desktop" value="1" />
    <value nick="Netbook" value="2" />
    <value nick="TV" value="3" />
  </enum>
  <enum id="home-expanded-enum">
    <value nick="Not Expanded" value="0" />
    <value nick="Expanded" value="1" />
  </enum>

  <schema path="/com/canonical/unity/" id="com.canonical.Unity" gettext-domain="unity">
    <key enum="form-factor-enum" name="form-factor">
      <default>"Automatic"</default>
      <summary>The form factor Unity should target.</summary>
      <description>The form factor chosen will affect the size and appearance of the Dash, Launcher and also the Window Management behaviour.</description>
    </key>
    <key enum="home-expanded-enum" name="home-expanded">
      <default>"Expanded"</default>
      <summary>Whether the home screen should be expanded.</summary>
      <description>Whether the home screen should be expanded.</description>
    </key>
    <key type="i" name="minimize-count">
      <default>0</default>
      <summary>Number of times a normal window has been minimized.</summary>
      <description>This is used to adjust the animation speed by making it progressively faster the more it is used.</description>
    </key>
    <key type="i" name="minimize-fast-duration">
      <default>300</default>
      <summary>The duration for the minimize animation when it is at its fastest setting.</summary>
      <description>This is the duration that the minimize animation will have when it has been used more than an number of times equal minimize-speed-threshold.</description>
    </key>
    <key type="i" name="minimize-slow-duration">
      <default>800</default>
      <summary>The duration for the minimize animation when it is at its slowest setting.</summary>
      <description>This is the duration that the minimize animation will have when it has never been used.</description>
    </key>
    <key type="i" name="minimize-speed-threshold">
      <default>100</default>
      <summary>The number of minimizations required to reach maximum speed.</summary>
      <description>The speed of the minimize animation will progressively get faster as minimize-count approaches this value.</description>
    </key>
    <key type="b" name="double-click-activate">
      <default>true</default>
      <summary>Enable/Disable dash result double-click activation.</summary>
      <description>This is used to enable/disable double-click result activation in the dash. Double-click to activate, single click preview</description>
    </key>
    <key type="b" name="integrated-menus">
      <default>false</default>
      <summary>Enable/Disable the integrated menus in Unity.</summary>
      <description>When this is enabled, the application menus will be shown
        on the window decoration, otherwise they will be always shown on the
        unity top panel</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/interface/" id="com.canonical.Unity.Interface" gettext-domain="unity">
    <key type="d" name="text-scale-factor">
      <default>1.0</default>
      <range min="0.5" max="3.0"/>
      <summary>Font scaling for unity and applications.</summary>
      <description>This value defines the global font scaling used by both
        unity and applications. It will match the current system font scaling.</description>
    </key>
    <key type="d" name="cursor-scale-factor">
      <default>1.0</default>
      <range min="0.5" max="3.0"/>
      <summary>Mouse cursor scaling.</summary>
      <description>This value defines the global mouse cursor scaling used by both
        unity and applications. Changing this value allows to use a custom scaling
        for the mouse cursor.</description>
    </key>
    <key type="s" name="app-scale-factor-monitor">
      <default>''</default>
      <summary>The name of the monitor that controls the global app scaling factor.</summary>
      <description>This value defines the monitor that unity will use (if found) as reference
        for scaling all the applications.</description>
    </key>
    <key type="b" name="app-fallback-to-maximum-scale-factor">
      <default>true</default>
      <summary>Use the maximum per-monitor scale-factor as application scale factor if no target monitor is found.</summary>
      <description>When this is enabled, the applications scale factor will match
        the scale factor of the monitor with the greater value, in case the monitor
        defined in 'app-scale-factor-monitor' is not provided or available.</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/launcher/" id="com.canonical.Unity.Launcher" gettext-domain="unity">
    <key type="as" name="favorites"> # Секция программ по умолчанию. Будут загружены на liveCD
      <default>[
        'application://ubiquity.desktop',
        'application://nautilus.desktop',
        'application://firefox.desktop',
        'application://libreoffice-writer.desktop',
        'application://libreoffice-calc.desktop',
        'application://libreoffice-impress.desktop',
        'application://ubuntu-software-center.desktop',
        'application://ubuntu-amazon-default.desktop',
        'application://unity-control-center.desktop',
        'unity://running-apps',
        'unity://expo-icon',
        'unity://devices'
      ]</default>
      <summary>List of items that should be shown by default in the launcher</summary>
      <description>These items can be: application://desktop-id.desktop, device://uiid and unity://special-id (including: unity://running-apps (icons of running applications) unity://devices (icons of attached devices), unity://expo-icon (icon of the workspace switcher) and unity://desktop-icon (the show-desktop icon)); the order of this list determines the launcher item's position.</description>
    </key>
    <key type="s" name="favorite-migration">
      <default>''</default>
      <summary>Version of last migration done</summary>
      <description>This is a detection key for the favorite migration script to know whether the needed migration is done or not.</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/devices/" id="com.canonical.Unity.Devices" gettext-domain="unity">
    <key type="as" name="blacklist">
        <default>[]</default>
        <summary>List of device uuid blacklist from the launcher.</summary>
        <description>These devices are not shown in the launcher by default.</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
    <key type="as" name="scopes">
      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
      <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
      <description>The scopes listed in the scope bar will be ordered according to this list.</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/decorations/" id="com.canonical.Unity.Decorations" gettext-domain="unity">
    <key type="u" name="grab-wait">
      <default>175</default>
      <range min="0" max="1000"/>
      <summary>Milliseconds to wait before considering a mouse pressure a grab</summary>
      <description>The number of ms to wait before starting the window movement (and then
        showing the proper mouse cursor, and grabbing the window)</description>
    </key>
  </schema>
  <schema path="/com/canonical/unity/integrated-menus/" id="com.canonical.Unity.IntegratedMenus" gettext-domain="unity">
    <key type="u" name="click-movement-threshold">
      <default>15</default>
      <range min="0" max="30"/>
      <summary>Number of pixels to ignore on mouse pressure</summary>
      <description>This value define how many pixels the user can move the mouse
        when holding the mouse button, before we consider his action a movement
        (to grab the window).</description>
    </key>
    <key type="u" name="double-click-wait">
      <default>0</default>
      <range min="0" max="300"/>
      <summary>Milliseconds to wait before activating a menu after mouse release</summary>
      <description>The number of ms to wait after a mouse button release event before considering
        it a click. When this value is greater than 0, then it's possible to maximize
        a window by double-clicking on its menus if the second click happens before the
        specified value of ms is elapsed</description>
    </key>
  </schema>
</schemalist>
Листинг com.canonical.indicator.datetime.gschema.xml
<schemalist>
	<enum id="time-enum">
		<value nick="locale-default" value="0" />
		<value nick="12-hour" value="1" />
		<value nick="24-hour" value="2" />
		<value nick="custom" value="3" />
	</enum>
	<schema id="com.canonical.indicator.datetime" path="/com/canonical/indicator/datetime/" gettext-domain="indicator-datetime">
		<key name="show-clock" type="b">
			<default>true</default>
			<summary>Show the clock in the panel</summary>
			<description>
			  Controls whether the clock indicator appears in the panel or not.
			</description>
		</key>
		<key name="time-format" enum="time-enum">
			<default>'locale-default'</default> # Изменим на custom
			<summary>What the time format should be</summary>
			<description>
			  Controls the time format that is displayed in the indicator.  For almost
			  all users this should be the default for their locale.  If you think the
			  setting is wrong for your locale please join or talk to the translation
			  team for your language.  If you just want something different you can
			  adjust this to be either 12 or 24 time.  Or, you can use a custom format
			  string and set the custom-time-format setting.
			</description>
		</key>
		<key name="custom-time-format" type="s">
			<default>"%l:%M %p"</default> #Подправим на %A, %d.%m.%Y %H:%M:%S %Z Чтобы дата и время выглядели так: Четверг, 06.11.2014 19:18:17 MSK
			<summary>The format string passed to strftime</summary>
			<description>
			  The format of the time and/or date that is visible on the panel when using
			  the indicator.  For most users this will be a set of predefined values as
			  determined by the configuration utility, but advanced users can change it
			  to anything strftime can accept.  Look at the man page on strftime for
			  more information.
			</description>
		</key>
		<key name="show-seconds" type="b">
			<default>false</default>
			<summary>Show the number of seconds in the indicator</summary>
			<description>
			  Makes the datetime indicator show the number of seconds in the indicator.
			  It's important to note that this will cause additional battery drain as
			  the time will update 60 times as often, so it is not recommended.  Also,
			  this setting will be ignored if the time-format value is set to custom.
			</description>
		</key>
		<key name="show-day" type="b">
			<default>false</default>
			<summary>Show the day of the week in the indicator</summary>
			<description>
			  Puts the day of the week on the panel along with the time and/or date
			  depending on settings.  This setting will be ignored if the time-format
			  value is set to custom.
			</description>
		</key>
		<key name="show-date" type="b">
			<default>false</default>
			<summary>Show the month and date in the indicator</summary>
			<description>
			  Puts the month and the date in the panel along with the time and/or day
			  of the week depending on settings.  This setting will be ignored if the
			  time-format value is set to custom.
			</description>
		</key>
		<key name="show-year" type="b">
			<default>false</default>
			<summary>Show the year in the indicator</summary>
			<description>
			  Puts the year in the panel along with the month and the date.
			  This setting will be ignored if either the time-format value is set to custom
			  or if show-date is set to false.
			</description>
		</key>
		<key name="show-calendar" type="b">
			<default>true</default>
			<summary>Show the monthly calendar in the indicator</summary>
			<description>
			  Puts the monthly calendar in indicator-datetime's menu.
			</description>
		</key>
		<key name="show-week-numbers" type="b">
			<default>false</default>
			<summary>Show week numbers in calendar</summary>
			<description>
			  Shows the week numbers in the monthly calendar in indicator-datetime's menu.
			</description>
		</key>
		<key name="show-events" type="b">
			<default>true</default>
			<summary>Show events in the indicator</summary>
			<description>
			  Shows events from Evolution in indicator-datetime's menu.
			</description>
		</key>
		<key name="show-auto-detected-location" type="b">
			<default>false</default>
			<summary>Show the auto-detected location in the indicator</summary>
			<description>
			  Shows your current location (determined from geoclue and /etc/timezone) in indicator-datetime's menu.
			</description>
		</key>
		<key name="show-locations" type="b">
			<default>false</default>
			<summary>Show locations in the indicator</summary>
			<description>
			  Shows custom defined locations in indicator-datetime's menu.
			</description>
		</key>
		<key name="locations" type="as">
			<default>['UTC']</default>
			<summary>A List of locations</summary>
			<description>
			  Adds the list of locations the user has configured to display in the 
			  indicator-datetime menu.
			</description>
		</key>
		<key name="timezone-name" type="s">
			<default>''</default>
			<summary>The name of the current timezone</summary>
			<description>
			  Some timezones can be known by many different cities or names.  This setting describes how the current zone prefers to be named.  Format is "TIMEZONE NAME" (e.g. "America/New_York Boston" to name the New_York zone Boston).
			</description>
		</key>
	</schema>
</schemalist>
Листинг org.gnome.nautilus.gschema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
  <enum id="org.gnome.nautilus.SpeedTradeoff">
    <value value="0" nick="always"/>
    <value value="1" nick="local-only"/>
    <value value="2" nick="never"/>
  </enum>

  <enum id="org.gnome.nautilus.ClickPolicy">
    <value value="0" nick="single"/>
    <value value="1" nick="double"/>
  </enum>

  <enum id="org.gnome.nautilus.ActivationChoice">
    <value value="0" nick="launch"/>
    <value value="1" nick="display"/>
    <value value="2" nick="ask"/>
  </enum>

  <enum id="org.gnome.nautilus.FolderView">
    <value value="0" nick="icon-view"/>
    <value value="1" nick="list-view"/>
  </enum>

  <enum id="org.gnome.nautilus.SortOrder">
    <value value="0" nick="manually"/>
    <value value="1" nick="name"/>
    <value value="2" nick="size"/>
    <value value="3" nick="type"/>
    <value value="4" nick="mtime"/>
    <value value="5" nick="atime"/>
    <value value="6" nick="trash-time"/>
  </enum>

  <enum id="org.gnome.nautilus.ZoomLevel">
    <value value="0" nick="smallest"/>
    <value value="1" nick="smaller"/>
    <value value="2" nick="small"/>
    <value value="3" nick="standard"/>
    <value value="4" nick="large"/>
    <value value="5" nick="larger"/>
    <value value="6" nick="largest"/>
  </enum>

  <enum id="org.gnome.nautilus.TabPosition">
    <value value="0" nick="after-current-tab"/>
    <value value="1" nick="end"/>
  </enum>

  <schema path="/org/gnome/nautilus/" id="org.gnome.nautilus" gettext-domain="nautilus">
    <child schema="org.gnome.nautilus.preferences" name="preferences"/>
    <child schema="org.gnome.nautilus.icon-view" name="icon-view"/>
    <child schema="org.gnome.nautilus.list-view" name="list-view"/>
    <child schema="org.gnome.nautilus.desktop" name="desktop"/>
    <child schema="org.gnome.nautilus.window-state" name="window-state"/>
  </schema>

  <schema path="/org/gnome/nautilus/preferences/" id="org.gnome.nautilus.preferences" gettext-domain="nautilus">
    <key name="tabs-open-position" enum="org.gnome.nautilus.TabPosition">
      <aliases>
	<alias value='after_current_tab' target='after-current-tab'/>
      </aliases>
      <default>'after-current-tab'</default>
      <summary>Where to position newly open tabs in browser windows.</summary>
      <description>If set to "after-current-tab", then new tabs are inserted after the current tab. If set to "end", then new tabs are appended to the end of the tab list.</description>
    </key>
    <key type="b" name="always-use-location-entry">
      <default>false</default>
      <summary>Always use the location entry, instead of the pathbar</summary>
      <description>If set to true, then Nautilus browser windows will always use a textual input entry for the location toolbar, instead of the pathbar.</description>
    </key>
    <key type="b" name="confirm-trash">
      <default>true</default>
      <summary>Whether to ask for confirmation when deleting files, or emptying Trash</summary>
      <description>If set to true, then Nautilus will ask for confirmation when you attempt to delete files, or empty the Trash.</description>
    </key>
    <key type="b" name="enable-delete">
      <default>false</default>
      <summary>Whether to enable immediate deletion</summary>
      <description>If set to true, then Nautilus will have a feature allowing you to delete a file immediately and in-place, instead of moving it to the trash. This feature can be dangerous, so use caution.</description>
    </key>
    <key name="show-directory-item-counts" enum="org.gnome.nautilus.SpeedTradeoff">
      <aliases><alias value='local_only' target='local-only'/></aliases>
      <default>'local-only'</default>
      <summary>When to show number of items in a folder</summary>
      <description>Speed tradeoff for when to show the number of items in a folder. If set to "always" then always show item counts, even if the folder is on a remote server. If set to "local-only" then only show counts for local file systems. If set to "never" then never bother to compute item counts.</description>
    </key>
    <key name="click-policy" enum="org.gnome.nautilus.ClickPolicy">
      <default>'double'</default>
      <summary>Type of click used to launch/open files</summary>
      <description>Possible values are "single" to launch files on a single click, or "double" to launch them on a double click.</description>
    </key>
    <key name="executable-text-activation" enum="org.gnome.nautilus.ActivationChoice">
      <default>'display'</default>
      <summary>What to do with executable text files when activated</summary>
      <description>What to do with executable text files when they are activated (single or double clicked). Possible values are "launch" to launch them as programs, "ask" to ask what to do via a dialog, and "display" to display them as text files.</description>
    </key>
    <key type="b" name="install-mime-activation">
      <default>true</default>
      <summary>Show the package installer for unknown mime types</summary>
      <description>Whether to show the user a package installer dialog in case an unknown mime type is opened, in order to search for an application to handle it.</description>
    </key>
    <key type="b" name="mouse-use-extra-buttons">
      <default>true</default>
      <summary>Use extra mouse button events in Nautilus' browser window</summary>
      <description>For users with mice that have "Forward" and "Back" buttons, this key will determine if any action is taken inside of Nautilus when either is pressed.</description>
    </key>
    <key type="i" name="mouse-forward-button">
      <default>9</default>
      <summary>Mouse button to activate the "Forward" command in browser window</summary>
      <description>For users with mice that have buttons for "Forward" and "Back", this key will set which button activates the "Forward" command in a browser window. Possible values range between 6 and 14.</description>
    </key>
    <key type="i" name="mouse-back-button">
      <default>8</default>
      <summary>Mouse button to activate the "Back" command in browser window</summary>
      <description>For users with mice that have buttons for "Forward" and "Back", this key will set which button activates the "Back" command in a browser window. Possible values range between 6 and 14.</description>
    </key>
    <key name="show-image-thumbnails" enum="org.gnome.nautilus.SpeedTradeoff">
      <aliases><alias value='local_only' target='local-only'/></aliases>
      <default>'local-only'</default>
      <summary>When to show thumbnails of files</summary>
      <description>Speed tradeoff for when to show a file as a thumbnail. If set to "always" then always thumbnail, even if the folder is on a remote server. If set to "local-only" then only show thumbnails for local file systems. If set to "never" then never bother to thumbnail files, just use a generic icon. Despite what the name may suggest, this applies to any previewable file type.</description>
    </key>
    <key type="t" name="thumbnail-limit">
      <default>10485760</default>
      <summary>Maximum image size for thumbnailing</summary>
      <description>Images over this size (in bytes) won't be thumbnailed. The purpose of this setting is to avoid thumbnailing large images that may take a long time to load or use lots of memory.</description>
    </key>
    <key type="b" name="sort-directories-first">
      <default>false</default>
      <summary>Show folders first in windows</summary>
      <description>If set to true, then Nautilus shows folders prior to showing files in the icon and list views.</description>
    </key>
    <key name="default-sort-order" enum="org.gnome.nautilus.SortOrder">
      <aliases>
	<alias value='modification_date' target='mtime'/>
      </aliases>
      <default>'name'</default>
      <summary>Default sort order</summary>
      <description>The default sort-order for items in the icon view. Possible values are "name", "size", "type" and "mtime".</description>
    </key>
    <key type="b" name="default-sort-in-reverse-order">
      <default>false</default>
      <summary>Reverse sort order in new windows</summary>
      <description>If true, files in new windows will be sorted in reverse order. ie, if sorted by name, then instead of sorting the files from "a" to "z", they will be sorted from "z" to "a"; if sorted by size, instead of being incrementally they will be sorted decrementally.</description>
    </key>
    <key name="default-folder-viewer" enum="org.gnome.nautilus.FolderView">
      <aliases>
        <alias value='icon_view' target='icon-view'/>
        <alias value='compact_view' target='icon-view'/>
        <alias value='compact-view' target='icon-view'/>
        <alias value='list_view' target='list-view'/>
      </aliases>
      <default>'icon-view'</default>
      <summary>Default folder viewer</summary>
      <description>When a folder is visited this viewer is used unless you have selected another view for that particular folder. Possible values are "list-view", and "icon-view".</description>
    </key>
    <key type="b" name="show-hidden-files">
      <default>false</default>
      <summary>Whether to show hidden files</summary>
      <description>This key is deprecated and ignored. The "show-hidden" key from "org.gtk.Settings.FileChooser" is now used instead.</description>
    </key>
    <key type="ay" name="bulk-rename-tool">
      <default>[]</default>
      <summary>Bulk rename utility</summary>
      <description>If set, Nautilus will append URIs of selected files and treat the result as a command line for bulk renaming. Bulk rename applications can register themselves in this key by setting the key to a space-separated string of their executable name and any command line options. If the executable name is not set to a full path, it will be searched for in the search path.</description>
    </key>
    <key type="b" name="enable-interactive-search">
      <default>false</default>
      <summary>Enable interactive (type-ahead) search</summary>
      <description>If set to true, enables interactive search, similar to Nautilus 3.4.</description>
    </key>
  </schema>

  <schema path="/org/gnome/nautilus/icon-view/" id="org.gnome.nautilus.icon-view" gettext-domain="nautilus">
    <key type="as" name="captions">
      <default>[ 'none', 'size', 'date_modified' ]</default>
      <summary>List of possible captions on icons</summary>
      <description>A list of captions below an icon in the icon view and the desktop. The actual number of captions shown depends on the zoom level. Some possible values are: "size", "type", "date_modified", "owner", "group", "permissions", and "mime_type".</description>
    </key>
    <key name="default-zoom-level" enum="org.gnome.nautilus.ZoomLevel">
      <default>'standard'</default>
      <summary>Default icon zoom level</summary>
      <description>Default zoom level used by the icon view.</description>
    </key>
    <key type="i" name="thumbnail-size">
      <default>64</default>
      <summary>Default Thumbnail Icon Size</summary>
      <description>The default size of an icon for a thumbnail in the icon view.</description>
    </key>
    <key type="as" name="text-ellipsis-limit">
      <default>[ '3' ]</default>
      <summary>Text Ellipsis Limit</summary>
      <description>A string specifying how parts of overlong file names should be replaced by ellipses, depending on the zoom level. Each of the list entries is of the form "Zoom Level:Integer". For each specified zoom level, if the given integer is larger than 0, the file name will not exceed the given number of lines. If the integer is 0 or smaller, no limit is imposed on the specified zoom level. A default entry of the form "Integer" without any specified zoom level is also allowed. It defines the maximum number of lines for all other zoom levels. Examples: 0 - always display overlong file names; 3 - shorten file names if they exceed three lines; smallest:5,smaller:4,0 - shorten file names if they exceed five lines for zoom level "smallest". Shorten file names if they exceed four lines for zoom level "smaller". Do not shorten file names for other zoom levels. Available zoom levels: smallest (33%), smaller (50%), small (66%), standard (100%), large (150%), larger (200%), largest (400%)</description>
    </key>
  </schema>

  <schema path="/org/gnome/nautilus/list-view/" id="org.gnome.nautilus.list-view" gettext-domain="nautilus">
    <key name="default-zoom-level" enum="org.gnome.nautilus.ZoomLevel">
      <default>'small'</default>
      <summary>Default list zoom level</summary>
      <description>Default zoom level used by the list view.</description>
    </key>
    <key type="as" name="default-visible-columns">
      <default>[ 'name', 'size', 'type', 'date_modified' ]</default>
      <summary>Default list of columns visible in the list view</summary>
      <description>Default list of columns visible in the list view.</description>
    </key>
    <key type="as" name="default-column-order">
      <default>[ 'name', 'size', 'type', 'date_modified' ]</default>
      <summary>Default column order in the list view</summary>
      <description>Default column order in the list view.</description>
    </key>
    <key type="b" name="use-tree-view">
      <default>false</default>
      <summary>Use tree view</summary>
      <description>Whether a tree should be used for list view navigation instead of a flat list</description>
    </key>
  </schema>

  <schema path="/org/gnome/nautilus/desktop/" id="org.gnome.nautilus.desktop" gettext-domain="nautilus"> # Нам надо подправить эту секцию
    <key type="s" name="font">
      <default l10n="messages" context="desktop-font">''</default> # Устанавливаем шрифт
      <summary>Desktop font</summary>
      <description>The font _description used for the icons on the desktop.</description>
    </key>
    <key type="b" name="home-icon-visible">
      <default>true</default>
      <summary>Home icon visible on desktop</summary> # Домашняя папка на рабочем столе
      <description>If this is set to true, an icon linking to the home folder will be put on the desktop.</description>
    </key>
    <key type="b" name="trash-icon-visible"> #Корзина
      <default>true</default>
      <summary>Trash icon visible on desktop</summary>
      <description>If this is set to true, an icon linking to the trash will be put on the desktop.</description>
    </key>
    <key type="b" name="volumes-visible"> #Устройства
      <default>true</default>
      <summary>Show mounted volumes on the desktop</summary>
      <description>If this is set to true, icons linking to mounted volumes will be put on the desktop.</description>
    </key>
    <key type="b" name="network-icon-visible"> #Сеть
      <default>false</default>
      <summary>Network Servers icon visible on the desktop</summary>
      <description>If this is set to true, an icon linking to the Network Servers view will be put on the desktop.</description>
    </key>
    <key type="s" name="home-icon-name"> #Название домашней папки
      <default>''</default>
      <summary>Desktop home icon name</summary>
      <description>This name can be set if you want a custom name for the home icon on the desktop.</description>
    </key>
    <key type="s" name="trash-icon-name"> #Название корзины
      <default l10n="messages" context="trash-icon-name">'Trash'</default>
      <summary>Desktop trash icon name</summary>
      <description>This name can be set if you want a custom name for the trash icon on the desktop.</description>
    </key>
    <key type="s" name="network-icon-name"> #Название сети
      <default l10n="messages" context="network-icon-name">'Network Servers'</default>
      <summary>Network servers icon name</summary>
      <description>This name can be set if you want a custom name for the network servers icon on the desktop.</description>
    </key>
    <key type="i" name="text-ellipsis-limit">
      <default>3</default>
      <summary>Text Ellipsis Limit</summary>
      <description>An integer specifying how parts of overlong file names should be replaced by ellipses on the desktop. If the number is larger than 0, the file name will not exceed the given number of lines. If the number is 0 or smaller, no limit is imposed on the number of displayed lines.</description>
    </key>
    <key type="b" name="background-fade">
      <default>true</default>
      <summary>Fade the background on change</summary>
      <description>If set to true, then Nautilus will use a fade effect to change the desktop background.</description>
    </key>
  </schema>

  <schema path="/org/gnome/nautilus/window-state/" id="org.gnome.nautilus.window-state" gettext-domain="nautilus">
    <key type="s" name="geometry">
      <default>''</default>
      <summary>The geometry string for a navigation window.</summary>
      <description>A string containing the saved geometry and coordinates string for navigation windows.</description>
    </key>
    <key type="b" name="maximized">
      <default>false</default>
      <summary>Whether the navigation window should be maximized.</summary>
      <description>Whether the navigation window should be maximized by default.</description>
    </key>
    <key type="i" name="sidebar-width">
      <default>188</default>
      <summary>Width of the side pane</summary>
      <description>The default width of the side pane in new windows.</description>
    </key>
    <key type="b" name="start-with-location-bar">
      <default>true</default>
      <summary>Show location bar in new windows</summary>
      <description>If set to true, newly opened windows will have the location bar visible.</description>
    </key>
    <key type="b" name="start-with-sidebar">
      <default>true</default>
      <summary>Show side pane in new windows</summary>
      <description>If set to true, newly opened windows will have the side pane visible.</description>
    </key>
  </schema>
</schemalist>

Создание папки для CD диска и ее заполнение

Необходимо установить на хост-систему 4 пакета: 1. Syslinux — загрузчик, позволяющий сделать ISO образ загружаемым; 2. SquashFS-tools — программа для сжатия образа системы 3. Genisoimage — пакет для работы с файлами образов диска. Нам из этого пакета понадобится утилита mkisofs 4. SBM — загрузчик для LiveCD

следующей командой:

sudo apt-get install syslinux squashfs-tools genisoimage sbm

Создайте папку для cd с тремя подкаталогами:

mkdir -p image/{casper,isolinux,install}

# То же самое можно сделать командой 'mkdir image image/casper image/isolinux image/install' Во-первых, Вам нужно скопировать ядро и initrd, созданное с помощью Casper в изолированной системе. Скопируйте их куда-нибудь вне изолированной системы и проведите следующее:

cp chroot/boot/vmlinuz-3.**-**-generic image/casper/vmlinuz
cp initrd.lz image/casper

Во-вторых, если у Вас возникли проблемы с копированием ядра или инитрд — может быть, у Вас этот файл не один — тогда используйте следующие команды:

for file in chroot/boot/vmlinuz-3.**-**-generic; do cp $file image/casper/vmlinuz; done
for file in chroot/boot/initrd.img-3.**-**-generic; do cp $file image/casper/initrd.gz; done

Теперь надо поставить ISOLinux и SBM командами:

cp /usr/lib/syslinux /isolinux.bin image/isolinux/
cp /boot/memtest86+.bin image/install/memtest
cp /boot/sbm.img  image/install/

Инструкции при загрузке при создании Remix

Для того чтобы дать какие-либо инструкции при загрузке пользователю нужно создать файл image/isolinux/isolinux.txt, например:

# splash.rle
************************************************** **********************
This is an Ubuntu Remix Live CD.
For the default live system, enter "live". To run memtest86 +, enter "memtest"
************************************************** **********************

Графика во время загрузки может отсутвовать, но это не главное. Главное состоит в том, что в тексте сверху есть спецсимвол, указывающий на файл splash.rle. Чтобы создать этот хитрый символ нужно:

1. Скопировать текст и потом его изменить.

или

2. Использовать следующую команду:

printf "\x18" > emptyfile

и изменить файл emptyfile, используя любой текстовый редактор. Добавьте имя файла после символа и затем со следующей строки напишите то, что Вы хотите вывести на экран в качестве приветствия. Сохраните данный файл как isolinux.txt и дело в шляпе!

или

3. (Способ для Ъ-линуксоидов!) Используйте vi, нажмите Ctrl+v и затем Ctrl+x для того чтобы создать спецсимвол. Это не работает ни в nano, ни в gedit, ни в каком редакторе, похожем на них!

Для того чтобы создать файл splash.rle, создайте изображение 640*480, конвертируйте его в 15 цветов и сохраните файл в формате .bmp. После установите NetPBM и выполните команды:

bmptoppm splash.bmp > splash.ppm
ppmtolss16 '#ffffff=7' <splash.ppm> splash.rle

Если Вы хотите использовать анимированные изображения, такие как Usplash, убедитесь в том что Вы добавили «VGA=RRR», где RRR — ширина изображения.

Настройка загрузчика

Создайте файл image/isolinux/isolinux.cfg для настройки загрузчика. Пожалуйста, прочтите инструкцию по созданию конфига в /usr/share/doc/syslinux для того чтобы узнать все возможности конфигурирования. Здесь я выложу образец конфига (если что, сверяйтесь с ним):

DEFAULT live
LABEL live
menu label ^Start or install Ubuntu
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.gz quiet splash
LABEL check
menu label ^Check CD for defects
kernel /casper/vmlinuz
append boot=casper integrity-check initrd=/casper/initrd.gz quiet splash -
LABEL memtest
menu label ^Memory test
kernel /install/memtest
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
DISPLAY isolinux.txt
TIMEOUT 300
PROMPT 1
# prompt flag_val
#
# If flag_val is 0 , display the "boot:" prompt
# Only if the Shift or Alt key is pressed,
# Or Caps Lock or Scroll lock is set (this is the default).
# If flag_val is 1 , always display the "boot:" prompt.
# Http://linux.die.net/man/1/syslinux syslinux manpage

Не забудьте выбрать правильное расширение для initrd (initrd.gz или initrd.lz). Теперь в CD можно войти, по крайней мере после того, как мы создадим образ.

Помимо этого зададим нужную нам локаль при запуске с помощью стандартной темы ubuntu. Для этого выполним

sudo aptitude install dpkg-dev uck
apt-get source gfxboot-theme-ubuntu gfxboot
cd gfxboot-theme-ubuntu*/
make DEFAULT_LANG=ru
sudo cp -af boot/* ../image/isolinux/

Формальности.

Следующие действия нужны для нормальной работы LiveCD. Нравится Вам это или нет, это нужно сделать.

Создание манифеста.

sudo chroot chroot dpkg-query -W --showformat='${Package} ${Version} \n' | sudo tee image/casper/filesystem.manifest
sudo cp -v image/casper/filesystem.manifest image/casper/filesystem.manifest-desktop
REMOVE = 'ubiquity ubiquity-frontend-gtk ubiquity-frontend-kde casper lupin-casper live-initramfs user-setup discover xresprobe os-prober libdebian-installer4'
for i in $ REMOVE
do
sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop
done

Сжатие изолированной системы.

Для того чтобы сжать систему в один файл, нужно ввести команду:

sudo mksquashfs chroot image/casper/filesystem.squashfs

Эта команда создаст на диске filesystem.squashfs с сжатой ОС. Если Вам нужно установить с LiveCD, оставьте раздел /boot в покое. Если Вы хотите создать LiveCD только для демонстрации, то /boot можно удалить. Тогда команда, указанная выше, будет иметь вид:

sudo mksquashfs chroot image/casper/filesystem.squashfs -e /boot

Да, и еще: если Вы создаете Убунту на версии, которая вышла раньше, то нужно установить пакет из той версии, какую Вы хотите создать! (Иначе Ваш LiveCD не загрузится) Например, у Вас установлена Ubuntu 12.04, а Вы хотите создать сборку Ubuntu 14.04. Тогда Вам потребуются инструменты из trusty (14.04) репозитория. Помимо файла сжатой файловой системы, нужно написать файл с размером этой ФС. Для этого выполним команду

printf $(sudo du -sx --block-size=1 chroot | cut -f1) > image/casper/filesystem.size

Создание diskdefines

nano image/README.diskdefines

Пример:

# define DISKNAME Ubuntu 14.04 LTS "Trusty Tahr" - Release i386 ** Remix **
# define TYPE binary
# define TYPEbinary 1
# define ARCH i386
# define ARCHi386 1
# define DISKNUM 1
# define DISKNUM1 1
# define TOTALNUM 0
# define TOTALNUM0 1

Признание LiveCD подлинной

Создайте жесткую ссылку ubuntu на папку с образом диска и папку «.disk». Без этого LiveCD будет загружаться но USB Creator работать не будет. На всякий пожарный, создайте файлы со следующей информацией:

cd image
ln -s . ubuntu
mkdir .disk
cd .disk
cp ../../casper-uuid-generic .
touch base_installable
echo "full_cd/single"> cd_type
echo 'Ubuntu 14.04 LTS "Trusty Tahr" - Release i386 ** Remix **'> info
echo "http://ubuntu-rescue-remix.org"> release_notes_url
cd ../..

Вычисление MD5

sudo -s
(cd image && find . -type f -print0 | xargs -0 md5sum | grep -v "\./md5sum.txt" > md5sum.txt)
exit

Это вычислит контрольные суммы md5 для всех файлов в будущем образе.

Создание ISO образа системы

Создать ISO образ из одной папки можно командой

cd image
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-custom-i386.iso .
cd ..

Файл boot.cat будет создан автоматически. Теперь созданный Вами образ можно использовать для установки в Virtualbox и на реальном железе.

Полезные ссылки