ISO из установленной ОС

Ответить
turik02
Сообщения: 836
Зарегистрирован: 01 июн 2022, 13:47
Operating system: РОСА «ФРЕШ» 13.2 GNOME 64-bit

ISO из установленной ОС

Сообщение turik02 »

#### Создание ISO из установленной ОС (делалось на РОСА Фреш 13.3 GNOME с ROSA.FRESH.GNOME.13.3.x86_64.iso)

#### Необходимо около 50 Гб дискового пространства (зависит от размера вашего корня + home)


# Скачайте с официального сайта РОСА подходящий образ

# Установка инструментов:

Код: Выделить всё

sudo dnf install -y bsdtar xorriso pykickstart squashfs-tools pv rsync e2fsprogs zstd anaconda
cp /usr/share/applications/anaconda-rosa.desktop ~/"Рабочий стол"/
chmod +x ~/"Рабочий стол"/anaconda-rosa.desktop
# Перезагрузитесь

# Создаём рабочую папку и распаковываем скачанный ISO:

Код: Выделить всё

mkdir -p ~/work/iso
pv ~/Загрузки/ROSA.FRESH.GNOME.13.3.x86_64.iso | sudo bsdtar -xf - -C ~/work/iso
# Если образ больше не нужен, то удалите его:

Код: Выделить всё

rm -f ~/Загрузки/ROSA.FRESH.GNOME.13.3.x86_64.iso
# Распаковываем внутренний слой squashfs.img (РОСА Linux использует многослойную структуру):

Код: Выделить всё

mkdir ~/work/squashfs
sudo unsquashfs -d ~/work/squashfs ~/work/iso/LiveOS/squashfs.img
# Лучше закрыть все программы, например браузер, на время копирования (rsync), также можно почистить историю журнала/bash, кэш/метаданные/корзину

# Пересоздаём rootsf.img с возможностью записи (в exclude я исключил папку timeshift, рабочую папку work и содержимое папки Загрузки, в count - размер корня с запасом) (можно создать разреженный образ на 20 ГБ - физически место не занимается - dd if=/dev/zero of=~/work/fresh_rootfs.img bs=1M seek=20000 count=0):

Код: Выделить всё

sudo dd if=/dev/zero of=~/work/fresh_rootfs.img bs=1G count=20 status=progress
sudo mkfs.ext4 -F ~/work/fresh_rootfs.img
mkdir ~/work/fresh_mount
sudo mount -o loop ~/work/fresh_rootfs.img ~/work/fresh_mount
sudo rsync -aAXH --numeric-ids --info=progress2 \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/timeshift","$HOME/work","$HOME/Загрузки/*"} \
/. ~/work/fresh_mount/.
# Удалите:

Код: Выделить всё

sudo rm -f ~/work/fresh_mount/etc/resolv.conf
sudo truncate -s 0 ~/work/fresh_mount/etc/fstab
# !!!Размонтируйте!!!

Код: Выделить всё

sudo umount ~/work/fresh_mount
# Перенесите/замените файл:

Код: Выделить всё

sudo mv ~/work/fresh_rootfs.img ~/work/squashfs/LiveOS/rootfs.img
# Присвоить имя тому (необязательно)

Код: Выделить всё

sudo losetup --find --show ~/work/squashfs/LiveOS/rootfs.img
sudo tune2fs -L "_ROSA_13_LIVE_x" /dev/loop0
sudo losetup -d /dev/loop0
# Собираем НОВЫЙ внешний squashfs.img:

Код: Выделить всё

sudo rm -f ~/work/iso/LiveOS/squashfs.img
sudo mksquashfs ~/work/squashfs/ ~/work/iso/LiveOS/squashfs.img -comp zstd -b 1M
#### Обновляем контрольные суммы (опционально, но важно) (в РОСА этого нет, можно пропустить). Многие дистрибутивы проверяют целостность rootfs.img при загрузке. Если в папке ~/work/iso/LiveOS/ есть файл rootfs.img.checksum (или .md5, .sha256), его нужно обновить.
cd ~/work/iso/LiveOS/
sudo md5sum rootfs.img > rootfs.img.md5
sudo sha256sum rootfs.img > rootfs.img.sha256
#### Если файл называется .checksum:
#### sudo sha256sum rootfs.img > rootfs.img.checksum


# В файле ~/work/iso/EFI/BOOT/menuentry.cfg найдите все упоминания ROSA_13_GNOME_x86_64_60959 и замените их на ROSA_13_GNOME_Custom

Код: Выделить всё

sudo gedit ~/work/iso/EFI/BOOT/menuentry.cfg
# Финальная сборка всего ISO (mbr/msdos):

Код: Выделить всё

cd ~/work/iso
xorrisofs \
-output ~/ROSA_13_GNOME_Custom.iso \
-iso-level 3 \
-no-emul-boot \
-b \
eltorito.img \
-no-emul-boot \
-boot-load-size \
4 \
-boot-info-table \
-partition_offset \
16 \
--boot-catalog-hide \
--grub2-mbr \
/usr/lib/grub/i386-pc/boot_hybrid.img \
--grub2-boot-info \
-iso_mbr_part_type \
0x83 \
-append_partition \
2 \
0xef \
./efi.img \
-appended_part_as_gpt \
-eltorito-alt-boot \
-e \
/efi.img \
-no-emul-boot \
-no-pad \
-rational-rock \
-joliet \
-volid \
ROSA_13_GNOME_Custom \
.

# Готовый ISO появится в директории ~/

#### Удалите рабочую папку и анаконду:

Код: Выделить всё

sudo rm -rf ~/work
sudo dnf remove -y anaconda
rm -f ~/"Рабочий стол"/anaconda-rosa.desktop
#### При установке ОС можно будет создать нового пользователя, если это необходимо.
turik02
Сообщения: 836
Зарегистрирован: 01 июн 2022, 13:47
Operating system: РОСА «ФРЕШ» 13.2 GNOME 64-bit

Re: ISO из установленной ОС

Сообщение turik02 »

#### Кастомизация (перепаковка) готового ISO (делалось на РОСА Фреш 13 с ROSA_13_GNOME_x86_64_60779.iso) (требуется 40 Гб дискового пространства)

# Установка инструментов:

Код: Выделить всё

sudo dnf install -y bsdtar xorriso pykickstart squashfs-tools pv rsync e2fspros zstd
# Распаковка основного ISO (создаёт рабочую папку work):

Код: Выделить всё

mkdir -p ~/work/iso
pv ~/Загрузки/ROSA_13_GNOME_x86_64_60779.iso | sudo bsdtar -xf - -C ~/work/iso
# Если образ больше не нужен, то удалите его:

Код: Выделить всё

rm -f ~/Загрузки/ROSA_13_GNOME_x86_64_60779.iso
# Распаковываем внутренний слой squashfs.img (РОСА Linux использует многослойную структуру):

Код: Выделить всё

mkdir ~/work/squashfs
sudo unsquashfs -d ~/work/squashfs ~/work/iso/LiveOS/squashfs.img
# Монтируем финальный rootfs.img:

Код: Выделить всё

mkdir ~/work/rootfs
sudo mount -t ext4 -o loop ~/work/squashfs/LiveOS/rootfs.img ~/work/rootfs
# Пересоздаём rootsf.img с возможностью записи (count - это размер корня с запасом, рекомендованный):

Код: Выделить всё

sudo dd if=/dev/zero of=~/work/fresh_rootfs.img bs=1G count=15 status=progress
sudo mkfs.ext4 -F ~/work/fresh_rootfs.img
mkdir ~/work/fresh_mount
sudo mount -o loop ~/work/fresh_rootfs.img ~/work/fresh_mount
sudo rsync -aAXH --numeric-ids --info=progress2 \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
~/work/rootfs/. ~/work/fresh_mount/.
## Заходим в систему правильным способом (с интернетом):

Код: Выделить всё

sudo systemd-nspawn -D ~/work/fresh_mount --resolv-conf=auto
## Можно добавить репозиторий Яндекс:
tee /etc/yum.repos.d/yandex-browser.repo >/dev/null <<'EOF'
[yandex-browser]
name=yandex-browser
baseurl=http://repo.yandex.ru/yandex-browser/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://repo.yandex.ru/yandex-browser/Y ... ER-KEY.GPG
EOF
rpm --import https://repo.yandex.ru/yandex-browser/Y ... ER-KEY.GPG


## Можно установить пакеты внутри chroot-окружения:
dnf makecache
dnf install -y gufw timeshift folder-color-nautilus nautilus-admin-gtk4 yandex-browser-stable


## Можно включить брандмауэр:
systemctl enable ufw

## Можно копировать файлы/конфиги (выполняется с хоста):
sudo cp ~/Изображения/ROSA.jpg ~/work/fresh_mount/opt

## Можно удалить пакеты:
dnf remove -y libreoffice-* mc evince baobab htop firefox file-roller yandex-browser-install

## Можно устанавливать rpm (копируем с хоста, устанавливаем/удаляем из контейнера):
sudo cp ~/Загрузки/MyOfficeStandardHomeEdition.rpm ~/work/fresh_mount/opt
dnf in -y /opt/MyOfficeStandardHomeEdition.rpm
rm -f /opt/MyOfficeStandardHomeEdition.rpm


## После успешной установки удалите адрес DNS-сервера, все кешированные данные, Bash history и выйди из chroot:
rm -f /etc/resolv.conf
dnf clean all
rm -rf /var/cache/dnf/*
history -c
# !!!Размонтируйте!!!

Код: Выделить всё

sudo umount ~/work/fresh_mount
sudo umount ~/work/rootfs
# Перенесите/замените файл:

Код: Выделить всё

sudo mv ~/work/fresh_rootfs.img ~/work/squashfs/LiveOS/rootfs.img
# Присвоить имя тому (необязательно):

Код: Выделить всё

sudo losetup --find --show ~/work/squashfs/LiveOS/rootfs.img
sudo tune2fs -L "_ROSA_13_GNOME_x" /dev/loop0
sudo losetup -d /dev/loop0
# Собираем НОВЫЙ внешний squashfs.img:

Код: Выделить всё

sudo rm -f ~/work/iso/LiveOS/squashfs.img
sudo mksquashfs ~/work/squashfs/ ~/work/iso/LiveOS/squashfs.img -comp zstd -b 1M
#### Обновляем контрольные суммы (опционально, но важно) (в РОСА этого нет). Многие дистрибутивы проверяют целостность rootfs.img при загрузке. Если в папке ~/work/iso/LiveOS/ есть файл rootfs.img.checksum (или .md5, .sha256), его нужно обновить:
cd ~/work/iso/LiveOS/
sudo md5sum rootfs.img > rootfs.img.md5
sudo sha256sum rootfs.img > rootfs.img.sha256
#### Если файл называется .checksum:
#### sudo sha256sum rootfs.img > rootfs.img.checksum

# В файле ~/work/iso/EFI/BOOT/menuentry.cfg найдите все упоминания ROSA_13_GNOME_x86_64_60779 и замените их на ROSA_13_GNOME_Custom

Код: Выделить всё

sudo gedit ~/work/iso/EFI/BOOT/menuentry.cfg
# Финальная сборка всего ISO (разметка mbr):

Код: Выделить всё

cd ~/work/iso
xorrisofs \
-output ~/ROSA_13_GNOME_Custom.iso \
-iso-level 3 \
-no-emul-boot \
-b \
eltorito.img \
-no-emul-boot \
-boot-load-size \
4 \
-boot-info-table \
-partition_offset \
16 \
--boot-catalog-hide \
--grub2-mbr \
/usr/lib/grub/i386-pc/boot_hybrid.img \
--grub2-boot-info \
-iso_mbr_part_type \
0x83 \
-append_partition \
2 \
0xef \
./efi.img \
-eltorito-alt-boot \
-e \
/efi.img \
-no-emul-boot \
-rational-rock \
-joliet \
-volid \
ROSA_13_GNOME_Custom \
.
# Готовый ISO появится в директории ~/

### Удалите рабочую папку:

Код: Выделить всё

sudo rm -rf ~/work
Аватара пользователя
mikhailnov
Сообщения: 311
Зарегистрирован: 29 авг 2015, 22:53
Operating system: ROSA
Контактная информация:

Re: ISO из установленной ОС

Сообщение mikhailnov »

sudo cp ~/Загрузки/MyOfficeStandardHomeEdition.rpm ~/work/fresh_mount/opt
Еще можно с хоста:

Код: Выделить всё

sudo dnf --installroot=~/work/fresh_mount install ~/Загрузки/MyOfficeStandardHomeEdition.rpm
Аватара пользователя
mikhailnov
Сообщения: 311
Зарегистрирован: 29 авг 2015, 22:53
Operating system: ROSA
Контактная информация:

Re: ISO из установленной ОС

Сообщение mikhailnov »

Обновляем контрольные суммы (опционально, но важно) (в РОСА этого нет). Многие дистрибутивы проверяют целостность rootfs.img при
Есть. В Росе встроена checkisomd5 и в LiveCD в разделе "Инженерное меню" есть пункт запуска с проверкой целостности. Просто по умолчанию не проверяется, чтобы не раздражать долгой проверкой.
Аватара пользователя
mikhailnov
Сообщения: 311
Зарегистрирован: 29 авг 2015, 22:53
Operating system: ROSA
Контактная информация:

Re: ISO из установленной ОС

Сообщение mikhailnov »

Вместо sudo gedit можно попробовать sudo dnf install gvfs-admin, gedit admin://...
Аватара пользователя
mikhailnov
Сообщения: 311
Зарегистрирован: 29 авг 2015, 22:53
Operating system: ROSA
Контактная информация:

Re: ISO из установленной ОС

Сообщение mikhailnov »

В целом гайд выглядит работоспособным. Спасибо.
Ответить

Вернуться в «Общие вопросы по РОСЕ»