Вы можете попробовать запустить приведенный ниже скрипт с LiveCD (возможно обновленных версий по ссылке ). Сценарий пытается частично автоматизировать процесс за вас. Он был написан и протестирован для диска NVMe, поэтому вам может потребоваться немного изменить ситуацию, если вы используете диск SATA/IDE с путем /dev/sd*
. Если вы не используете EFI, вы можете удалить любую строку, содержащую efi
или EFI
, запустив sed -i -e '/efi/d' -e '/EFI/d' crypt-fix.sh
после сохранения сценария на свой компьютер. В конце концов, для этого придется добавить некоторую логику обнаружения.
https://gist.github.com/dragon788/e777ba64d373210e4f6306ad40ee0e80
крипта -fix.sh
#!/bin/bash
# Call with `sudo bash DEBUG=1./crypt-fix.sh` for verbose output
[ -n "$DEBUG"] && set -x
# Prompt user for device from /dev/sd* /dev/nvme* /dev/mmc* prefixes?
# For /dev/sda probably sda1 is EFI and sda2 is boot and sda3 is encrypted
DEVICE=/dev/nvme0n1
EFIPATH="${DEVICE}p1"
BOOTPATH="${DEVICE}p2"
CRYPTPATH="${DEVICE}p3"
TARGETPATH=/mnt
# Need root for mounting stuff
if ! (( $EUID == 0 )); then echo "Please run with `sudo $0`"; fi
clear_mounts () {
# Clears mounts in case of interrupt or upon exit to allow running script multiple times
umount $TARGETPATH/boot/efi
umount $TARGETPATH/boot
umount $TARGETPATH/proc
umount $TARGETPATH/dev
umount $TARGETPATH
vgchange -an
cryptsetup close temp_name
cryptsetup close $CRYPTNAME
set +x
}
trap clear_mounts INT EXIT
cryptsetup open $CRYPTPATH temp_name
vgchange -ay
# Can't get this until LVM devices are scanned above
ROOTPATH=$(ls /dev/mapper/* | grep root)
# Make sure nothing else is mounted on our $TARGETPATH
umount $TARGETPATH
wait
mount $ROOTPATH $TARGETPATH
# Find the name that is required for `update-initramfs` to properly update things
CRYPTNAME=$(cat $TARGETPATH/etc/crypttab | awk '/^[ ]*[^#]/ { print $1; exit }')
umount $TARGETPATH
vgchange -an
cryptsetup close temp_name
# This proper name is required for `update-initramfs` to properly update things
cryptsetup open $CRYPTPATH $CRYPTNAME
wait
vgchange -ay
ROOTPATH=$(ls /dev/mapper/* | grep root)
mount $ROOTPATH $TARGETPATH
mount $BOOTPATH $TARGETPATH/boot
mount $EFIPATH $TARGETPATH/boot/efi
mount -t proc proc $TARGETPATH/proc
mount -o bind /dev $TARGETPATH/dev
# Have also seen people mounting dev/pts and run and sys, they don't appear to be necessary
chroot $TARGETPATH update-initramfs -c -k all
echo "Completed crypt-fix, try rebooting and you should get prompted for your passphrase after grub"
Честно говоря, это требует больших усилий, и обычно вы так не делаете . Просто есть лучшие способы работы с автономными системами :
.Вместо этого вы обычно настраиваете систему со всеми нужными вам пакетами, затем делаете образ «чистой» системы, отключаете ее от интернета и только потом расшифровываете зашифрованный раздел с данными или подключаете жесткий диск с разумной информацией, если вы строите системы с воздушным -зазором в целях безопасности.
В следующий раз, когда вы хотите что-то установить, вы берете образ чистой системы, устанавливаете то, что хотите, сохраняете образ, а затем снова расшифровываете/подключаете свое секретное хранилище.
Поскольку MX основан на debian, к нему применимы все возможности, которые вы можете делать с помощью debian.
apt-offline
— это инструмент для установки обновлений безопасности для автономных компьютеров. Грубо говоря, это работает как:
(offline)> sudo apt-offline set --install-packages PACKAGE_NAME --update apt-offline.sig
, а затем на онлайн-машине после переносаapt-offline.sig
(online) supo apt-offline get --bundle bundle.zip apt-offline.sig
после переноса bundle.zip
на автономную машину:
(offline) sudo apt-offline install bundle.zip
Это не решает проблему установки самого apt-offline
, и нельзя быть уверенным, что такой маленький молодой дистрибутив, как ваш, постоянно проверяет, работает ли это. Так что, скорее всего, вам придется делать что-то вручную :
Здесь нет сверхпростого пути, потому что ваша автономная система даже не может определить, какие пакеты ей потребуются — они уже изменились в онлайн-репозитории, а вместе с ними и взаимные зависимости.
Итак, я вижу единственный способ:
на автономной машине экспортировать список установленных пакетов:
sudo dpkg --список | вырезать '-d '-f2 > список _из _packages.txt
Запишите этот список на USB-накопитель и перенесите его на компьютер, подключенный к сети.
На компьютере с Windows настройте виртуальную машину с MX Linux точно в вашей версии. Это очень легко сделать с VirtualBox, и, в качестве альтернативы, я бы предположил, что даже WSL (2 ), с которым поставляется Windows10, может запускать контейнер с MX Linux внутри.
На этой виртуальной машине установите те же пакеты, что и на этой автономной машине:
sudo xargs apt install -y < список _из _packages.txt
теперь загрузите пакеты, которые вы хотите установить (скажем,libreoffice
) в ВМ:
sudo apt install --загрузить только --и libreoffice
теперь скопируйте загруженные пакеты, то есть полное содержимое папки /var/cache/apt/archives
на флешку.
Запустите sudo apt install -y libreoffice
на онлайн-компьютере (, который уже загрузил все файлы
На автономном компьютере
cd /путь/к/вашей/флешке/папке/содержащей/файлы sudo dpkg -я *.deb
Готово. В следующий раз вы можете начать с шага 5, потому что на автономном компьютере теперь должны быть точно такие же файлы, как и на онлайн-компьютере.