В моей компании мы используем загрузочную живую флешку USB с Ubuntu (эм ... Xubuntu) 18.04 для проведения собеседований. У него есть набор инструментов (три или четыре IDE, пара просмотрщиков графического интерфейса базы данных ...) и игрушечный проект, о котором можно задавать вопросы.
Эта флешка имеет накладной раздел Casper-RW для постоянного хранения (созданный с помощью mkusb ). Упомянутый раздел в основном используется для хранения образов Docker и для хранения некоторых начальных значений, которые могут немного измениться в зависимости от того, к какой машине подключен флеш-накопитель.
Этот раздел монтируется «вручную» в /media/overlay
путем добавления следующей строки mkdir --parents /media/overlay/ && mount -L casper-rw /media/overlay/
в файл rc.local
(спасибо @sudodus за ответ мой предыдущий вопрос ).
Теперь, этот casper-rw
персистентный слой работает отлично ... Возможно, слишком хорошо Мы хотели бы стереть каталог /home/<user>
, в котором были сохранены .bash_history
и другие изменения, сделанные собеседником, когда мы закрывали тестовую среду (тестовая среда ... значение: ноутбук, на котором собеседник делал какие-то вещи) так что он готов к следующему кандидату.
Благодаря этим ответам ( Unix & Linux , AskUbuntu ) я создал сервис systemd, который ... своего рода делает то, что я хочу, просто кажется, что это происходит, когда система ботинки , а не когда он падает. Это не большое дело, это просто ... это немного меня беспокоит : - D
Это сервис systemd, который я создал в /etc/systemd/system/clear-stick.service
:
[Unit]
Description=Cleans-up interview sticker
RequiresMountsFor=/media/overlay/
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target umount.target casper.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clear_interview_stick.sh
ExecStop=/usr/local/bin/clear_interview_stick.sh
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
Я подозреваю, что он запускает только строку ExecStart
при загрузке, а не линию ExecStop
при выключении. Если я внесу изменения в каталог /home/
, выключу компьютер и подключу флешку в другом месте, изменения все еще будут. Кроме того, если я посмотрю журналы в journalctl
, то увижу только ссылки на наклейку с прояснением интервью , окруженную, как кажется, стартовыми последовательностями других служб.
Я не уверен на 100%, произойдет ли это из-за неправильного (очень вероятного) определения .service
или из-за того, что я не до конца понимаю, как работает оверлей casper-rw
, и хотя .service
запущен на завершение работы, он не может очистить каталог /media/overlay/home/interviewee
?.
Как я упоминал ранее, это не огромная, огромная сделка , поскольку кажется, что она стирает каталог /home/
при загрузке, но я бы предпочел сделать это "" "правильно "" " и сотрите его при выключении.
И на всякий случай это уместно, вот содержание /usr/local/bin/clear_interview_stick.sh
:
#!/bin/bash
had_to_mount="false";
if [[ ! -d "/media/overlay/upper/" ]]; then
mount -L casper-rw /media/overlay/
had_to_mount="true";
fi
if [[ -d "/media/overlay/upper/home/interviewee/" ]]; then
echo "Removing interviewee /home";
rm -rf "/media/overlay/upper/home/interviewee/";
else
echo "interviewee /home/ not found"
fi
if [[ -f /root/.bash_history ]]; then
rm /root/.bash_history;
fi
if [[ "${had_to_mount}" == "true" ]]; then
umount /media/overlay;
fi
НАКОНЕЦ!!Я понял!!!. Огромное спасибо к @Rinzwind, кто дал мне решающий ключ к разгадке в комментариях к вопросу для этого.
(!!), Если кто-то читает эти слова: не предполагайте, что это - правильный способ сделать его, потому что это, вероятно, не. Я действительно плохо знаком с SystemD, и я главным образом... хорошо... абсолютно ничего не знаю об этом.
Я получил его работа с помощью сервиса, которым ExecStarts (важный, я пробовал много только ExecStop
и не работал), после shutdown.target
и это разыскивается final.target
.
/etc/systemd/system/clear-stick.service
:
[Unit]
Description=Cleans-up interview sticker
DefaultDependencies=no
Before=final.target umount.target
After=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clear_interview_stick.sh
RemainAfterExit=true
[Install]
WantedBy=final.target
Также помогло наблюдению, как наложение casper-rw сделало это (я имею в виду: рассмотрение фактического /etc/systemd/system/final.target.wants/casper.service
файл) и как это использует ExecStart
, заставляет его бежать umount
(хотя я хотел свой сервис, выполненный прежде umount)... подобные вещи.
Кроме того, в одном из моих многих тестов я удалил строку RequiresMountsFor=/media/overlay/
Это могло бы все еще быть в порядке (я не попробовал все возможные перестановки), но с тех пор в то время, когда mount /media/overlay
делался через /etc/rc.local
, (mkusb вступает во владение /etc/fstab
), и что я сделал работы без него, я не пустил его.
В предыдущем абзаце я упоминаю, "но с тех пор в то время, когда mount
..." Поэтому на всякий случай SystemD не "видел" монтирование, которое не было перечислено в /etc/fstab
но созданный через rc.local
, Я также создал a .mount
файл единицы, как объяснено здесь, чтобы попытаться иметь SystemD знают об этом. Плюс чувствовавший инструмент для очистки мне.
Это то, как:
/etc/systemd/system/media-overlay.mount
:
[Unit]
Description=Mount Overlay in /media/
[Mount]
What=/dev/disk/by-label/casper-rw
Where=/media/overlay
Type=ext4
Options=defaults
[Install]
WantedBy=multi-user.target
Это не помогло со стиранием. Я предполагаю, возможно???? (большое предположение, большое, возможно) поэтому, я все еще использовал ExecStop? Я не знаю, действительно. Тем не менее, это .mount
файл сделал преуспевший создание mount
, таким образом, я сохранил его.
Я уверен инструмент для очистки и более надежен .service
мог быть записан, но так как каждый тест взял меня больше, чем полчаса, потому что я должен был восстановить загрузочную карту с интерфейсом USB, я решил отъезд его как это. (Если это компилирует, это поставлется, правильно?)
Стоит отметить что list-dependencies
команда (как в systemctl list-dependencies --after final.target
) было также действительно полезно для наблюдения то, что продолжалось.