Как стать автором
Обновить

Делаем свой Ubuntu 12.10 LiveCD c нужными программами

Всем доброго времени суток!

Хочу поделиться с Вами как можно сделать Ubuntu 12.10 LiveCD со своим набором программ и настройками интерфейса.

Сразу хочу предупредить, что на звание гуру Linux`а я не претендую. Просто очень часто самому приходится лезть в интернет за помощью по всяким разным вопросам. Вот теперь пришло моё время поделиться маленьким HowTo с другими пользователями Ubuntu.

Все команды запускаются от текущего пользователя. Там, где требуются повышенные права, используется sudo.

Начнём с простого. Установим программу Ubuntu Customization Kit, но не из основного репозитория (v.2.4.6 имеет пару ошибок, которые не дают даже разобрать iso с Unity), а последнюю версию с SourceForge.net: на данный момент 2.4.7.
Переходим в папку с архивом и устанавливаем:
mkdir uck && cd uck
tar xvfz ../uck_2.4.7.orig.tar.gz
./localbuild.sh
cd dist
sudo dpkg -i uck_2.4.7-0ubuntu1_all.deb

Теперь подготовим наши настройки. Для этого создадим папку uck_scripts:
mkdir ~/uck_scripts

и в ней дерево нужных папок:
cd ~/uck_scripts
mkdir root && cd root
mkdir etc
mkdir etc/apt
mkdir etc/apt/sources.list.d
mkdir etc/skel
mkdir usr
mkdir usr/bin
mkdir usr/share
mkdir usr/share/backgrounds
mkdir usr/share/glib-2.0
mkdir usr/share/glib-2.0/schemas
mkdir usr/share/icons
mkdir usr/share/icons/flags

Для чего нужны эти папки?
root — все файлы из этой папки мы позже скопируем в образ, а пока разберёмся с подпапками.
etc/apt — папка со списком репов. Мы будем использовать репы из текущей системы. Потом можно и подправить.
cd ~/uck_scripts/root/etc/apt
# копируем список репов из нашей системы
sudo cp /etc/apt/sources.list .
# мне нужна Opera
cd sources.list.d
sudo cp /etc/apt/sources.list.d/opera.list .

Мой файл sources.list выглядит так:
cat sources.list
deb http://archive.ubuntu.com/ubuntu quantal main restricted
deb http://archive.ubuntu.com/ubuntu quantal-updates main restricted
deb http://archive.ubuntu.com/ubuntu quantal universe
deb http://archive.ubuntu.com/ubuntu quantal-updates universe
deb http://archive.ubuntu.com/ubuntu quantal multiverse
deb http://archive.ubuntu.com/ubuntu quantal-updates multiverse
deb http://archive.ubuntu.com/ubuntu quantal-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu quantal-security main restricted
deb http://archive.ubuntu.com/ubuntu quantal-security universe
deb http://archive.ubuntu.com/ubuntu quantal-security multiverse
deb http://archive.canonical.com/ubuntu quantal partner
deb http://extras.ubuntu.com/ubuntu quantal main


etc/skel — это «волшебная» папка. Все файлы, которые в ней находятся, автоматически копируются в профиль программой adduser при создании пользователя. Поэтому сюда можно спокойно складывать настройки программ, иконки и т.д. Чем мы и займёмся:
cd ~/uck_scripts/root/etc/skel
# значок пользователя
copy ~/.face .
# понравившийся набор иконок
copy -r ~/.icons/myelementary/ .
# настроенный профиль для Opera
# (я создал нового пользователя test, настроил Oper`у как мне понравилось и этот профиль скопировал)
# sudo copy -r /home/test/.opera .
copy -r ~/.opera .

usr/bin — в эту папку можно «предустановить» свои собственные скрипты. После запуска LiveCD или установки системы их можно будет запускать в терминале без указания пути любому пользователю.
cd ~/uck_scripts/root/usr/bin
cp ~/scripts/ .
# разрешим запуск скриптов
sudo chmod 755 *

usr/share/backgrounds — здесь лежат обои рабочего стола. Ниже мы заменим имя стандартного рисунка, а пока подкинем свой файлик:
cd ~/uck_scripts/root/usr/share/backgrounds
cp ~/wallpaper.jpg .

usr/share/glib-2.0/schemas — содержит настройки «системного реестра» Ubuntu для Gnome, Unity и большинства других программ — параметры программы GConf, которые устанавливаются по умолчанию для каждого нового пользователя.
Я долго пытался найти как применить эти настройки к LiveCD и нашел хороший manual. Вкратце. В этой папке все настройки хранятся в xml-файлах "*.gschema.xml". Но редактировать их не очень удачная мысль. Существует трюк переопределения настроек. Для этого нужно создать свой ini-файл nn_*.gschema.override (где nn-порядковый номер от 01 до 99, который является приоритетом для применения настроек, чем выше число, тем больше приоритет) и запустить «glib-compile-schemas» в папке для «компиляции» схем. Ниже мы запустим компиляцию, а пока подготавливаем файл с настройками:
cd ~/uck_scripts/root/usr/share/glib-2.0/schemas
cp ~/99_MY_ubuntu-settings.gschema.override

Содержимое файла 99_MY_ubuntu-settings.gschema.override:

cat 99_MY_ubuntu-settings.gschema.override
[com.canonical.Unity.Launcher]
favorites=['application://ubiquity-gtkui.desktop', 'unity://expo-icon', 'application://opera-browser.desktop', 'application://nautilus.desktop', 'unity://running-apps', 'unity://devices']
[com.canonical.Unity.Panel]
systray-whitelist=['all']
[com.canonical.unity-greeter]
theme-name="Radiance"
[org.compiz.unityshell]
show-hud=""
disable-show-desktop=true
icon-size=32
[org.compiz.core]
hsize=1
vsize=1
[com.canonical.indicator.datetime]
time-format="custom"
custom-time-format="%e %b %Y %A.   %H:%M:%S"
[org.gnome.libgnomekbd.indicator]
show-flags=true
[org.gnome.desktop.background]
picture-uri='file:///usr/share/backgrounds/wallpaper.jpg'
[org.gnome.libgnomekbd.keyboard]
layouts=['us', 'ru']
[org.gnome.libgnomekbd.keyboard]
options=['grp\tgrp:ctrl_shift_toggle']
[org.gnome.nautilus.desktop]
volumes-visible=true
[org.gnome.nautilus.preferences]
default-folder-viewer="list-view"
[org.gnome.nautilus.preferences]
show-hidden-files=true
[org.gnome.nautilus.preferences]
show-advanced-permissions=true
[org.gnome.nautilus.window-state]
start-with-status-bar=true
[org.gnome.desktop.interface]
gtk-theme="Radiance"
[org.gnome.desktop.interface]
icon-theme="myelementary"
[org.gnome.desktop.interface]
menus-have-icons=true
[org.gnome.desktop.interface]
buttons-have-icons=true
[org.gnome.desktop.interface]
ubuntu-overlay-scrollbars=false
[com.canonical.indicator.session]
show-real-name-on-panel=true


Посмотреть что означают эти настройки можно запустив:
gconf-editor

и прогуляться по веткам «реестра», указанным в квадратных скобках. Большинство параметров имеют описания и варианты возможных значений.

usr/share/icons/flags — сюда скопируем флаги для русской/английской раскладок, чтобы показывать в трее:
cd ~/uck_scripts/root/usr/share/icons/flags
wget http://suservice.net/icons/flags2/{ru,us}.png

Настало время подготовить два основных скрипта.
Первый скрипт будем запускать в терминале основной системы:
cd ~/uck_scripts/
touch customize
sudo chmod 755 customize
gedit customize

Содержимое файла customize:

#!/bin/bash
# переименуем обои рабочего стола
./change_wallpapper
curDir=$(pwd)
uckDir="$HOME/tmp/remaster-root"
# копируем все файлы в "remaster-root"
cd root
sudo cp -r * "$uckDir"
cd "$curDir"
# компилируем настройки "реестра"
cd "$uckDir/usr/share/glib-2.0/schemas"
sudo glib-compile-schemas .


Второй скрипт будем запускать в терминале подготавливаемой системы:
cd ~/uck_scripts/root/usr/bin
touch run_in_chrooted
sudo chmod 755 run_in_chrooted
gedit run_in_chrooted

Содержимое файла run_in_chrooted:
#!/bin/bash
# удаляем ненужное
apt-get remove --purge unity-lens-shopping account-plugin* apparmor espeak-data evolution-data-server example-content firefox* gwibber-service gnome-orca remmina-common rhythmbox-data signon-ui empathy* totem-common transmission-common ubuntuone* unity-webapps-common whoopsie zeitgeist-core deja-dup landscape-client-ui-install thin-client-config-agent gnome-accessibility-themes 
# устанавливаем ключ репа Oper`ы
wget -O - http://deb.opera.com/archive.key | apt-key add -
# обновляем систему
apt-get update && apt-get upgrade
# устанавливаем нужные программы
apt-get install audacious cheese gdebi gimp gparted openssh-server opera samba smplayer synaptic thunderbird linux-headers-generic linux-image-generic linux-signed-image-generic
# чистим систему
apt-get autoremove && apt-get autoclean && apt-get clean
# показываем в автозагрузке все программы
sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/*.desktop


И маленький скрипт для замены обоев:
cd ~/uck_scripts/
touch change_wallpapper
sudo chmod 755 change_wallpapper
gedit change_wallpapper

Содержимое файла change_wallpapper:
#!/bin/bash
curDir=$(pwd)
#uckDir=""
uckDir="$HOME/tmp/remaster-root"
if [[ -f "$uckDir/usr/share/backgrounds/warty-final-ubuntu.png" ]]; then
	sudo rm "$uckDir/usr/share/backgrounds/warty-final-ubuntu.png"
fi
if [[ -f "$uckDir/usr/share/backgrounds/wallpaper.jpg" ]]; then
	sudo rm "$uckDir/usr/share/backgrounds/wallpaper.jpg"
fi
sudo sed -i 's/warty-final-ubuntu.png/wallpaper.jpg/g' $uckDir/usr/share/gnome-background-properties/ubuntu-wallpapers.xml
sudo sed -i 's/Ubuntu/Happy elefants/g' $uckDir/usr/share/gnome-background-properties/ubuntu-wallpapers.xml


Запускаем Ubuntu Customization Kit:
uck-gui

Выбираем нужные языки, подсовываем с оф.сайта Ubuntu iso-файл (я использовал ubuntu-12.10-desktop-amd64.iso), соглашаемся создать hybrid-CD чтобы можно было скопировать на флешку, вводим пароль и ждем распаковки.
После распаковки iso появится окно с предложением «Run console application» и «Continue building», но мы пока это окно не трогаем.
Нам надо запустить Первый скрипт. Поэтому жмём Ctrl+Alt+T и в терминале вводим:
cd ~/uck_scripts
./customize

жмём Enter и когда нужно вводим sudo-пароль.
Закрываем этот терминал.

Вот теперь выбираем «Run console application». Откроется окно терминала и туда смело вводим:
run_in_chrooted

жмём Enter и ждём выполнения Второго скрипта.
По окончании закрываем терминал, жмём «Continue building» и ждём упаковку нового образа.

Всё!!!

Наш образ livecd.iso лежит и ждёт в папке:
nautilus ~/tmp/remaster-new-files/ &

Копируем его на CD или флешку, загружаемся и наслаждаемся.

Спасибо всем за внимание!
Желаю всем удачного кустомайзинга своих систем!


P.S. Чтобы разобраться во всех тонкостях мне понадобились выходные. Зато теперь примерно за 20-30 минут у меня есть флешка с уже готовой обновленной системой настроенной под меня.
P.S.S. Извиняюсь за отсутствие картинок, но интерфейс UCK на столько минимальный, что я решшил этим пренебречь.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.