Ubuntu Core — это минимальная заготовка корневой файловой системы с поддержкой репозиториев Ubuntu и установкой пакетов с помощью apt-get. Доступна для платформ i386, amd64 и armel.
Почему бы не использовать такую заготовку при создании desktop-системы, чтобы минимизировать количество неиспользуемых пакетов? Ниже описание процесса установки до запуска среды рабочего стола на виртуальной машине в качестве proof-of-concept.
Весь процесс установки проводится из среды Live-CD Ubuntu 12.04. На виртуальной машине подключен единственный жесткий диск и установка будет проведена на один раздел, без создания swap'а. Архив Ubuntu Core взят здесь.
Создадим простейшую разметку на диске (создайте дополнительные разделы и swap по желанию):
Отформатируем единственный созданный раздел в ext4:
Примонтируем раздел и распакуем заготовку:
Теперь можно примонтировать dev/proc/sysfs к целевой файловой системе и сменить корневую директорию:
По желанию, отключим автоматическую установку рекомендованных пакетов:
И приготовимся к установке других пакетов:
Для начала, разберемся с языками и локалями…
Обязательно добавим общеупотребительные пакеты (sudo, less, vim-tiny, iputils-ping, net-tools и другие):
Чтобы неожиданно не остаться в off-line'е после грядущей перезагрузки, настроим сеть (Ethernet с DHCP-сервером в данном случае, делайте настройки под вашу конфигурацию!):
Создадим хотя бы одного пользователя, иначе система так и останется вещью в себе, и зададим ему пароль:
Подключите репозитории
(или отредактируйте файл
Если планируется установка пакетов из других репозиториев, можно добавить их на этом этапе.
Самый простой, быстрый и универсальный вариант — установить ядро из репозитория:
По желанию или при необходимости, можно собрать ядро из исходных кодов (см. руководство; здесь используется The Old-Fashioned Debian Way).
Установим пакет с исходным кодом ядра и инструменты для сборки:
(
Распакуем архив с исходным кодом ядра куда-нибудь для сборки:
(права суперпользователя не понадобятся до самой установки нового ядра в систему)
Настроим, взяв за основу конфигурацию по умолчанию (
Запустим сборку в несколько потоков (
Установим новое ядро:
(собранные пакеты находятся на уровень выше исходных кодов)
Теперь, чтобы система стала самостоятельной, ей нехватает только загрузчика. Установим стандартный для Ubuntu
Самые сложные этапы уже выполнены и система готова к самостоятельной загрузке (будем надеяться, я ничего не пропустил… скрещу пальцы на удачу). Осталось только поставить обещанную среду рабочего стола, что и сделаем (выберите вместо
После выполнения всех этапов (я не ставил ядро из репозитория — больше 150 МБ и сбросил кэш системы управления пакетами,
После тренировок «на кошках» (на виртуальной машине) разворачивание настольной системы из Ubuntu Core не представляет каких-либо сложностей. Возможно, еще немного подумав, я проведу более жизненный эксперимент перейдя таким образом на Ubuntu 12.04 вместо обновления установленной 11.10.
Почему бы не использовать такую заготовку при создании desktop-системы, чтобы минимизировать количество неиспользуемых пакетов? Ниже описание процесса установки до запуска среды рабочего стола на виртуальной машине в качестве proof-of-concept.
Весь процесс установки проводится из среды Live-CD Ubuntu 12.04. На виртуальной машине подключен единственный жесткий диск и установка будет проведена на один раздел, без создания swap'а. Архив Ubuntu Core взят здесь.
Приготовления
Создадим простейшую разметку на диске (создайте дополнительные разделы и swap по желанию):
$ sudo -s
# parted /dev/sda
(parted) mklabel gpt
(parted) mkpart primary ext4 0 -1
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) name 1 root
(parted) set 1 boot on
Отформатируем единственный созданный раздел в ext4:
# mkfs -t ext4 /dev/sda1
Примонтируем раздел и распакуем заготовку:
# mkdir /mnt/target && mount /dev/sda1 /mnt/target
# cd /mnt/target && tar -xf ~/Downloads/ubuntu-core-12.04-core-amd64.tar.gz
Теперь можно примонтировать dev/proc/sysfs к целевой файловой системе и сменить корневую директорию:
# mount --bind /dev /mnt/target/dev
# mount -t proc proc /mnt/target/proc
# mount -t sysfs sysfs /mnt/target/proc
# chroot /mnt/target
Настройка новой системы
По желанию, отключим автоматическую установку рекомендованных пакетов:
# cat > /etc/apt/apt.config.d/00local
APT::Install-Recommends "0";
APT::Install-Suggests "0";
^D
И приготовимся к установке других пакетов:
# apt-get update && apt-get upgrade
Локаль
Для начала, разберемся с языками и локалями…
# apt-get install language-pack-en language-pack-ru
# update-locale LC_ALL=en_US.UTF8
Общеупотребительные пакеты
Обязательно добавим общеупотребительные пакеты (sudo, less, vim-tiny, iputils-ping, net-tools и другие):
# apt-get install ubuntu-minimal
Сеть
Чтобы неожиданно не остаться в off-line'е после грядущей перезагрузки, настроим сеть (Ethernet с DHCP-сервером в данном случае, делайте настройки под вашу конфигурацию!):
cat >> /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
^D
Пользователи
Создадим хотя бы одного пользователя, иначе система так и останется вещью в себе, и зададим ему пароль:
# useradd -m -s /bin/bash -G adm,cdrom,sudo,dip,plugdev core-admin
# passwd core-admin
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Репозитории пакетов
Подключите репозитории
universe
, если ядро будет собираться с помощью make-kpkg
, иначе по желанию:sed -i.original 's/^# \(deb.*precise.*universe\)$/\1/' /etc/apt/sources.list
(или отредактируйте файл
/etc/apt/sources.list
вручную с помощью vim.tiny
)Если планируется установка пакетов из других репозиториев, можно добавить их на этом этапе.
Ядро
Из репозитория
Самый простой, быстрый и универсальный вариант — установить ядро из репозитория:
# apt-get install linux-generic
Из исходных кодов
По желанию или при необходимости, можно собрать ядро из исходных кодов (см. руководство; здесь используется The Old-Fashioned Debian Way).
Установим пакет с исходным кодом ядра и инструменты для сборки:
# apt-get install linux-source build-essential kernel-package libncurses5-dev
(
libncurses5-dev
понадобится для выполнения make nconfig
, более удобного, чем старый menuconfig
)Распакуем архив с исходным кодом ядра куда-нибудь для сборки:
# sudo -iu core-admin
(права суперпользователя не понадобятся до самой установки нового ядра в систему)
$ mkdir ~/src
$ cd ~/src && tar -xf /usr/src/linux-source-<version>.tar.bz2
$ cd linux-source-<version>
Настроим, взяв за основу конфигурацию по умолчанию (
make defconfig
) заточенную под целевую систему (make localmodconfig
):$ make defconfig && make localmodconf && make nconfig
Запустим сборку в несколько потоков (
-j N
) с измерением времени выполнения (time cmd
):$ time fakeroot make-kpkg -j 4 --initrd kernel-image kernel-headers
Установим новое ядро:
$ cd ..
(собранные пакеты находятся на уровень выше исходных кодов)
$ sudo dpkg -i linux-image-<version>.deb linux-headers-<version>.deb
Загрузчик
Теперь, чтобы система стала самостоятельной, ей нехватает только загрузчика. Установим стандартный для Ubuntu
grub2
:$ sudo apt-get install grub2
Среда рабочего стола
Самые сложные этапы уже выполнены и система готова к самостоятельной загрузке (будем надеяться, я ничего не пропустил… скрещу пальцы на удачу). Осталось только поставить обещанную среду рабочего стола, что и сделаем (выберите вместо
unity-*
то, что вам больше нравится):# apt-get install xorg lightdm unity-greeter gnome-session unity-2d
Заключение
После выполнения всех этапов (я не ставил ядро из репозитория — больше 150 МБ и сбросил кэш системы управления пакетами,
apt-get clean
; но зато для пересборки ядра был установлен тяжелый пакет build-essential
) система занимает на диске не больше 1,8 ГБ.После тренировок «на кошках» (на виртуальной машине) разворачивание настольной системы из Ubuntu Core не представляет каких-либо сложностей. Возможно, еще немного подумав, я проведу более жизненный эксперимент перейдя таким образом на Ubuntu 12.04 вместо обновления установленной 11.10.
Примечания
- В полученной системе могут отсутствуют man/info pages, если об этом не позаботиться специально, не удивляйтесь.
- Среда рабочего стола может выглядеть местами убого, если не доставить привычные темы, примочки и фенечки.
- Некоторые ссылки на packages.ubuntu.com не работали на момент публикации (500 Internal Server Error). Полагаю, это временное явление.
- В качестве виртуальной машины я использовал VirtualBox. Ее образы жестких дисков легко монтируются к хост-системе с помощью
qemu-nbd
(см. How to mount a VirtualBox VDI image) и большую часть работы (в том числе ресурсоемкую сборку ядра) можно сделать прямо из хост-системы.