Cập nhật 2019-02-26
Trong thực tế trên một loạt các VPS Ubuntu từ các nhà cung cấp khác nhau ... Tôi đã tìm thấy cách tiếp cận ban đầu (bên dưới) khá dễ vỡ. Trên một số hệ thống, họ sẽ không khởi động lại vì phương thức bên dưới sẽ loại bỏ hạt nhân trên ảo hóa loại KVM (trong khi openvz nó chủ yếu hoạt động). Thay vì chỉ vá các bản hack bên dưới mỗi khi nó bị hỏng, tôi tìm kiếm một cách khác.
Một cách tiếp cận tốt hơn dường như (cho đến nay) là như sau:
# just in case we are retrying and apt is in a bad state
dpkg --configure -a
# DEBIAN_FRONTEND=noninteractive is useful for scripting.
# prevents getting prompts that will hang our script.
# ubuntu-minimal is a meta package that depends on the packages
# in ubuntu-minimal install.
# Need aptitude to autoremove everything we don't depend on.
DEBIAN_FRONTEND=noninteractive \
apt-get --assume-yes install aptitude ubuntu-minimal
# mark all packages as automatically installed except
# ubuntu-minimal, kernel, systemd and openssh.
# For some reason systemd isn't part of ubuntu-minimal.
# Any dependencies of these four packages will be kept.
# All others that aren't dependencies will be removed since
# we have told apt they are automatically installed
# (ie we don't care about them unless we need them as a dep)
DEBIAN_FRONTEND=noninteractive \
aptitude --assume-yes markauto \
'~i!?name(ubuntu-minimal~|linux-generic~|systemd~|openssh-server)'
# purge all removed packages that were not purged.
# removes leftover config/cruft.
DEBIAN_FRONTEND=noninteractive \
aptitude --assume-yes purge '~c'
Cho đến nay điều này hoạt động khá tốt trong thử nghiệm của tôi trên cả ảo hóa loại openvz và kvm. Tôi sử dụng bước này như một bước "bootstrapping" đầu tiên để thu nhỏ hình ảnh trước khi chạy quản lý cấu hình của mình để thiết lập VPS theo cách tôi muốn. Tôi thường thực hiện khởi động lại sau bước này và trước khi quản lý cấu hình để đảm bảo chúng tôi không phá vỡ bất cứ điều gì.
Tôi không làm apt apt hoặc autoclean vì quản lý cấu hình của tôi sẽ cài đặt các gói và vì vậy tôi sẽ phải chạy lại cập nhật apt-get. Nếu bạn đang cố gắng xây dựng một hình ảnh tối thiểu về không gian đĩa, thì tất nhiên có nhiều việc bạn có thể làm.
Thêm một mẹo nữa trong trường hợp bạn mất độ phân giải DNS sau khi thu nhỏ ... trên Ubuntu 16.04, cài đặt độ phân giải được cài đặt tối thiểu trên Ubuntu chưa được cài đặt trước đó vì một số lý do. Gói này (sau khi cài đặt) sẽ đảm bảo /etc/resolv.conf được thiết lập để được xây dựng động và bao gồm chuyển đổi nó thành một liên kết tượng trưng. Nếu VPS của bạn có cấu hình mạng tĩnh (tức là giao diện / IP được định cấu hình tĩnh trong / etc / mạng / giao diện và DNS được định cấu hình tĩnh trong /etc/resolv.conf) thì điều này sẽ phá vỡ độ phân giải dns của bạn. tức là bạn sẽ có thể ping 8.8.8.8 nhưng không phải google.com (máy chủ không xác định). Tôi có một vài nhà cung cấp vps cung cấp VPS theo cách này thay vì cung cấp IP / DNS qua dhcp. Để khắc phục điều này, tôi đã thêm một kiểm tra trước khi giảm thiểu ở trên như sau:
if [ ! -L "/etc/resolv.conf" ]; then
mkdir -p /etc/resolvconf/resolv.conf.d/
cp /etc/resolv.conf /etc/resolvconf/resolv.conf.d/tail
fi
Về cơ bản: Nếu /etc/resolv.conf hiện tại không phải là một liên kết tượng trưng, thì giả sử chúng tôi có cấu hình tĩnh từ nhà cung cấp VPS của chúng tôi. Sao chép tệp vào một tệp "đuôi" đặc biệt để phân giải. Tệp "đuôi" là một tệp đặc biệt mà độ phân giải sẽ nối vào /etc/resolv.conf mà nó xây dựng. Điều này đảm bảo bạn không mất cấu hình DNS tĩnh được tích hợp trong VPS của mình.
Câu trả lời gốc
Theo dõi câu trả lời của @ enzotib ...
Kỳ lạ là các gói bắt buộc / quan trọng / thiết yếu sẽ có các phụ thuộc tùy chọn / phụ. Sẽ nghĩ rằng nếu đó là những phụ thuộc cứng (trái ngược với khuyến nghị hoặc gợi ý) thì những phụ thuộc đó cũng sẽ được đặt ở mức ưu tiên cao nhất của các gói phụ thuộc vào chúng.
Trên Ubuntu 16.04, tôi đã có rất nhiều gói quan trọng (apt, sudo, passwd, adduser) xuất hiện trong danh sách xóa khi thử phương pháp của @ enzotib. Vì một vụ hack bẩn đã thanh trừng danh sách các gói tùy chọn / bổ sung từng cái một với một tập lệnh để xem các gói thanh lọc gói tùy chọn / bổ sung nào đang kích hoạt loại bỏ các gói cần thiết hoặc quan trọng.
Ví dụ: trong trường hợp của tôi, việc xóa gói tùy chọn libaudit1 sẽ xóa sạch rất nhiều thứ quan trọng.
root@ro01:~# apt-get purge libaudit1
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
anacron bind9-host build-essential cpp cpp-5 dpkg-dev fakeroot g++ g++-5 gcc
gcc-5 gcc-5-base initramfs-tools-bin libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl libapt-pkg5.0 libasan2
libatomic1 libbind9-140 libc-dev-bin libc6 libc6-dev libcc1-0 libcilkrts5
libdns162 libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-5-dev
libgomp1 libisc160 libisccc140 libisccfg140 libisl15 libitm1 liblsan0
liblwres141 libmpc3 libmpx0 libquadmath0 libstdc++-5-dev libstdc++6 libtsan0
libubsan0 libudev1 linux-libc-dev logrotate manpages-dev samba-common
Suggested packages:
default-mta | mail-transport-agent powermgmt-base cpp-doc gcc-5-locales
debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg
gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib
libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg
liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg
libquadmath0-dbg glibc-doc libstdc++-5-doc mailx
Recommended packages:
cron | cron-daemon rsyslog | system-log-daemon apt samba-common-bin
The following packages will be REMOVED:
adduser* apache2* apache2-bin* apache2-utils* apt* apt-utils* aptitude*
bind9* bsd-mailx* cron* dbus* dmsetup* fetchmail* ifupdown* initramfs-tools*
initramfs-tools-core* initscripts* libapr1* libaprutil1*
libaprutil1-dbd-sqlite3* libaprutil1-ldap* libaudit1* libblkid1*
libcryptsetup4* libfdisk1* libmount1* libpam-modules* libpam-modules-bin*
libpam-runtime* libpam0g* libsemanage1* libuuid1* libxapian22v5* login*
mlocate* mount* mountall* openssh-client* openssh-server*
openssh-sftp-server* passwd* plymouth* postfix* procps* python-samba*
rpcbind* rsyslog* samba* samba-common-bin* samba-libs* sasl2-bin* screen*
ssl-cert* sudo* systemd* systemd-sysv* udev* util-linux* uuid-runtime* wget*
The following NEW packages will be installed:
anacron build-essential cpp cpp-5 dpkg-dev fakeroot g++ g++-5 gcc gcc-5
libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
libasan2 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdpkg-perl
libfakeroot libfile-fcntllock-perl libgcc-5-dev libisl15 libitm1 liblsan0
libmpc3 libmpx0 libquadmath0 libstdc++-5-dev libtsan0 libubsan0
linux-libc-dev manpages-dev
The following packages will be upgraded:
bind9-host gcc-5-base initramfs-tools-bin libapt-pkg5.0 libbind9-140 libc6
libdns162 libgomp1 libisc160 libisccc140 libisccfg140 liblwres141 libstdc++6
libudev1 logrotate samba-common
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
apt adduser (due to apt) login libaudit1 (due to login)
libpam0g (due to login) libpam-runtime (due to login)
libpam-modules (due to login) mount libblkid1 (due to mount)
libmount1 (due to mount) util-linux libfdisk1 (due to util-linux)
libuuid1 (due to util-linux)
16 upgraded, 34 newly installed, 60 to remove and 124 not upgraded.
Need to get 41.1 MB of archives.
After this operation, 12.4 MB of additional disk space will be used.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'
?] Abort.
Cũng thú vị đó aptitude why
và apt-cache rdepends
hiển thị kết quả khác nhau như vậy.
root@ro01:~# dpkg-query -Wf '${Package;-40}${Priority}\n' | sort -b -k2,2 -k1,1 | grep 'libaudit1'
libaudit1 optional
root@ro01:~# aptitude why libaudit1
i sudo Depends libaudit1 (>= 1:2.2.1)
root@ro01:~# dpkg-query -Wf '${Package;-40}${Priority}\n' | sort -b -k2,2 -k1,1 | grep 'sudo '
sudo optional
root@ro01:~# aptitude why sudo
i mountall Depends plymouth
p plymouth Recommends plymouth-theme-ubuntu-text | plymouth-theme
p mythbuntu-default-settings Provides plymouth-theme
p mythbuntu-default-settings Recommends lightdm
p lightdm Recommends xserver-xorg
p xserver-xorg Recommends xserver-xorg-video-all | xorg-driver-video
p nvidia-384 Provides xorg-driver-video
p nvidia-384 Depends dkms
p dkms Recommends menu | sudo
apt-cache rdepends
cho thấy nhiều hơn nữa ...
root@ro01:~# apt-cache rdepends libaudit1
libaudit1
Reverse Depends:
sudo
systemd
openssh-server
libaudit-dev
xwayland-hwe-16.04
xserver-xephyr-hwe-16.04
xmir-hwe-16.04
sudo-ldap
xserver-xorg-core-hwe-16.04
systemd
sudo
libvirt0
dbus-1-dbg
dbus
xwayland-hwe-16.04
xwayland
xvfb
xserver-xephyr-hwe-16.04
xserver-xephyr
xnest
xmir-hwe-16.04
xmir
xdmx
sudo-ldap
python3-audit
python-audit
nscd
linux-oem-tools-4.13.0-1024
linux-oem-tools-4.13.0-1022
linux-oem-tools-4.13.0-1021
linux-oem-tools-4.13.0-1020
linux-oem-tools-4.13.0-1019
linux-oem-tools-4.13.0-1017
linux-oem-tools-4.13.0-1015
linux-oem-tools-4.13.0-1012
linux-oem-tools-4.13.0-1010
linux-oem-tools-4.13.0-1008
linux-kvm-tools-4.4.0-1004
linux-gke-tools-4.4.0-1034
linux-gke-tools-4.4.0-1033
linux-gke-tools-4.4.0-1032
linux-gke-tools-4.4.0-1031
linux-gke-tools-4.4.0-1028
linux-gke-tools-4.4.0-1027
linux-gke-tools-4.4.0-1026
linux-gke-tools-4.4.0-1024
linux-gke-tools-4.4.0-1022
linux-gke-tools-4.4.0-1018
linux-gke-tools-4.4.0-1016
linux-gke-tools-4.4.0-1014
linux-gke-tools-4.4.0-1013
linux-gke-tools-4.4.0-1012
linux-gke-tools-4.4.0-1010
linux-gke-tools-4.4.0-1009
linux-gke-tools-4.4.0-1008
linux-gke-tools-4.4.0-1006
linux-gke-tools-4.4.0-1005
linux-gke-tools-4.4.0-1003
linux-gcp-tools-4.13.0-1013
linux-gcp-tools-4.13.0-1012
linux-gcp-tools-4.13.0-1011
linux-gcp-tools-4.13.0-1008
linux-gcp-tools-4.13.0-1007
linux-gcp-tools-4.13.0-1006
linux-gcp-tools-4.13.0-1002
linux-gcp-tools-4.10.0-1009
linux-gcp-tools-4.10.0-1008
linux-gcp-tools-4.10.0-1007
linux-gcp-tools-4.10.0-1006
linux-gcp-tools-4.10.0-1004
linux-euclid-tools-4.4.0-9026
linux-euclid-tools-4.4.0-9025
linux-euclid-tools-4.4.0-9023
linux-euclid-tools-4.4.0-9022
linux-euclid-tools-4.4.0-9021
linux-euclid-tools-4.4.0-9020
linux-euclid-tools-4.4.0-9019
linux-azure-edge-tools-4.15.0-1005
linux-azure-edge-tools-4.14.0-1003
linux-azure-edge-tools-4.13.0-1005
linux-azure-edge-tools-4.13.0-1003
linux-aws-tools-4.4.0-1012
linux-aws-tools-4.4.0-1011
linux-aws-tools-4.4.0-1009
linux-aws-tools-4.4.0-1007
linux-aws-tools-4.4.0-1004
linux-aws-tools-4.4.0-1003
linux-aws-tools-4.4.0-1001
gdm3
xserver-xorg-core-hwe-16.04
xserver-xorg-core
util-linux
systemd
sudo
passwd
openssh-server
login
linux-tools-4.4.0-98
linux-tools-4.4.0-97
linux-tools-4.4.0-96
linux-tools-4.4.0-93
linux-tools-4.4.0-92
linux-tools-4.4.0-91
linux-tools-4.4.0-89
linux-tools-4.4.0-87
linux-tools-4.4.0-83
linux-tools-4.4.0-81
linux-tools-4.4.0-79
linux-tools-4.4.0-78
linux-tools-4.4.0-77
linux-tools-4.4.0-75
linux-tools-4.4.0-72
linux-tools-4.4.0-71
linux-tools-4.4.0-70
linux-tools-4.4.0-67
linux-tools-4.4.0-66
linux-tools-4.4.0-64
linux-tools-4.4.0-63
linux-tools-4.4.0-62
linux-tools-4.4.0-59
linux-tools-4.4.0-57
linux-tools-4.4.0-53
linux-tools-4.4.0-51
linux-tools-4.4.0-47
linux-tools-4.4.0-45
linux-tools-4.4.0-43
linux-tools-4.4.0-42
linux-tools-4.4.0-38
linux-tools-4.4.0-36
linux-tools-4.4.0-34
linux-tools-4.4.0-31
linux-tools-4.4.0-28
linux-tools-4.4.0-24
linux-tools-4.4.0-22
linux-tools-4.4.0-122
linux-tools-4.4.0-121
linux-tools-4.4.0-119
linux-tools-4.4.0-116
linux-tools-4.4.0-112
linux-tools-4.4.0-109
linux-tools-4.4.0-108
linux-tools-4.4.0-104
linux-tools-4.4.0-103
linux-tools-4.4.0-101
linux-kvm-tools-4.4.0-1021
linux-kvm-tools-4.4.0-1020
linux-kvm-tools-4.4.0-1019
linux-kvm-tools-4.4.0-1017
linux-kvm-tools-4.4.0-1015
linux-kvm-tools-4.4.0-1013
linux-kvm-tools-4.4.0-1012
linux-kvm-tools-4.4.0-1010
linux-kvm-tools-4.4.0-1009
linux-kvm-tools-4.4.0-1008
linux-kvm-tools-4.4.0-1007
linux-hwe-tools-4.8.0-58
linux-hwe-tools-4.8.0-56
linux-hwe-tools-4.8.0-54
linux-hwe-tools-4.8.0-53
linux-hwe-tools-4.8.0-52
linux-hwe-tools-4.8.0-51
linux-hwe-tools-4.8.0-49
linux-hwe-tools-4.8.0-46
linux-hwe-tools-4.8.0-45
linux-hwe-tools-4.8.0-44
linux-hwe-tools-4.8.0-42
linux-hwe-tools-4.8.0-41
linux-hwe-tools-4.8.0-39
linux-hwe-tools-4.8.0-36
linux-hwe-tools-4.13.0-39
linux-hwe-tools-4.13.0-38
linux-hwe-tools-4.13.0-37
linux-hwe-tools-4.13.0-36
linux-hwe-tools-4.13.0-32
linux-hwe-tools-4.13.0-31
linux-hwe-tools-4.13.0-26
linux-hwe-tools-4.10.0-42
linux-hwe-tools-4.10.0-40
linux-hwe-tools-4.10.0-38
linux-hwe-tools-4.10.0-37
linux-hwe-tools-4.10.0-35
linux-hwe-tools-4.10.0-33
linux-hwe-tools-4.10.0-32
linux-hwe-tools-4.10.0-30
linux-hwe-tools-4.10.0-28
linux-hwe-tools-4.10.0-27
linux-hwe-edge-tools-4.8.0-34
linux-hwe-edge-tools-4.15.0-15
linux-hwe-edge-tools-4.15.0-13
linux-hwe-edge-tools-4.13.0-25
linux-hwe-edge-tools-4.13.0-21
linux-hwe-edge-tools-4.13.0-19
linux-hwe-edge-tools-4.13.0-17
linux-hwe-edge-tools-4.13.0-16
linux-hwe-edge-tools-4.11.0-14
linux-hwe-edge-tools-4.11.0-13
linux-hwe-edge-tools-4.10.0-26
linux-hwe-edge-tools-4.10.0-24
linux-hwe-edge-tools-4.10.0-22
linux-hwe-edge-tools-4.10.0-21
linux-hwe-edge-tools-4.10.0-20
linux-hwe-edge-tools-4.10.0-19
linux-hwe-edge-tools-4.10.0-14
linux-azure-tools-4.13.0-1014
linux-azure-tools-4.13.0-1012
linux-azure-tools-4.13.0-1011
linux-azure-tools-4.13.0-1009
linux-azure-tools-4.13.0-1007
linux-azure-tools-4.13.0-1006
linux-azure-tools-4.13.0-1005
linux-azure-tools-4.11.0-1016
linux-azure-tools-4.11.0-1015
linux-azure-tools-4.11.0-1014
linux-azure-tools-4.11.0-1013
linux-azure-tools-4.11.0-1011
linux-azure-tools-4.11.0-1009
linux-aws-tools-4.4.0-1055
linux-aws-tools-4.4.0-1054
linux-aws-tools-4.4.0-1052
linux-aws-tools-4.4.0-1050
linux-aws-tools-4.4.0-1049
linux-aws-tools-4.4.0-1048
linux-aws-tools-4.4.0-1047
linux-aws-tools-4.4.0-1044
linux-aws-tools-4.4.0-1043
linux-aws-tools-4.4.0-1041
linux-aws-tools-4.4.0-1039
linux-aws-tools-4.4.0-1038
linux-aws-tools-4.4.0-1037
linux-aws-tools-4.4.0-1035
linux-aws-tools-4.4.0-1032
linux-aws-tools-4.4.0-1031
linux-aws-tools-4.4.0-1030
linux-aws-tools-4.4.0-1028
linux-aws-tools-4.4.0-1026
linux-aws-tools-4.4.0-1022
linux-aws-tools-4.4.0-1020
linux-aws-tools-4.4.0-1018
linux-aws-tools-4.4.0-1017
linux-aws-tools-4.4.0-1016
linux-aws-tools-4.4.0-1013
libvirt0
libpam0g
libpam-modules-bin
libpam-modules
libauparse0
libauparse0
libauparse0
libaudit-common
libaudit-common
libaudit-common
dbus-1-dbg
dbus
auditd
xwayland
xvfb
xserver-xephyr
xnest
xmir
xdmx
ubuntu-core-libs
sudo-ldap
python3-audit
python-audit
policycoreutils
nscd
gdm3
aide-dynamic
xserver-xorg-core
systemd
sudo
passwd
openssh-server
login
linux-tools-4.4.0-21
libvirt0
libsemanage1
libpam0g
libpam-modules-bin
libpam-modules
libauparse0
libauparse0
libauparse0
libaudit-dev
libaudit-common
dbus
dbus-1-dbg
auditd
root@ro01:~#
Tìm thấy một số gói có vấn đề hơn ...
- libdebconfclient0
- liblz4-1
- libsemanage1
- libsemanage-chung
- libsystemd0
- libbsd0
- librecat1
- libhcrypto4-heimdal
- libheimntlm0-heimdal
- libhx509-5-heimdal
Khi chạy từng apt-get purge
gói một, tôi không còn cảnh báo về việc xóa các gói quan trọng và quét qua danh sách các nội dung bị xóa, tôi thấy các nội dung quan trọng như adduser và apt không còn bị xóa nữa. Tuy nhiên, khi chạy apt-get purge
cho tất cả các gói cùng một lúc ... cảnh báo vẫn còn đó và apt và những thứ khác lại nằm trong danh sách xóa mặc dù không có ở đó khi gỡ bỏ các gói riêng lẻ. Không ý kiến.
Cuối cùng, tôi chỉ loại trừ tất cả các thư viện và một vài gói khác để tránh loại bỏ bất cứ thứ gì tôi quan tâm.
root@ro01:~# apt-get purge $(dpkg-query -Wf \
'${Package;-40}${Priority}\n' | \
awk '$2 ~ /optional|extra/ { print $1 }' | \
grep -vE 'lib|gawk|openssh|insserv|quota|sudo')
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
apache2* apache2-bin* apache2-data* apache2-doc* apache2-utils* bind9* bind9utils* binutils* bsd-mailx* busybox-initramfs* ca-certificates* cifs-utils* console-data* db-util* db5.3-util* debconf-utils* dh-python*
dialog* distro-info-data* dmsetup* dselect* ed* expat* fetchmail* finger* fontconfig* fontconfig-config* fonts-dejavu* fonts-dejavu-core* fonts-dejavu-extra* fonts-freefont-ttf* gettext* initramfs-tools*
initramfs-tools-bin* initramfs-tools-core* iputils-arping* iputils-tracepath* ldap-utils* libfontconfig1* linux-base* lsb-release* lynx* lynx-common* make* makedev* memtester* mktemp* module-init-tools* mountall*
mtools* odbcinst* odbcinst1debian2* openssl* openssl-blacklist* plymouth* postfix* procinfo* psmisc* psutils* pwgen* python-crypto* python-dnspython* python-ldb* python-samba* python-talloc* python-tdb* python3*
python3-minimal* python3.5* python3.5-minimal* rsync* samba* samba-common* samba-common-bin* samba-libs* sasl2-bin* sharutils* snmp* ssl-cert* syslinux* tcpdump* tcsh* tdb-tools* tofrodos* ttf-dejavu* ttf-dejavu-core*
ttf-dejavu-extra* ttf-freefont* unixodbc* unzip* update-inetd* uuid-runtime* vim* vim-runtime* wide-dhcpv6-client* xinetd*
0 upgraded, 0 newly installed, 96 to remove and 0 not upgraded.
After this operation, 195 MB disk space will be freed.
Do you want to continue? [Y/n] Y