Отладочная шпаргалка для 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 &