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

Ubuntu Core как облегченная альтернатива Ubuntu

Ubuntu Core — это минимальная заготовка корневой файловой системы с поддержкой репозиториев Ubuntu и установкой пакетов с помощью apt-get. Доступна для платформ i386, amd64 и armel.

Почему бы не использовать такую заготовку при создании 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) и большую часть работы (в том числе ресурсоемкую сборку ядра) можно сделать прямо из хост-системы.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.