Шпаргалка для debootstrap

Розгортання необхідної системи для швидкої відладки


Іноді треба швидко перевірити що-небудь у певному середовищі, нативному для цієї програми, наприклад в ubuntu.
І ні, це не docker, тому що часто треба мати нормальну можливість працювати з цим середовищем як із системою, правити конфіги, ставити пакети тощо.
Перезбирати образи docker або ж налаштовувати щось всередині них дуже сумнівне і дивне задоволення.
KVM тут не потрібен, LXC довше і складніше щодо взаємодії.
Так, найпростіше це debootstrap та звичайний chroot.

Зазначу, тут не про ізоляцію та безпеку, мова йде про швидкий спосіб запустити довірений софт у певному середовищі.

amd64 xenial

1
2
mkdir /data/.box/amd64_xenial
/usr/sbin/debootstrap --verbose --include=nano,bash-completion,aptitude --arch amd64 xenial /data/.box/amd64_xenial http://archive.ubuntu.com/ubuntu/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mount -t proc proc /data/.box/amd64_xenial/proc
mount --bind /dev /data/.box/amd64_xenial/dev
mount -t devpts devpts /data/.box/amd64_xenial/dev/pts
mount -t sysfs sysfs /data/.box/amd64_xenial/sys

chroot /data/.box/amd64_xenial

# Додаємо користувача, uid та gid користувача повинні відрізнятися від стандартних хоста
groupadd --gid 7231 user
adduser --home /home/user --ingroup user --uid 7231 user

dpkg --add-architecture i386
apt-get update
apt-get install software-properties-common
add-apt-repository multiverse
apt-get update
aptitude install locales binutils
dpkg-reconfigure locales

i386 xenial

1
2
mkdir /data/.box/i386_xenial
/usr/sbin/debootstrap --verbose --include=nano,bash-completion,aptitude --arch i386 xenial /data/.box/i386_xenial http://archive.ubuntu.com/ubuntu/

amd64 bionic

1
2
mkdir /data/.box/amd64_bionic
/usr/sbin/debootstrap --verbose --include=nano,bash-completion,aptitude --arch amd64 bionic /data/.box/amd64_bionic http://archive.ubuntu.com/ubuntu/

debian

1
2
3
4
5
6
7
8
/usr/sbin/debootstrap --verbose --include=mc,nano,htop,bash-completion,aptitude --arch amd64 jessie /data/.box/jessie http://ftp.de.debian.org/debian/
printf 'jessie' > /data/.box/jessie/etc/debian_chroot

# Непривілейований користувач, без шелла та пароля
chroot /data/.box/jessie

groupadd --gid 11001 tester
adduser --home /home/tester --shell /bin/false --ingroup tester --disabled-password --uid 11000 tester

Обмеження мереж на рівні хоста

1
2
3
# Доступ тільки до localhost
iptables -A OUTPUT -d 127.0.0.1 -m state --state NEW,RELATED,ESTABLISHED -m owner --uid-owner 11000 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -m owner --uid-owner 11000 -j DROP

Запуск програми у чруті

1
2
3
chroot /data/.box/jessie/ /usr/bin/sudo -u tester -H /usr/bin/uxterm >/dev/null 2>&1 &
# Або раритетний firefox
chroot /data/.box/lenny/ /usr/bin/sudo -u tester -H /opt/firefox_4/firefox >/dev/null 2>&1 &