mirror of https://github.com/artizirk/dotfiles
Arti Zirk
3 weeks ago
1 changed files with 113 additions and 0 deletions
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash |
||||
set -euo pipefail |
||||
|
||||
DEFAULT_SUITE="bookworm" |
||||
BASE="/var/lib/machines" |
||||
|
||||
if [[ $EUID -ne 0 ]]; then |
||||
echo "This script must be run as root" 1>&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
function show_help { |
||||
cat <<-EOF |
||||
Usage: $0 -h | -n NAME [-s SUITE] [-d] |
||||
|
||||
Create a nspanw container called NAME |
||||
|
||||
-h help |
||||
-n container name |
||||
-s debian suite (default: ${DEFAULT_SUITE}) |
||||
-d delete container |
||||
EOF |
||||
} |
||||
|
||||
while getopts 'hn:s:d' flag; do |
||||
case "${flag}" in |
||||
h) show_help; exit 0;; |
||||
n) name="${OPTARG}" ;; |
||||
s) suite="${OPTARG}" ;; |
||||
d) delete=1 ;; |
||||
*) echo "Unexpected option ${flag}" ;; |
||||
esac |
||||
done |
||||
|
||||
SUITE=${suite:-$DEFAULT_SUITE} |
||||
|
||||
if [[ -z ${name:-} ]]; then |
||||
echo "Container name is unset" |
||||
echo |
||||
show_help |
||||
exit; |
||||
else |
||||
echo "Container name is $name and suite is ${SUITE}" |
||||
fi |
||||
|
||||
if [[ -n ${delete:-} ]]; then |
||||
btrfs subvolume delete "${BASE}/$name" |
||||
exit 0 |
||||
fi |
||||
|
||||
btrfs subvolume create "${BASE}/${name}" |
||||
|
||||
APT_CACHE_DIR="/var/cache/apt/archives" |
||||
|
||||
if [[ -d ${APT_CACHE_DIR} ]]; then |
||||
CACHE_ARGS="--cache-dir=${APT_CACHE_DIR}" |
||||
else |
||||
CACHE_ARGS="" |
||||
fi |
||||
|
||||
debootstrap ${CACHE_ARGS} "${SUITE}" "${BASE}/${name}" |
||||
|
||||
mkdir -p "$BASE/$name/root/.ssh" |
||||
chmod 700 "$BASE/$name/root/.ssh" |
||||
if [ -f "/root/.ssh/authorized_keys" ]; then |
||||
cp -v /root/.ssh/authorized_keys "$BASE/$name/root/.ssh/authorized_keys" |
||||
chmod 600 "$BASE/$name/root/.ssh/authorized_keys" |
||||
echo "added ssh keys to root" |
||||
fi |
||||
|
||||
if [[ -e "$BASE/$name/etc/resolv.conf" ]]; then |
||||
rm "$BASE/$name/etc/resolv.conf" |
||||
fi |
||||
|
||||
if [[ -e "$BASE/$name/etc/hostname" ]]; then |
||||
rm "$BASE/$name/etc/hostname" |
||||
fi |
||||
|
||||
systemd-nspawn --console=pipe -D "$BASE/$name" /bin/bash <<'EOF' |
||||
echo "Now running inside nspawn $(pwd)" |
||||
|
||||
source /etc/os-release |
||||
|
||||
if [[ "$ID" == "ubuntu" ]]; then |
||||
sed -i '1 s/$/ restricted universe multiverse/' /etc/apt/sources.list |
||||
elif [[ "$ID" == "debian" ]]; then |
||||
if [[ $VERSION_ID -le 11 ]]; then |
||||
sed -i '1 s/$/ contrib non-free/' /etc/apt/sources.list |
||||
else |
||||
sed -i '1 s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list |
||||
fi |
||||
fi |
||||
|
||||
apt-get update |
||||
apt-get install --yes --no-install-recommends locales dbus ssh python3 |
||||
|
||||
echo "locales locales/default_environment_locale select en_US.UTF-8" | debconf-set-selections |
||||
echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8, et_EE.UTF-8 UTF-8" | debconf-set-selections |
||||
rm /etc/locale.gen |
||||
dpkg-reconfigure --frontend noninteractive locales |
||||
ln -fs /usr/share/zoneinfo/Europe/Tallinn /etc/localtime |
||||
dpkg-reconfigure -f noninteractive tzdata |
||||
|
||||
apt install --yes --no-install-recommends neovim |
||||
update-alternatives --set editor /usr/bin/nvim |
||||
ln -sf /usr/share/nvim/runtime/macros/less.sh /usr/local/bin/vless |
||||
|
||||
# Use systemd-resovled directly by configuring /etc/nsswitch.conf |
||||
apt install --yes --no-install-recommends libnss-resolve |
||||
|
||||
systemctl enable systemd-networkd |
||||
systemctl enable systemd-resolved |
||||
EOF |
Loading…
Reference in new issue