Подготовка образа системы

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.sh

3. Создайте сервис

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.service

4. Как проверить сейчас

Проверить сервис

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

Вы получите сообщение, что юнит не найден (или отключён), потому что он выполнил свою задачу и удалил себя.