четверг, 11 декабря 2014 г.

Попытка построить debian testing box для vagrant c помощью packer

В случае облаков, особенно если они не Amazon и не Digital Ocean, а вполне себе обычные российские хостеры, надеятся на широкий выбор базовых образов — увы, не приходится.

Если есть debian 7.х это уже достаточно хорошо.

Но мне обычно нужно посвежее, я привык сидеть на debian testing, со всеми мякотками docker-ов и свежих ядер.

Поэтому обновляю сразу после создания через ansible.

Но для локальных образов типа виртуальных машин libvirtd и virtualbox которые я поднимаю с помощью vagrant: поднимать сначала чистый debian 7 а затем обновлять его до testing — тратить лишнее время в пустую.

На момент написания этой заметки в vagrantcloud не было готовых образов (box) для debian testing.

Поэтому попробуем построить их с помощью packer.

Вот репозиторий с конфигурацией packer, большую часть я успешно форкнул, подменил лишь url на нужный образ, убрал не нужный мне chef и puppet.

Изменил также, механизм с sudoers, я не понял как они хотели использовать это:
# Set up password-less sudo for user vagrant
echo 'vagrant ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/vagrant
chmod 440 /etc/sudoers.d/vagrant
Тут же проблема, курицы и яца, что б добавить такую строчку надо уже быть root, что бы быть root нужна такая строчка.
Вот тут вот есть объяснение, но я всё еще не понял как это может работать.

Мне показалось проще решить это через вынесение в preseed.cfg как:

d-i preseed/late_command string sed -i -e 's/vagrant\tALL=(ALL)\tNOPASSWD: ALL' /etc/sudoers



Ну и тут начались прелести night-build.

Наткнулся на странный глюс с part-auto в debian-installer, ни  с lvm ни без неё он работать не хотел.


Оказывается, баг в инсталлере:


На мой взгляд, они забыли ext4 вкомпилить, но я не стал копать.

Но не стал бороться, разметил диск вручную с xfs, через вот эту инструкцию.

И ещё вот тут, даже на русском.


Запускаем
packer build debian-testing

И мучаемся с отладкой.

Что бы видеть что происходит в виртуалке, я отключаю headless в false.

К сожалению, сегодняшний nightly build оказался совсем уж кривым.

После мучений с разбивкой, появилась проблема с grub2.
Даже когда оно устанавливается, затем почему то не грузится.

Что ж, тем лучше. Ценный опыт  и ответ на возможный вопрос почему debian/testing нет в vagrantcloud.

Либо попробую еще раз через пару дней, когда они build обновят.
Либо есть ещё куча вариантов, можно сменить netinst на другой образ, можно попробовать построить самому этот образ, или освоить preseed дял их нового инсталятора, которые di-2 сборки.

Также остается беспроигрышный полу-ручной вариант.
Взять box с 7.7, накатить туда full-upgrade через вот этот playbook ansible а затем уже тем же packer перепаковать его снова в box.

С таким количеством вариантов, продолжение неминуемо следует.