Skip to content

Instantly share code, notes, and snippets.

@aont
Last active June 17, 2025 06:07
Show Gist options
  • Save aont/c287006a2bae18c4b7a1a03522329b9a to your computer and use it in GitHub Desktop.
Save aont/c287006a2bae18c4b7a1a03522329b9a to your computer and use it in GitHub Desktop.

Generate slimmed down WSL ubuntu image

example for ifuse

#!/bin/bash
fileA='z_to_be_removed.txt'
fileB='z_keep.txt'
# 保護パッケージの読み込み
declare -A protect_pkgs
while IFS= read -r line; do
[[ -n "$line" ]] && protect_pkgs["$line"]=1
done < "$fileB"
# 削除済みパッケージを記憶
removed_pkgs=()
while IFS= read -r pkg; do
[[ -z "$pkg" ]] && continue
# シミュレーションで実際に削除されるパッケージ一覧を取得
to_remove=$(apt-get remove --simulate "$pkg" | grep ^Remv | awk '{print $2}')
if [[ -z "$to_remove" ]]; then
echo "No packages will be removed for: $pkg"
continue
fi
# 保護対象が含まれていればスキップ
skip=0
for p in $to_remove; do
# echo "protect_pkgs[$p] = ${protect_pkgs[$p]}"
if [[ ${protect_pkgs[$p]} ]]; then
echo "Skipping removal of $pkg because protected package '$p' would be removed"
skip=1
break
fi
done
if [[ $skip -eq 0 ]]; then
echo "Removing $pkg"
# echo "to_remove = ${to_remove[@]}"
apt-get remove -y "$pkg"
removed_pkgs+=("$pkg")
# ifuse --list-apps を実行してエラーなら中断
ifuse --list-apps 1>/dev/null
if [[ $? -ne 0 ]]; then
echo "Error: 'ifuse --list-apps' failed after removing $pkg"
echo "Packages removed before error:"
for r in "${removed_pkgs[@]}"; do
echo " $r"
done
exit 1
fi
fi
done < "$fileA"
apt-get clean
ifuse
usbutils
usbmuxd
usb.ids
bash
udev
adduser
apt
base-files
base-passwd
bash
bsdutils
coreutils
dash
debconf
debianutils
diffutils
dpkg
e2fsprogs
findutils
fuse3
gcc-14-base
gpgv
grep
gzip
hostname
ifuse
init
init-system-helpers
libacl1
libapparmor1
libapt-pkg6.0t64
libargon2-1
libassuan0
libattr1
libaudit-common
libaudit1
libblkid1
libbz2-1.0
libc-bin
libc6
libcap-ng0
libcap2
libcom-err2
libcrypt1
libcryptsetup12
libdebconfclient0
libdevmapper1.02.1
libext2fs2t64
libfdisk1
libffi8
libfuse2t64
libfuse3-3
libgcc-s1
libgcrypt20
libgmp10
libgnutls30t64
libgpg-error0
libhogweed6t64
libidn2-0
libimobiledevice6
libjson-c5
libkmod2
liblz4-1
liblzma5
libmd0
libmount1
libnettle8t64
libnpth0t64
libp11-kit0
libpam-modules
libpam-modules-bin
libpam-runtime
libpam0g
libpcre2-8-0
libplist-2.0-4
libseccomp2
libselinux1
libsemanage-common
libsemanage2
libsepol2
libsmartcols1
libss2
libssl3t64
libstdc++6
libsystemd-shared
libsystemd0
libtasn1-6
libtinfo6
libudev1
libunistring5
libusb-1.0-0
libusbmuxd6
libuuid1
libxxhash0
libzstd1
login
logsave
mount
ncurses-base
ncurses-bin
original-awk
passwd
perl-base
sed
sudo
systemd
systemd-dev
systemd-hwe-hwdb
systemd-sysv
sysvinit-utils
tar
ubuntu-keyring
udev
usbmuxd
usbutils
util-linux
zlib1g

generate with

dpkg -l | grep ^i | awk '{print $2}' | sed -e 's/:amd64$//g'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment