Я хочу получить свой маленький билд-сервер под Ubuntu. Билд-сервер должен быть локальным, вложенным в основную систему, и при этом должен полностью изолировать исходники от живущих снаружи компиляторов, библиотек и прочего барахла (своего рода SDK своими руками).
Здесь будут полезные заметки, которые появились в ходе попыток это сделать.
На билдсервере должна быть минимальная система для динамической линковки:
Здесь будут полезные заметки, которые появились в ходе попыток это сделать.
На билдсервере должна быть минимальная система для динамической линковки:
- GLibc, а лучше LSB libc (минимальная POSIX-совместимая библиотека C, предоставленная проектом Linux Standards Base)
- Библиотеки криптографии (т.к. они иногда обновляются с целью закрытия уязвимостей).
- Библиотеки мультимедиа: OpenGL, OpenAL, SDL2, SDL1.2 (т.к. они соединяют с драйверами)
- Возможно, ещё какие-то библиотеки, которые имеют стабильные API и ABI
- C++ STL (варианты: libstdc++, libc++)
- C++ Boost
- C++ Cocos2dx
- C++ Cinder
- C++ SFML
- C GLFW
- И так далее
Chroot и Debootstrap
ОС Linux позволяет создать виртуальную корневую директорию, и войти в неё из-под оболочки терминала. Получается система в системе, причём вложенная система изолирована (не от вредоносного ПО, а от случайного обращения наружу).
Скрипт debootstrap есть в репозиториях Ubuntu, он позволяет скачать и установить в виртуальный корень целый дистрибутив Debian или Ubuntu произвольной версии. После установки можно будет сделать chroot во вложенную систему, и уже там установить необходимое окружение разработки и так далее.
Вот две типичных команды скачивания/установки вложенной системы
# Скачает и установит 32-битной Trusty (Trusty - это Ubunty 14.04) в папку ./trusty32 sudo debootstrap --arch i386 trusty ./trusty32/ # Скачает и установит Trusty родной архитектуры (x64 на моей машине) в папку ./trusty64 sudo debootstrap trusty ./trusty64/
Ещё debootstap позволяет
- Поставить систему неродной архитектуры, пусть даже ARM (тогда будет запускаться через QEMU)
- Поставить любую доступную версию Debian или Ubuntu
- Указать зеркало, с которого скачивать пакеты (например, зеркала Yandex или локальный сервер в Вашей организации)
Настройка chroot после установки вложенной ОС
- Чтобы войти в chroot-папку, введите "sudo chroot ./trusty32" (trusty32 - путь к вложенной системе в моём случае)
- После установки локаль ещё не настроена, что делает систему не совсем работоспособной. Нагугленная настройка в две строчки выручила меня:
# Английский язык (Американский диалект), кодировка UTF-8. echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen locale-gen
- Войти в chroot-папку может только рут, поэтому для сброса привелегий рута внутри вложенной системы надо настроить пользователя:
# Выполнить 1 раз и пройти консольный мастер настройки пользователя "bb" adduser bb # Выполнять каждый раз для логина под пользователем bb su - bb
- ...