1. Скрипт безопасной очистки
Создайте файл:
sudo nano /usr/local/sbin/prepare-image.shВставьте:
#!/bin/bash
set -e
echo "== Очистка machine-id =="
truncate -s 0 /etc/machine-id
if [ -e /var/lib/dbus/machine-id ]; then
rm -f /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id
fi
echo "== Удаление SSH host keys =="
rm -f /etc/ssh/ssh_host_*
echo "== Очистка журналов =="
journalctl --rotate
journalctl --vacuum-time=1s
echo "== Очистка временных файлов =="
rm -rf /tmp/*
rm -rf /var/tmp/*
echo "== Очистка истории root =="
history -c || true
rm -f /root/.bash_history
echo "== Синхронизация диска =="
sync
echo
echo "=================================="
echo "Система готова к созданию образа."
echo "Теперь выключите компьютер:"
echo "poweroff"
echo "=================================="Сделайте исполняемым:
sudo chmod +x /usr/local/sbin/prepare-image.shЗапуск:
sudo /usr/local/sbin/prepare-image.shПосле завершения:
sudo poweroffИ только после этого снимайте образ.
2. Автоматическое создание machine-id
Создайте файл:
sudo nano /usr/local/sbin/firstboot.shСодержимое:
#!/bin/bash
if [ ! -s /etc/machine-id ]; then
echo "Создание нового machine-id..."
systemd-machine-id-setup
fi
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
echo "Создание SSH host keys..."
ssh-keygen -A
fi
systemctl disable firstboot.service
rm -f /etc/systemd/system/firstboot.service
rm -f /usr/local/sbin/firstboot.sh
systemctl daemon-reloadСделайте исполняемым:
sudo chmod +x /usr/local/sbin/firstboot.sh3. Создайте сервис
sudo nano /etc/systemd/system/firstboot.serviceСодержимое:
[Unit]
Description=First boot initialization
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/firstboot.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetВключите его:
sudo systemctl daemon-reload
sudo systemctl enable firstboot.service4. Как проверить сейчас
Проверить сервис
systemctl status firstboot.serviceДолжно быть:
Loaded: loaded
Enabled: enabledПроверить machine-id
Сейчас:
cat /etc/machine-idБудет длинная строка.
Проверить работу без создания образа
Очистите machine-id:
sudo truncate -s 0 /etc/machine-idПроверьте:
cat /etc/machine-idФайл должен быть пустым.
Перезагрузите компьютер:
sudo rebootПосле загрузки:
cat /etc/machine-idЕсли появилась новая строка — всё работает.
Проверьте также, что сервис удалился:
systemctl status firstboot.serviceВы получите сообщение, что юнит не найден (или отключён), потому что он выполнил свою задачу и удалил себя.