Я устал вручную настраивать экземпляры Ubuntu для тестирования веб-приложений и настройки рабочих станций. Еще больше меня расстраивают проблемы, вызванные несогласованными конфигурациями.
Есть ли метод (надеюсь, не отнимающий слишком много времени на изучение и настройку), который позволяет автоматизировать установку и настройку сервера или рабочей станции Ubuntu из ISO. Это в первую очередь для экземпляров виртуальных машин, но было бы полезно также создавать экземпляры на оборудовании.
Я специально ищу метод для автоматизации установки библиотек (apt-get), настройки служб (таких как Apache и MySQL), добавления стороннего программного обеспечения (загрузка, извлечение и сборка) и добавления библиотек в языки сценариев (например, , Ruby Gems или пакеты CPAN для Perl).
Если вам нужен быстрый и простой способ развертывания Linux, ознакомьтесь с Лучшее устройство для развертывания. Он не особо уникален ни по одной из своих функций (любой может настроить PXE-сервер и файлы кикстарта), но способ его представления и упаковки великолепен.
Я рекомендую v2.0 Бета. Он довольно стабилен и намного дружелюбнее, чем 1.4.
Я думаю, что наиболее распространенный метод Debian / Ubuntu - выполнить базовую установку с предпосев. Затем используйте что-то вроде кукольный для настройки / установки после установки.
Если вы не хотите или не можете запускать полную установку марионетки, другой вариант - написать сценарии для настройки системы после установки, а затем использовать их. Я храню некоторые скрипты, необходимые для настройки систем, в моем репозитории SVN, который доступен по https.
Когда я хочу использовать один из скриптов в SVN на одной из машин, я запускаю его прямо с сервера SVN с помощью curl.
curl --silent https://svn.example.org/linuxdev/config_samples/lenny_setup/setup-aptsources | bash
Этот конкретный сценарий устанавливает apt. Это в основном содержимое скрипта.
#!/bin/sh
export PATH=/usr/sbin:/usr/bin:/sbin:/bin
etckeeper commit 'pre-commit setup-aptsources'
curl --silent "https://svn.example.org/linuxdev/config_samples/lenny/apt/sources.list" > /etc/apt/sources.list
etckeeper commit 'post-commit setup-aptsources'
apt-get update
В реальной версии моего скрипта есть больше проверок ошибок, чтобы правильно реагировать, если что-то сломалось. Я использую что-то вроде etckeeper, поэтому важно, что если что-то сломается, вы можете легко определить, что изменилось, и вернуться.
взгляните на файлы preseed debian с помощью debconf. Не исключайте написания собственных сценариев для настройки ваших установок.
Похоже, у Ubuntu есть некоторая совместимость с Кикстарт файлы.
Почему бы просто не написать несколько сценариев на bash? Все, что вы можете сделать из приглашения оболочки, вы можете сделать из сценария оболочки. Он портативен, прост в освоении (сам по себе ценный навык) и прост в обслуживании.
Также вы упомянули виртуальные машины: если вы используете VMWare, вы можете легко создать шаблон для каждого нужного вам варианта.
Мы используем Ubuntu-VM-Builder с некоторыми предопределенными файлами конфигурации и несколькими таможенными скриптами. (Это для libvirt / kvm.)
Вот часть примера:
sudo vmbuilder kvm ubuntu --hostname somename --arch i386 --ip 192.168.222.21 \
--gw 192.168.222.1 --dns 192.168.222.7 \
--part vmbuilder.partition \
--user peterh --name 'Peter Hansen' --pass default --tmpfs - \
--firstboot vmbuilder.boot.sh --mirror http://192.168.222.1/ubuntu \
--suite intrepid --flavour virtual --addpkg acpid --libvirt qemu:///system
Это подготавливает виртуальную машину с сетью, разделами диска, начальным пользователем, исходным URL-адресом apt-get и сценарием, который выполняется при первой загрузке. Сценарий включает следующее:
# Install openssh-server
apt-get update
apt-get install -qqy --force-yes openssh-server
Это запускает SSH. С этого момента мы можем использовать ssh
для установки дополнительных пакетов и выполнения других настроек удаленно.
Мы также начали экспериментировать с libguestfs (из Python) как интересный альтернативный подход к некоторым настройкам после создания.
Редактировать: Я должен отметить, что приведенный выше пример фактически использовался с vmbuilder, который является более старой версией ubuntu-vm-builder. Сейчас детали могут немного отличаться, но принципы те же.