Изменение Модификация Пересборка Образа ALTLINUX

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Источники:
Модификация установочного ISO образа
Сделать кастомный диск Alt Linux с автоматической установкой системы
Установить в автоматическом режиме
Глава 22. Автоматическая установка системы (autoinstall)
Installer/common
Изменение параметров загрузки Первая помощь
Изменить Grub
UEFI Официальный сайт rEFInd Boot Manager
Параметры настройки Конфигурационного файла /boot/efi/EFI/refind/refind.conf, /boot/EFI/BOOT/refind.conf, /Volumes/ESP/EFI/refind/refind.conf, R:\EFI\refind\refind.conf
Формат файла pkg-groups.tar Описание форматов указания групп Alterator-pkg
Оригинальные Образы ALT 8 SP Workstation
Какой программой/командой записывать образ Запись образов на DVD и USB Flash

Образ будет редактироваться AltLinux Workstation 8SP
Репозиторий на 01.10.2024 под 8 лицензию c9f2 будем использовать

Официальная некоторая документация:
8_sp_ruk_adm.pdf
Операционная система Альт 8 СП Руководство Администратора
(6.87 МБ) 3 скачивания
Alt_Workstation_install.pdf
ОПЕРАЦИОННАЯ СИСТЕМА АЛЬТ РАБОЧАЯ СТАНЦИЯ 9.2
(2.4 МБ) 3 скачивания
Alt_Server_install_p10.pdf
ОПЕРАЦИОННАЯ СИСТЕМА АЛЬТ СЕРВЕР 10.2
(4.69 МБ) 5 скачиваний


Видео на Дзене



Видео на Дзен

Распаковывать и собирать обратно будем на AltLinux 8.2
Открываем терминал переходим под root командой Вводим пароль от root

Все в одном скрипте 4 сообщение в данной теме

На основе всего выше перечисленного создаем
Скрипт для Распаковки Образа modaltlinuxiso.sh
modaltlinuxiso.zip
modaltlinuxiso.zip
(1.92 КБ) 5 скачиваний

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

#!/bin/sh

# Модификация установочного ISO образа
# 2024.10.25 A.A.Mamzikov

# https://www.altlinux.org/Модификация_установочного_ISO_образа
# https://www.mytechnote.ru/administrirovanie/kak-sdelat-kastomnyy-disk-alt-linux-s-avtomaticheskoy-ustanovkoy-sistemy/
# https://www.altlinux.org/Autoinstall
# https://www.altlinux.org/Первая_помощь#Изменение_параметров_загрузки
# http://ftp.altlinux.org/pub/distributions/ALTLinux/c8/branch/x86_64/
# https://packages.altlinux.org/en/c9f2/packages/

# Установка пакетов
apt-get install xorriso squashfs-tools cdrkit-utils genisoimage apt-repo-tools

# Путь до ISO-образа пример: ./modaltlinuxiso.sh "/home/user1/alt"$VER"-x64-auto-24-10-2024.iso"
ALTISO=$1
# Путь распаковки образа
DIRISO=/home/user1/ALT-CREATE
# Версия ALT
VER=82

# Создать каталоги
mkdir -p "$DIRISO"/altiso"$VER"
mkdir -p "$DIRISO"/ISO
#mkdir -p "$DIRISO"/squashfs-root"$VER"
mkdir -p "$DIRISO"/syslinux
mkdir -p "$DIRISO"/EDITUEFI


# Получение информации об образе
isoinfo -d -i "$ALTISO" > "$DIRISO"/infoiso.txt
xorriso -indev "$ALTISO" -toc -pvd_info > "$DIRISO"/xorriso.txt

# Распаковка образа
xorriso -osirrox on -indev "$ALTISO" -extract / "$DIRISO"/altiso"$VER"
chmod 700 -R "$DIRISO"/altiso"$VER"


# altinst — базовый образ для установки системы
# live — образ для запуска LiveCD
# rescue — образ для запуска RescueCD
# ALTLinux/ — содержит набор пакетов для установки системы

# Перейдем в папку
cd "$DIRISO"
# Распакуем образ altinst
unsquashfs altiso"$VER"/altinst
# Удалить предыдущее если есть с запросом
rm -ri "$DIRISO"/squashfs-root"$VER"
# Переименуем
mv squashfs-root squashfs-root"$VER"

# Извлекаем список пакетов для изменения если это будет необходимо
# groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае)
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups


# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/install-scripts
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/preinstall.d
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/postinstall.d
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts


# Чтобы новый ISO сохранил возможность запускаться с флешек, необходимо из исходного ISO получить гибридный MBR:
rm "$DIRISO"/syslinux/isohdpfx.bin
dd if="$ALTISO" of="$DIRISO"/syslinux/isohdpfx.bin bs=512 count=1
# Права на архив
chmod 0774 "$DIRISO"/syslinux/isohdpfx.bin


# Распаковка загрузчика UEFI .efiboot.img
mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI
# Проверка что с монтировалось
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
else
    echo "UEFI НЕ СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
fi

# Запаковать образ обратно можно так, предварительно удалив существующий образ:
# rm -f altiso"$VER"/altinst
# mksquashfs squashfs-root"$VER"/ altiso"$VER"/altinst


# Собирать будем скриптом ./build.sh
Пример команды распаковки запускаем скрипт с указанием аргумента пути до образа iso который нужно распаковать (пример altlinux 8.2 sp)
./modaltlinuxiso.sh "Путь до образа"

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

./modaltlinuxiso.sh "/home/user1/altlinux8.2-x64-auto-24-10-2024.iso"
Далее вносим необходимые изменения в образ и собираем образ обратно.
build.zip
build.zip
(3.54 КБ) 2 скачивания
Скрипт Сборки Образа build.sh

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

#!/bin/sh

START=$(date +%s)

# Путь распаковки образа
DIRISO=/home/user1/ALT-CREATE
# Версия ALT
VER=82
# Перейдем в папку с образом
cd "$DIRISO"

# Программа установки будет смотреть в следующих местах
# Каталог "$DIRISO"/altiso"$VER"/Metadata/ или "$DIRISO"/squashfs-root"$VER"/usr/share/install2/metadata/
# Содержимое каталога metadata
# autoinstall.scm — сценарий установки на языке schem
# vm-profile.scm — схема разбивки жёсткого диска на языке Scheme
# pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов
# install-scripts.tar — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты. Скрипты нужно помещать внутрь архива в эти подкаталоги. Скрипты должны быть исполняемыми
# У нас скрипт "$DIRISO"/squashfs-root"$VER"/usr/share/install2/postinstall.d/97-ku.sh при установке системы
#              "$DIRISO"/squashfs-root"$VER"/usr/tmp/kuс/firsttime.d/firsttime.sh - Выполняется при первом включении ОС
# Изменение образа внутри "$DIRISO"/squashfs-root"$VER"/var/tmp/kuс

# Добавить свои пакеты в состав пакетов в подкаталоге ALTLinux/RPMS.main в ""$DIRISO"/altiso"$VER"/ALTLinux/RPMS.main"
# После этого запустите:
genbasedir --topdir="$DIRISO"/altiso"$VER" ALTLinux main
# Обновится содержимое каталога "$DIRISO"/altiso"$VER"/ALTLinux/base/

# Архив с дополнительными группами пакетов
if [ -d "$DIRISO"/altiso"$VER"/Metadata/pkg-groups ]; then
# Удалить старый архив pkg-groups.tar
rm -f "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar
# Пакуем pkg-groups со списками установки пакетов
tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups -cf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar groups lists profiles
# Если архив создался удалим папку
if [ -f "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar ]; then rm -rf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups ; fi
# Права на архив
chmod 0774 "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar
fi

# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
if [ -d "$DIRISO"/altiso"$VER"/Metadata/install-scripts ]; then
# Удалить старый архив install-scripts.tar
rm -f "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar
# Сделать скрипты исполняемыми
chmod +x "$DIRISO/altiso$VER/Metadata/install-scripts"/preinstall.d/*
chmod +x "$DIRISO/altiso$VER/Metadata/install-scripts"/postinstall.d/*
# Пакуем содержимое install-script
tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts -cf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar preinstall.d postinstall.d
# Если архив создался удалим папку
if [ -f "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar ]; then rm -rf "$DIRISO"/altiso"$VER"/Metadata/install-scripts ; fi
# Права на архив
chmod 0774 "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar
fi


# Удаляем старый altins
rm -f "$DIRISO"/altiso"$VER"/altinst

# формируем altinst
mksquashfs "$DIRISO"/squashfs-root"$VER" "$DIRISO"/altiso"$VER"/altinst -b 1024k -comp gzip -Xcompression-level 1
# Удалить распаковку altinst если файл сформировался
#if [ -f "$DIRISO"/altiso"$VER"/altinst ]; then
#rm -rf "$DIRISO"/squashfs-root"$VER"
#fi

# От монтируем загрузчик UEFI
umount "$DIRISO"/EDITUEFI
# Проверим
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo
    echo "Команда размонтирования: umount "$DIRISO"/EDITUEFI"
    echo "Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI"
else
    echo "UEFI для редактирования РАЗМОНТИРОВАНО"
    echo
    echo "Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI"
    echo "Команда размонтирования: umount "$DIRISO"/EDITUEFI"
	#rm -rf "$DIRISO"/EDITUEFI
fi


# Варианты сборки образа

function isomkisofs(){
command='mkisofs \
-input-charset iso8859-1 \ # Кодировка для входных файлов
-o "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
-b syslinux/isolinux.bin \ # Загрузочный образ первичный загрузчик
-c syslinux/boot.cat \ # Файл каталога загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузки
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Включает в образ таблицу информации о загрузке
-J \ # Поддержка Joliet для Windows
-R \ # Поддержка Rock Ridge для UNIX
-V "ALT 8 SP WORKSTATION" \ # Метка тома
"$DIRISO"/altiso"$VER"/ # путь к директории, которую нужно включить в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

# Значения параметров volid и appid полученные на этапе анализа исходного образа
volid=$(cat "$DIRISO"/infoiso.txt "$DIRISO"/xorriso.txt|grep -i ^"Volume id" | sed "s/Volume id.*://I; s/[\']//g; s/^[ \t]*//; s/[ \t]*$//"| awk 'NF {print; exit}')
appid=$(cat "$DIRISO"/infoiso.txt "$DIRISO"/xorriso.txt|grep -i ^"Application id\|App Id" | sed "s/Application id.*://I;s/App Id.*://I;s/[\']//g; s/^[ \t]*//; s/[ \t]*$//"| awk 'NF {print; exit}')

function testiso(){
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet для Windows
-r \ # -rational-rock: Генерировать рационализированную информацию о каталоге Rock Ridge для UNIX
-R \ # -rock Генерировать информацию о каталоге Rock Ridge
-sysid "LINUX" \ # Устанавливает идентификатор системы
-volid "ALT8SP" \ # Метка тома
-eltorito-boot syslinux/isolinux.bin \ # Загрузочный образ первичный загрузчик
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Включает в образ таблицу информации о загрузке
-input-charset iso8859-1 \ # Кодировка для входных файлов
-o "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/ # Путь к директории, которую нужно включить в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}


function isoxorrisor(){
command='xorriso \
-as mkisofs -v \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT8SP64" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
 #-c isolinux/boot.cat \ # короткий -с
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
 #-b isolinux/isolinux.bin
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
 #--grub2-boot-info \ # Файл MBR для Grub2
 #--protective-msdos-label \ # Защитная метка MSDOS для GPT
 #--grub2-mbr syslinux/isohdpfx.bin \ # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
 #-e EFI/.efiboot.img \ # EFI-образ, но с другим синтаксисом
 #-efi-boot-part EFI/.efiboot.img \ # Это часть EFI-загрузки
 #-e boot/grub/efi.img
--efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
 #-o ../custom-ubuntu.iso .
-output "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/  # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}





function isoxorriso(){
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALTSP8" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
 #-c isolinux/boot.cat
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
 #-b isolinux/isolinux.bin
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
 #--grub2-boot-info # Файл MBR для Grub2
 #--protective-msdos-label # Защитная метка MSDOS для GPT
 #--grub2-mbr syslinux/isohdpfx.bin # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
 #-e EFI/.efiboot.img # EFI-образ, но с другим синтаксисом
 #-efi-boot-part EFI/.efiboot.img # Это часть EFI-загрузки
 #-e boot/grub/efi.img
--efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
 #-o ../custom-ubuntu.iso .
-output "$DIRISO"/ISO/alt"$VER"-x64-auto-`date +"%d-%m-%Y-%H-%M-%S"`.iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/  # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

function isoxorrisot(){
# Пример ALT Workstation 9.0
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT Workstation 9.0 x86_64" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "ALT WORKSTATION 9.0 X86_64 2019-10-22" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
-efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
-output ../alt-custom.iso \ # Имя выходного ISO-файла
. # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

function isoxorrisos(){
# Пример ALT Workstation 10
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT Workstation 10" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "ALT WORKSTATION" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot boot/grub/bios.img \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
--eltorito-catalog boot/grub/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
--grub2-boot-info # Файл MBR для Grub2
--protective-msdos-label # Защитная метка MSDOS для GPT
--grub2-mbr syslinux/isohdpfx.bin # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
-e EFI/.efiboot.img # EFI-образ, но с другим синтаксисом
-efi-boot-part EFI/.efiboot.img # Это часть EFI-загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузку
-output ../my-alt-custom.iso \ # Имя выходного ISO-файла
. # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}


# Выбираем через что будем формировать iso образ
#isomkisofs
#testiso
isoxorrisor
#isoxorriso
#isoxorrisot
#isoxorrisos

END=$(date +%s)
DIFF=$(( $END - $START )) 
printf '%dh:%dm:%ds\n' $(($DIFF/3600)) $(($DIFF%3600/60)) $(($DIFF%60))

# Дать права на образы ISO
chmod 775 -R "$DIRISO"/ISO/

# Удалить распаковку если образ собрался
#if [ -f "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso ]; then
#rm -rf "$DIRISO"/altiso"$VER"
#rm -rf "$DIRISO"/syslinux
#rm -f "$DIRISO"/infoiso.txt
#rm -f "$DIRISO"/xorriso.txt
#fi

Запускаем скрипт сборки образа

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

./build.sh

Повторная распаковка после сборки. (образ не заработал надо внести правки, чтобы заново из iso не распаковывать распакуем только что упаковалось скриптом build.sh)

Скрипт unpack.sh
unpack.zip
unpack.zip
(1.11 КБ) 2 скачивания

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

#!/bin/sh

# Повторная распаковка без извлечения образа ISO

# Путь распаковки образа
DIRISO=/home/user1/ALT-CREATE
# Версия ALT
VER=82

# Создать каталоги
mkdir -p "$DIRISO"/altiso"$VER"
mkdir -p "$DIRISO"/ISO
#mkdir -p "$DIRISO"/squashfs-root"$VER"
mkdir -p "$DIRISO"/syslinux
mkdir -p "$DIRISO"/EDITUEFI

# Перейдем в папку
cd "$DIRISO"

# Распакуем образ altinst
#unsquashfs altiso"$VER"/altinst
# Удалить предыдущее если есть с запросом
#rm -ri "$DIRISO"/squashfs-root"$VER"
# Переименуем
#mv squashfs-root squashfs-root"$VER"

# Извлекаем список пакетов для изменения если это будет необходимо
# groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups

# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/install-scripts
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/preinstall.d
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/postinstall.d
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts

# Распаковка загрузчика UEFI .efiboot.img
mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI
# Проверка что смонтировалось
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
else
    echo "UEFI НЕ СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
fi

Распаковываем повторно

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

./unpack.sh
Вносим правки, пакуем обратно

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

./build.sh
Тестируем образ.

Набор ПО для установки системы делится на две части: загрузчик (propagator) и собственно инсталлятор, с которым в основном пользователь и работает.

Загрузчик запускается при помощи аппаратно реализованных низкоуровневых протоколов (протокол загрузки с CD/DVD, PXE для загрузки через сеть). В силу больших ограничений на занимаемое место, единственная его задача -- запустить ядро, найти (при необходимости получить из сети) и запустить инсталлятор. В дистрибутиве загрузчик размещается в initrd образе.

Инсталлятор в свою очередь тоже делится на две части:
1. первая часть (install2) выполняется в специализированной среде инсталлятора, после установки системы происходит перенос настроек из этой среды в только что установленную.
В дистрибутиве первая часть распространяется в виде squashfs-образа файловой системы.

2. вторая часть (install3) выполняется уже внутри установленной системы (и с бэкендами, запущенными на другой копии alteratord).
В дистрибутиве представлена в виде пакетов, устанавливаемых как базовая система.
Благодаря такому разделению сильно сокращается размер первой части и, соответственно, понижаются требования к аппаратной платформе.



При невозможности получения из указанного места программа установки будет смотреть в следующих местах:
1.на диске в каталоге /Metadata/

/home/user1/ALT-CREATE/altiso82/Metadata

2. в образе установщика в каталоге /usr/share/install2/metadata/
/home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/metadata

Содержимое каталога metadata
autoinstall.scm — сценарий установки на языке schem
vm-profile.scm — схема разбивки жёсткого диска на языке Scheme если нет берется /var/cache/alterator/vm-profile.scm
pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов rpm
install-scripts.tar — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты.
Скрипты нужно помещать внутрь архива в эти подкаталоги. Скрипты должны быть исполняемыми


Авто установка (пользователи пароли языки и тд) autoinstall.scm
autoinstall.zip
autoinstall.zip
(1.67 КБ) 5 скачиваний

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/autoinstall.scm

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

; установка языка операционной системы (ru_RU)
("/sysconfig-base/language" action "write" lang ("ru_RU"))
; установка переключателя раскладки клавиатуры на Alt+Shift
;("/sysconfig-base/kbd" action "write" layout "alt_shift_toggle")
("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "alt_sh_toggle")
; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc+3 #t)
; автоматическая разбивка жёсткого диска
("/evms/control" action "write" control open installer #t)
("/evms/control" action "write" control update)
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())
("/evms/control" action "write" control commit)
("/evms/control" action "write" control close)
; Если нет файла /metadata/vm-profile.scm разбивки берем в /var/cache/alterator/vm-profile.scm
;("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())
;после 10.05.2023 (дистрибутивы 10.2) раскоментировать строку ниже
;("/remount-destination" action "write")
; монтирование файловой системы и создание базовых директорий для p10 и ниже скрипт нужно переименовать в pkg-init
; установка пакетов операционной системы
;("pkg-install-init" action "write")
("pkg-init" action "write")
; установка только базовой системы (дополнительные группы пакетов из pkg-groups.tar указываются по именам через пробел в параметре lists)
;("/pkg-install" action "write" lists "" auto #t)
("/pkg-install" action "write" lists "sp/cups-server sp/mate-desktop sp/zero sp/office sp/scanning sp/vlc sp/xorg sp/signal-client" auto #t)
("/preinstall" action "write")
; установка загрузчика GRUB в MBR на первый жёсткий диск без пароля
;("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
; установка загрузчика GRUB в UEFI на первый жёсткий диск без пароля
;("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "*" passwd_2 "*")
; настройка сетевого интерфейса на получение адреса по DHCP
("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "eth0" configuration "dhcp" default "" search "" dns "" computer_name "altpc")
; настройка сетевого интерфейса на статический IPv4
;("/net-eth" action "write" name "eth0" configuration "static" default "192.168.1.1" search "localhost.com" dns "192.168.1.1" computer_name "altpc" ipv "4" ipv_enabled #t)
;("/net-eth" action "add_iface_address" name "eth0" addip "192.168.1.2" addmask "24" ipv "4")
("/net-eth" action "write" commit #t)
; установка пароля суперпользователя root
("/root/change_password" language ("ru_RU") passwd_2 "1234" passwd_1 "1234")
# Установка пароля пользователю user1
("/users/create_account" new_name "user1" gecos "" allow_su #t auto #f passwd_1 "0000" passwd_2 "0000")
; установка загрузчика GRUB в MBR на первый жёсткий диск
("/grub" action "write" language ("ru_RU") device "/dev/sda" passwd "#t" passwd_1 "grubalt" passwd_2 "grubalt")
; Автоустановка в UEFI отключить выше /dev/vda
("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "grubalt" passwd_2 "grubalt")
;/postinstall в конце установки laststate или при первом запуске ОС firsttime выполнить run команда либо набор команд или script скачивается и выполняется.
;("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
;("/postinstall/firsttime" run "curl --silent --insecure http://server/finish")
;("/postinstall/laststate" script "http://server/script.sh")
Установить графический интерфейс MATE, то в список устанавливаемых пакетов нужно добавить группу centaurus/mate:

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

("/pkg-install" action "write" lists "centaurus/mate" auto #t)
При установке системы в режиме EFI загрузчик устанавливается в специальный раздел efi.
Пример установки пароля на загрузчик в режиме EFI (пароль '123'):

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

("/grub" action "write" device "efi" passwd #t passwd_1 "123" passwd_2 "123")
Если установка происходит в режиме Legacy, то загрузчик GRUB необходимо установить на первый жёсткий диск, например:

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

("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
Пример настройки сетевого интерфейса на статический IP-адрес:

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

("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "enp0s3" ipv "4" configuration "static" default "192.168.0.1" search "" dns "8.8.8.8" computer_name "newhost" ipv_enabled #t)
("/net-eth" action "add_iface_address" name "enp0s3" addip "192.168.0.25" addmask "24" ipv "4")
("/net-eth" action "write" commit #t)
где:
192.168.0.25 – IP-адрес;
192.168.0.1 – шлюз по умолчанию;
8.8.8.8 – DNS-сервер;
newhost – имя хоста.


Схема разбивки диска vm-profile.scm
vm-profile.zip
vm-profile.zip
(335 байт) 3 скачивания

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/vm-profile.scm

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

((workstation
  (title . "Setup for workstation")
  (action . trivial)
  (actiondata  ("/boot/efi" (size 1024000 . 1024000 ) (fsim . "FAT32") (methods plain))
               ("swap" (size 8192000 . 8192000) (fsim . "SWAPFS") (methods plain))
               ("/" (size 20971520 . #t ) (fsim . "Ext2/3") (methods plain))))
               )
Если нет файла /metadata/vm-profile.scm разбивки берем в /var/cache/alterator/vm-profile.scm
Пример
Показать
Файл /var/cache/alterator/vm-profile.scm содержит сценарий на языке scheme, описывающий формат автоматической разбивки жёсткого диска. Рассмотрим его на примере:

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

((workstation
  (title . "Setup for workstation")
  (action . trivial)
  (actiondata  ("swap" (size 1024000 . 1024000) (fsim . "SWAPFS") (methods plain))
               ("/" (size 20971520 . 20971520 ) (fsim . "Ext2/3") (methods plain))
               ("/home" (size 1024000 . #t) (fsim . "Ext2/3") (methods  plain))))
               )
Обратите внимание: числовые константы не закавычиваются! Типичным следствием такой ошибки является оценка "требуется 0 MB".
Все числа указаны в виде 512-байтных блоков, поэтому чтобы получить размер в байтах, нужно умножить значения на 512.
В примере указана разбивка:
подкачка (swap) — 512 МБ;
корневой раздел (/) — 10 ГБ;
/home - всё остальное, но не меньше 500 МБ.
Вы можете не указывать этот профиль вообще, возложив автоматическую разметку на профиль в составе дистрибутива (куда он может попасть из сборочного профиля либо в результате выполнения скрипта из пакета вроде volumes-profile-* или installer-distro-*; вариант по умолчанию содержится в alterator-vm).

Имя профиля (workstation) указывается в autoinstall.scm:
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())

Пример файла vm-profile.scm с одним профилем (server) разбивки жёсткого диска:

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

((server
(title . "Setup for server")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods plain))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods plain))))
)
В примере указана разбивка:
подкачка (swap) – 1024 МБ;
корневой раздел (/) – 8 ГБ;
/var – всё остальное, но не меньше 2 ГБ.
Примечание. Все числа в файле vm-profile.scm указываются в виде 512-байтных блоков, поэтому чтобы получить размер в байтах, нужно умножить значения на 512.
Примечание. Добавление записи для /boot/efi не требуется – установщик добавит её сам.

Пример файла vm-profile.scm с тремя профилями разбивки жёсткого диска:

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

((server
(title . "Setup for server")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods plain))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods plain))))
(server_lvm
(title . "Setup for server LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods lvm))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods lvm))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods lvm))))
(timeshift
(title . "Timeshift-compatible setup")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("" (size 40632320 . #t) (fsim . "BtrFS") (methods plain) (subvols ("@" . "/") ("@home" . "/home")))))
)
В этом примере указаны профили:
server – подкачка (swap), корневой раздел и раздел /var;
server_lvm – подкачка (swap), корневой раздел и раздел /var в томе LVM;
timeshift – подкачка (swap) и раздел BtrFS с разбивкой на подразделы @ и @home.

Имя профиля указывается в файле autoinstall.scm:

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

("/evms/profiles/server_lvm" action apply commit #f clearall #t exclude ())

Добавление Пакетов rpm в образ pkg-groups.tar
Можно добавить в altinst пакеты и запустить установку совместно с системой или после перезагрузки при первом включении, но в данном способе растет altinst и нужно будет добавлять оперативной памяти в настройках например 2,4гб оперативки нужно будет 3Гб указать и железо менее 3х гб не запустит.

В официальной документации написано что можно добавлять rpm пакеты в /ALTLinux/RPMS.main
/home/user1/ALT-CREATE/altiso82/ALTLinux/RPMS.main

Обратите внимание при обратной сборке
rpm -K cprocsp-drv-64-4.0.9963-5.src.rpm
cprocsp-drv-64-4.0.9963-5.src.rpm: sha1 md5 ОК
а при сборке образа
genpkglist: cprocsp-drv-64-4.0.9963-5.src.rpm: invalid binary package
genbasedir: Error executing genpkglist.
Ошибка, которую вы получаете при обратной сборке, указывает на то, что cprocsp-drv-64-4.0.9963-5.src.rpm не распознаётся как действительный бинарный пакет..
И получаем
/home/user1/ALT-CREATE/altiso82/ALTLinux/base/pkglist.main сформируется пустым
pkglist.main - Это список пакетов репозитория
Я убрал все пакеты 2шт src и Ошибка ушла, файл pkglist.main сформировался.
В скрипте сборки есть команда
# После этого запустите: genbasedir --topdir=/home/user1/ALT-CREATE/altiso82 ALTLinux main
Обновится содержимое каталога /home/user1/ALT-CREATE/altiso82/ALTLinux/base/
Пакеты добавились в список и контрольные суммы обновились

При добавлении пакетов отсутствующие в репозитории на диске /ALTLinux/RPMS.main.
Важно добавлять абсолютно все нужные пакеты, включая зависимости, зависимости зависимостей и т.д., иначе не будут установлены ни какие пакеты, помимо базовых, даже те, которые были на диске изначально.
Чтобы не перебирать зависимости вручную, на аналогичной голой системе ставим пакеты
Зависимости стянутся сами, и будут находится в папке /var/cache/apt/archieve берем их и добавляем в /ALTLinux/RPMS.main


Далее нам нужно указать их установку при установке системы.

Из официальной документации
Формат Файл pkg-groups.tar представляет собой tar-архив с двумя подкаталогами: groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае). Описание форматов указания групп описано в Alterator-pkg.
Файл pkg-groups.tar проще всего взять с диска из каталога /Metadata/ и доработать, если необходимо.
/home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups.tar

Тут у мня возникала мысль а моно ли сразу поставить новое ядро в образ?
в файле .base есть строка устанавливающая ядро
## DOT_BASE
^kernel-(image|modules-(virtualbox-addition|virtualbox-addition-guest|vmware|scsi|dm-secdel|ipset|ipt-so|tripso|ndpi|drm|lirc|v4l|drm.*))-(std-def)$
в теории нужно закинуть новые пакеты ядра rpm, в теории должно установится но должна быть совместимость всех остальных пакетов с этим ядром и удалить старые пакет иначе установится оба. В общем тут надо пробовать пока это только теория моя)

Для изменения списка пакетов распакуйте архив командой: tar xf pkg-groups.tar
После этого перейдите в подкаталог lists и добавьте или измените файл группы.
Имена пакетов указываются по одному в каждой строке.

Имя файла используемой группы затем указывается через пробел в autoinstall.scm:
(("pkg-install") action "write" lists "group-1 group-2" auto #t)
где group-1 и group-2 — имена файлов со списками пакетов из подкаталога lists.

После изменений упакуйте снова в архив командой: tar cf pkg-groups.tar groups lists
Внимание! Учтите, что в качестве источника пакетов при установке выступает сам диск, поэтому указание не лежащих на нём пакетов приведёт к сбою установки.

Если хотите добавить новые пакеты, пересоберите диск дистрибутива или используйте скрипты, выполняющиеся после установки.

Скрипт у нас уже все распаковал, а при сборке упакует все обратно.

Создадим новую группу для наших пакетов, пусть это будет kuinst.directory

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups/groups/sp/kuinst.directory
Содержимое

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

[Desktop Entry]
Encoding=UTF-8
Type=Directory
Name=Main Components (Xorg)
X-Alterator-PackageList=sp/kuinst
X-Alterator-Parent=sp/desktop
X-Alterator-Required=no
Name[ru_RU]=Софт КУ (Xorg)

Создадим список list с нашими пакетами rpm

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups/lists/sp/kuinst
Содержимое пример

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

# ===================VNC-удаленое управление рабочим столом====================
x11vnc
# ===================Различные алгоритмы сжатия================================
squashfs-tools
# ===================Для извлечения файлов из архивов в формате RAR============
unrar
# ===================xarchiver графический архиватор===========================
xarchiver
# ===================Шрифты Microsoft TrueType=================================
fonts-ttf-ms
# ===================nano текстовый редактор командной строки==================
nano
# ===================Получение времени бездействия (idle time) пользователя====
xprintidle
# ===================Собирает статистику о событиях inotify за определенный период времени
wmctrl
# ===================Отслеживать изменения в файловой системе==================
inotify-tools
# ===================Просмотр документов PDF, PostScript, DjVu, TIFF и другие==
evince
# ===================Графический редактор======================================
pinta
# ===================sane xsane для управления сканерами в графическом интерфейсе
sane
xsane
# ===================gscan2pdf графическая программа для сканирования документов
gscan2pdf
# ===================simple-scan сканирования документов графическая программа
simple-scan
# ===================Spark Обмен мнгновеными сообщениями=======================
Spark
# ===================Браузер Мозила firefox-93=================================
firefox
# ===================Браузер Яндекс 23=========================================
yandex-browser-stable
# ===================htop Диспетчер задач командной строки=====================
htop
# ===================Double Commander файловый менеджер с двойной панелью======
doublecmd-gtk
# ===================freerdp клиент удаленого рабочего стола===================
freerdp
# ===================conky отображает информацию о состоянии системы на рабочем столе
conky
# ===================xtrlock блокировка экрана=================================
xtrlock
# ===================xinput управления входными устройствами в среде X Window System
xinput
# ===================xbindkeys привязки клавиатурных комбинаций к произвольным командам или скриптам горячие клавиши
# xbindkeys (установлено)
# ===================ImageMagick-tools редактирования,обработка изображений разных форматов в командной строке
ImageMagick-tools
# ===================sqliteman графический интерфейс для работы с базами данных SQLite
sqliteman
# ===================GEANY  многофункциональный текстовый редактор (IDE), предназначенный для программирования
geany
geany-plugins
# ===================webptools конвертация изображения в формат WebP===========
libwebp-tools
# ===================repo-tools утилиты, инструменты для работы с репозиториями.
apt-repo-tools
# ===================OpenSSH Server============================================
# openssh-server (уже установлено)
# ===================Зависимости для OCS Интеверизации=========================
dmidecode
ftp
ncftp
nmap
# smartmontools (установлено)
# libpci (установлено)
libpci-devel
#pciutils (установлено)
read-edid
ipmitool
eepm
# wget (установлено)
# perl-base (установлено)
perl-CGI
perl-CPAN
perl-HTML-Mason
perl-IO-All
perl-Proc-Daemon
perl-Proc-PID-File
# perl-XML-SAX (установлено)
# perl-XML-Simple (установлено)
# perl-Digest-MD5 (установлено)
perl-Net-IP
perl-LWP-Protocol-https
perl-Net-CUPS
perl-Net-SNMP
perl-Net-Netmask
# perl-Net-Ping (установлено)
perl-Nmap-Parser
perl-Data-UUID
# perl-Compress-Zlib (установлено)
perl-Module-Install
perl-Crypt-SSLeay
perl-LWP-UserAgent-Determined
perl-DateTime
perl-Mojolicious
perl-AnyEvent
perl-AnyEvent-HTTP
perl-App-cpanminus
libe2fs-devel
asa
net-snmp-utils
net-snmp
# perl-Test-use-ok (установлено)
perl-UUID
perl-Parse-EDID
# ====================CryptoPro Для работы с ЭЦП=============================
cryptopro-preinstall
lsb-cprocsp-base
lsb-cprocsp-rdr-64
cprocsp-rdr-pcsc-64
lsb-cprocsp-kc1-64
lsb-cprocsp-capilite-64
cprocsp-curl-64
cprocsp-rdr-gui-gtk-64
cprocsp-rdr-rutoken-64
lsb-cprocsp-pkcs11-64
# pcsc-lite-rutokens (установлено)
# pcsc-lite-ccid (установлено)
# ====================Cades плагин браузера для работы эцп крипто графии=====
cprocsp-pki-cades-64
cprocsp-pki-plugin-64
# ====================IFC Plugin расширение для работы с форматом IFC.
ifcplugin
# ====================gost-crypto-gui графический интерфейс криптографическими функциями
gost-crypto-gui
# ====================hplip Драйверы и ПО для принтеров МФУ марки HP
# hplip (установлено)
# ====================hplip-hpcups-PPDs настройки и управления принтерами HP
hplip-hpcups-PPDs
# ====================hplip-hpijs-PPDs файлы и драйверы, для настройки и управления принтерами HP
hplip-hpijs-PPDs
# ====================foo2zjs-PPD совместимыми с драйвером foo2zjs настройка управление принтерам
foo2zjs-PPD
# ====================wine для запуска приложение из Windows==============
i586-wine-vanilla.32bit
wine-mono
# ====================Антивирус drweb-workstations========================
drweb-workstations
kuinst.zip
kuinst.zip
(2.27 КБ) 1 скачивание
еще один пример для обновлённого офиса

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups/lists/sp/office
Содержимое пример

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

dia
# LibreOffice-still-extensions
# LibreOffice-still-integrated
# LibreOffice-still-gtk3
# LibreOffice-still-langpack-ru

libreoffice24*
libobasis24*



java-1.8.0-openjdk
dnsjava

Фактические пакеты офиса
Показать
Порядок зависимостей:
rpmlib(PayloadIsXz) <= 5.2-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1


libreoffice24.8-freedesktop-menus-24.8.2-1.noarch.rpm

libobasis24.8-ooofonts-24.8.2.1-1.x86_64.rpm

libreoffice24.8-ure-24.8.2.1-1.x86_64.rpm

libobasis24.8-core-24.8.2.1-1.x86_64.rpm
libobasis24.8-ooofonts <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libobasis24.8-base-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-calc-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-draw-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-en-US-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-beanshell-script-provider-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-javascript-script-provider-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-mediawiki-publisher-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-nlpsolver-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-pdf-import-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-extension-report-builder-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-firebird-24.8.2.1-1.x86_64.rpm
libobasis24.8-core

libobasis24.8-gnome-integration-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-graphicfilter-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-images-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-impress-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-kde-integration-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-libreofficekit-data-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-math-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-onlineupdate-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-ooolinguistic-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-python-script-provider-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-pyuno-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-ru-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-writer-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libobasis24.8-xsltfilter-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1

libreoffice24.8-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1
libobasis24.8-images <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libreoffice24.8-dict-en-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libreoffice24.8-dict-es-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libreoffice24.8-dict-fr-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libreoffice24.8-dict-ru-24.8.2.1-1.x86_64.rpm
libobasis24.8-core <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1
libreoffice24.8-ure <= 24.8.2.1-1

libobasis24.8-postgresql-sdbc-24.8.2.1-1.x86_64.rpm
libobasis24.8-base <= 24.8.2.1-1

libobasis24.8-ru-help-24.8.2.1-1.x86_64.rpm
libobasis24.8-ru <= 24.8.2.1-1

libreoffice24.8-calc-24.8.2.1-1.x86_64.rpm
libobasis24.8-calc <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libreoffice24.8-base-24.8.2.1-1.x86_64.rpm
libobasis24.8-base <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libobasis24.8-ogltrans-24.8.2.1-1.x86_64.rpm
libobasis24.8-impress <= 24.8.2.1-1

libreoffice24.8-impress-24.8.2.1-1.x86_64.rpm
libobasis24.8-impress <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libobasis24.8-librelogo-24.8.2.1-1.x86_64.rpm
libobasis24.8-pyuno <= 24.8.2.1-1
libobasis24.8-writer <= 24.8.2.1-1

libreoffice24.8-writer-24.8.2.1-1.x86_64.rpm
libobasis24.8-writer <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libreoffice24.8-draw-24.8.2.1-1.x86_64.rpm
libobasis24.8-draw <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libreoffice24.8-en-US-24.8.2.1-1.x86_64.rpm
libobasis24.8-en-US <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libreoffice24.8-math-24.8.2.1-1.x86_64.rpm
libobasis24.8-math <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1

libreoffice24.8-ru-24.8.2.1-1.x86_64.rpm
libobasis24.8-ru <= 24.8.2.1-1
libreoffice24.8 <= 24.8.2.1-1



# Репозиторий на диске тест
rpm-dir file:/usr/share/install/repoc x86-64 classic

Обновить список пакетов
apt-get update

Показать в репозитории пакеты
apt-cache search libreoffice

Установка офиса
apt-get install libreoffice24*
Следующие НОВЫЕ пакеты будут установлены:
libobasis24.8-base libobasis24.8-calc libobasis24.8-core libobasis24.8-draw libobasis24.8-en-US libobasis24.8-images libobasis24.8-impress libobasis24.8-math libobasis24.8-ooofonts libobasis24.8-ru libobasis24.8-writer libreoffice24.8 libreoffice24.8-base
libreoffice24.8-calc libreoffice24.8-dict-en libreoffice24.8-dict-es libreoffice24.8-dict-fr libreoffice24.8-dict-ru libreoffice24.8-draw libreoffice24.8-en-US libreoffice24.8-freedesktop-menus libreoffice24.8-impress libreoffice24.8-math libreoffice24.8-ru
libreoffice24.8-ure libreoffice24.8-writer
0 будет обновлено, 26 новых установлено
Установка компонентов офиса

apt-get install libobasis24*
Следующие НОВЫЕ пакеты будут установлены:
libobasis24.8-extension-beanshell-script-provider libobasis24.8-extension-javascript-script-provider libobasis24.8-extension-mediawiki-publisher libobasis24.8-extension-nlpsolver libobasis24.8-extension-pdf-import libobasis24.8-extension-report-builder
libobasis24.8-firebird libobasis24.8-gnome-integration libobasis24.8-graphicfilter libobasis24.8-kde-integration libobasis24.8-librelogo libobasis24.8-libreofficekit-data libobasis24.8-ogltrans libobasis24.8-onlineupdate libobasis24.8-ooolinguistic
libobasis24.8-postgresql-sdbc libobasis24.8-python-script-provider libobasis24.8-pyuno libobasis24.8-ru-help libobasis24.8-xsltfilter


Очистка Кеша пакетов
apt-get clean

#apt-get install libreoffice-common libreoffice-gtk3 libreoffice-l10n-ru

В образе
/home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups/groups/sp/office.directory
[Desktop Entry]
Encoding=UTF-8
Type=Directory
Name=Office packages
X-Alterator-PackageList=sp/office
X-Alterator-Parent=sp/desktop
X-Alterator-Required=no
Name[ru_RU]=Офисный паке


/home/user1/ALT-CREATE/altiso82/Metadata/pkg-groups/lists/sp/office
dia
LibreOffice-still-extensions
LibreOffice-still-integrated
LibreOffice-still-gtk3
LibreOffice-still-langpack-ru

java-1.8.0-openjdk
dnsjava

Пакеты в образе
LibreOffice-still-extensions-6.4.7.2-alt1.x86_64.rpm
LibreOffice-still-integrated-6.4.7.2-alt1.x86_64.rpm
LibreOffice-still-gtk3-6.4.7.2-alt1.x86_64.rpm
LibreOffice-still-langpack-ru-6.4.7.2-alt1.x86_64.rpm
LibreOffice-still-common-6.4.7.2-alt1.x86_64.rpm
Старые пакеты можно удалить, не забыть убрать из списков.
При не об ходимости можно отредактировать другие списки для установки.
Каждый пакет в свою строку пишем полное имя пакета или сокращено и * но тут могут попасть и другие пакеты под сокращение наименование
Так же пакеты могут быть не совместимы с версией ядра если они будут намного новее или не будет выполнятся зависимости пакетов
Будьте внимательны проверяйте!


После того как внесли изменения создали свои необходимые листы с пакетами
Укажем их в autoinstall.scm

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/autoinstall.scm

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

; установка только базовой системы (дополнительные группы пакетов из pkg-groups.tar указываются по именам через пробел в параметре lists)
;("/pkg-install" action "write" lists "" auto #t)
("/pkg-install" action "write" lists "sp/cups-server sp/mate-desktop sp/zero sp/office sp/scanning sp/vlc sp/xorg sp/signal-client sp/kuinst" auto #t)
("/preinstall" action "write")
количество слов: 5013
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

alterator-pkg
Показать
alterator-pkg Модуль предназначен для выбора групп пакетов и установки пакетов из выбранных групп

Принцип работы в режиме инсталлятора
Модули groups и install включаются в инсталлятор под заголовком «Установка пакетов». Для того, чтобы пакеты было откуда устанавливать, в /etc/apt/sources.list окружения инсталлятора прописывается источник пакетов — установочный диск, сетевой источник и т.д. Пакеты устанавливаются командой apt-get install, но конечно, не в окружение инсталлятора, а в чрут run_chroot целевой системы. Для этого в /etc/apt/apt.conf записывается строка

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

 RPM::RootDir "/mnt/destination";
Отвечает за такую подготовку среды инсталлятора скрипт initinstall.d/90-pkg.sh, поставляемый вместе с данным модулем.

API
Для генерации списка групп пакетов просматриваются все файлы *.directory в каталоге /var/lib/install3/groups

Пример файла описания группы:

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

[Desktop Entry]
Encoding=UTF-8
Type=Directory
Name=Office Suite
X-Alterator-PackageList=installer-group-desktop-office-lite
Name[ru_RU]=Офисный пакет
X-Alterator-Conflicts=installer-group-desktop-office
X-Alterator-Parent=installer-group-desktop-office
имя файла (без расширения .directory) является идентификатором группы
Name ­— название группы в интерфейсе (локализованную надпись указывайте в параметре Name[код_языка])
X-Alterator-Conflicts — список идентификаторов конфликтующих групп
X-Alterator-Depends — список идентификаторов зависимых элементов, разделённый пробелами. Так, при выборе этого элемента, будут выбраны все зависимые элементы
X-Alterator-PackageList — название файла (в /var/lib/install3/lists), содержащего имена пакетов группы
X-Alterator-Parent — идентификатор родительского элемента[1] в иерархии групп
X-Alterator-Required — признак включения группы по умолчанию (значение yes или true)
Пример файла с пакетами группы (по одному на строку):

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

openoffice.org
openoffice.org-langpack-ru
openoffice.org-langpack-uk
xpdf
djvu-viewer
fbreader
Построение иерархии
При добавлении группы учтите, что в случае, если дочерний элемент не виден, он не может найти родительского элемента. Сделайте имя файла лексикографически больше, чем у родительского элемента.

Может, наоборот советовать/делать -- 00parent.directory? --mike
Пример:
dhcp-server-a.directory имеет родителем dhcp-server-g, но не показывается
dhcp-server-g.directory — родительский элемент
dhcp-server-a.directory < dhcp-server-g.directory. Переименуйте dhcp-server-a.directory в dhcp-server-g-a.directory

Использование профилей
Профили позволяют выбрать одновременно определённое количество групп пакетов с версии 2.6.10-alt1 .

Файлы профилей с расширением .directory находятся в каталоге /var/lib/install3/profiles. Профили в списке показываются в порядке сортировки имён файлов с ними.

Пример файла /var/lib/install3/profiles/alterator.directory

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

[Desktop Entry]
Type=Directory
Name=Alterator
Name[ru_RU]=Альтератор
X-Alterator-Groups=asterisk-1.6.2 devel-hardware dhcp-server-a
Группы пакетов (имена файлов описания групп без расширения .directory) указываются в поле X-Alterator-Groups через пробел Если ни один файл профиля не найден, выпадающий список с профилями показываться не будет.
Примечание: Если в параметре X-Alterator-Groups не указана ни одна группа, при выборе этого профиля будут убраны флажки у всех элементов списка.

Отладка
Если при достижении шага выбора групп под их списком появляется сообщение (в англоязычном варианте):

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

Required disk space: unable to calculate
— произошла ошибка при попытке запустить apt-get со списком затребованных пакетов. Её причиной может оказаться, например, вошедший в списки, но не попавший в доступные инсталятору репозитории пакет.
Ещё одной проблемой бывает не попавший в lists/ список, на который есть ссылка из выбранного groups/*.directory.
Отлаживаться стоит, переключившись в консоль (Ctrl-Alt-F2) да заглянув в /tmp/install2.log и /var/lib/install3/; если окажется что-то с виду непонятное вроде

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

E: Couldn't find package pkg1 pkg2
-- имейте в виду, что это apt попытался установить пакет с именем "pkg1 pkg2" (именно слипшись).
Можно попробовать установиться по исправленным вручную спискам так:

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

# cd /var/lib/install3/lists
# apt-get install `cat centaurus/mate centaurus/xorg .base`
Примечания
Перед добавлением X-Alterator-Parent следует убедиться, что соответствующий файл parent-name.directory уже существует (либо создать его).
У меня такой паки install3 в образе нет
/var/lib/install3/groups
/var/lib/install3/profiles
/var/lib/install3/profiles/alterator.directory
/var/lib/install3/lists

Неинтерактивные шаги оформленны как последовательно запускаемые скрипты.

Есть особые точки в ходе работы установщика, где можно вставить свой собственный скрипт (подробнее):
Подробнее
Показать
Порядок выполнения шагов и скриптовых хуков
загрузка
/usr/share/install2/initinstall.d/*
alterator-vm (разбивка)
/usr/share/install2/prepkg.d/*
alterator-pkg (установка пакетной базы)
alterator-preinstall (перемонтирование ФС, запуск нижеуказанных наборов preinstall-скриптов)
/mnt/destination/usr/share/install2/preinstall.d/*
/usr/share/install2/preinstall.d/*
настройки, выполняемые из устанавливаемой системы (обычно начиная с установки загрузчика)
/usr/share/install2/postinstall.d/*
перезагрузка

Отладка модулей инсталятора
Для того, чтобы в живой тестовой сборке поправить модуль в процессе инсталяции, можно перейти на вторую консоль и использовать vi(1)
[1].Примечания
до installer-1.1-alt2 (2009) приходилось также делать mount-unionfs /usr/share/install2/ для перевода каталога из readonly в read-write

Чтобы /usr/share/install2/01-myscript работал в нужном окружении (знал про $destdir и т.д.), достаточно запустить его до окончания работы установщика с любой доступной консоли. Всё окружение там есть.

Не забудьте включить скрипт с функциями модулей инсталятора:

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

. install2-init-functions
Конфликты при установке
См. /tmp/install2.log; может быть полезно добавить _до_ начала установки эти строчки в /etc/apt/apt.conf:

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

Debug::pkgMarkInstall "true";
Debug::pkgProblemResolver "true";
1. /usr/share/install2/initinstall.d -- выполняются перед стартом инсталлятора. В этот момент, как правило, производится вся подготовительная работа (генерация конфигурационного файла xorg.conf, необходимые исправления в evms.conf и apt.conf[1]).

2. /usr/share/install2/prepkg.d -- выполняются после инициализации чрута для новой системы ($destdir), но перед собственно установкой пакетов (см. alterator-pkg); здесь можно, например, повлиять на умолчания в "галочках" выбора групп пакетов.

3. /usr/share/install2/preinstall.d -- выполняются сразу после установки базовой системы. Как правило, это скрипты для дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора. Добавлять суда свои собственные скрипты стоит только тогда когда вы чётко представляете свои цели (например перенесли шаг до установки базовой системы и теперь требуется перенести настройки).

4. /usr/share/install2/postinstall.d — выполняются сразу после последнего шага инсталлятора. Как правило, это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы и прочий «окончательный тюнинг» установленных пакетов для тех или иных нужд. Если захочется сделать какие-нибудь специфические настройки «из коробки», то это самое лучшее место для этого.
Обратите внимание: скрипты из такого каталога выполняются сперва из только что установленной системы, затем — из корня инсталятора (см. scripts/postinstall); причём среди последних обычно есть зачищающий отработавшие первые. Следует также учитывать, что даже скрипты из установленной системы выполняются в среде установщика, а не в среде установленной системы.

Некоторые распространённые коллекции скриптов оформлены как пакеты installer-feature-*.

Схема запуска различных подсистем инсталлятора (процесс /sbin/install2):
1. предварительная подготовка и разбор командной строки.
2. запуск /sbin/initinstall -- initinstall.d скрипты.
3. запуск alterator; в ходе работы alterator сразу по окончанию установки базовой системы происходит запуск preinstall.d скриптов.
4. запуск /sbin/postinstall -- postinstall.d скрипты.
5. отмонтирование всех файловых систем, завершение работы.

Cреда инсталлятора — это сильно урезанная система Linux. Имеется несколько дополнительных каталогов:
/image — образ дистрибутива
/mnt/destination — устанавливаемая система

/image Используется прежде всего как источник пакетов, репозиторий которых которые располагаются в /image/ALTLinux.
Список подлежащих установке пакетов определяется в /image/Metadata/pkg-groups.tar (см. ниже). Установка пакетов производится модулем alterator-pkg.

Вся файловая система за исключением каталогов /var и /etc находится в режиме "только чтение".


Изначально пакеты rpm у нас лежали в altinst но для установки требуется большее количество оперативки
/home/user1/ALT-CREATE/squashfs-root82/var/tmp/kuinstall - Изменение Образа (тут все наши файлы правки изменения дополнения)
Или через символическую ссылку
/home/user1/ALT-CREATE/squashfs-root82/usr/tmp/kuinstall
/home/user1/ALT-CREATE/squashfs-root82/var/tmp/kuinstall/repoc/x86-64/RPMS.classic - Хранение пакетов .rpm

Это уже касается скриптов при установке и первом включении более подробно про них дальше тут ток про установку пакетов rpm
/postinstall.d/97-ku.sh в скрипте выполнялось добавление репозитория и установка пакетов во время установки системы
run_chroot apt-repo add 'rpm-dir file:/usr/share/kuinstall/repocs x86-64 classic'
run_chroot apt-get update -y
Пример установки полный путь
run_chroot apt-get install /usr/share/kuinstall/repoc/x86-64/RPMS.classic/xprintidle.rpm -y >> $logfile 2>&1
echo "INSTALLING xprintidle $?"
Просто имя пакета
run_chroot apt-get install unrar -y >> $logfile 2>&1
echo "INSTALLING unrar $?"

/firsttime.d/firsttime.sh - при первом включении
Тут уже обычный apt
apt-get install drweb-workstations -y >> $logfile 2>&1


Мы еще будем возвращаться к данному пути напишу что еще есть внутри
/home/user1/ALT-CREATE/squashfs-root82/usr/share/install2
/alterator-menu
/initinstall.d/90-pkg.sh (alterator-pkg подготовку среды инсталлятора /etc/apt/sources.list RPM::RootDir "/mnt/destination";)
/metadata - используется если нет в корне Metadata
/postinstall.d/97-ku.sh - Выполняется во время установки системы (run_chroot apt-get install установка от chroot)
/preinstall.d
/prepkg.d
/slideshow
/steps
/steps.d
/firsttime.d - Выполняется при первом включении ОС
installer-steps
services-off
systemd-disabled
systemd-enabled

У меня пока тут планируется перенести Metadata/firsttime.d/firsttime.sh и Metadata/postinstall.d/97-ku.sh
mcedit /home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/postinstall.d/97-ku.sh - Выполняется во время установки системы
mcedit /home/user1/ALT-CREATE/squashfs-root82/usr/tmp/kuinstall/firsttime.d/firsttime.sh - Выполняется при первом включении ОС


С пакетами RPM разобрались, переходим к скриптам install-scripts.tar preinstall.d postinstall.d
install-scripts.tar — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты.
Скрипты нужно помещать внутрь архива в эти подкаталоги.
Скрипты должны быть исполняемыми.
Скрипты из архива заменяют одноимённые скрипты инсталлятора которые находятся в одноименных директориях /usr/share/install2/. Получение происходит на стадии запуска initinstall.d.
Поддержка этого архива install-scripts.tar появилась в installer 1.11.3-alt1 (дистрибутивы версии 10.1).

/home/user1/ALT-CREATE/altiso82/Metadata/install-scripts.tar
При распаковке
/home/user1/ALT-CREATE/altiso82/Metadata/install-scripts/postinstall.d
/home/user1/ALT-CREATE/altiso82/Metadata/install-scripts/preinstall.d

альтернативный вариант нахождения скриптов
/home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/metadata/install-scripts.tar
Без архива
/home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/postinstall.d/97-ku.sh (при установке ОС)
/home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/firsttime.d/

/home/user1/ALT-CREATE/squashfs-root82/var/tmp/kuinstall/firsttime.d/firsttime.sh (Первый запуск ОС)
97-ku.sh скрипт скопирует firsttime.d в /etc и при запуске он выполнится
cp -r /usr/tmp/kuinstall $destdir/usr/share/
cp -r /usr/tmp/kuinstall/firsttime.d/* $destdir/etc/firsttime.d/

/etc/firsttime.d/ выполнялся до первого запуска X-ов ghb sysvinit

Скрипты preinstall.d выполняются сразу после установки базовой системы.
Как правило, это скрипты для дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора.
Добавлять сюда свои собственные скрипты стоит только тогда, когда вы чётко представляете свои цели.

Скрипты postinstall.d выполняются сразу после последнего шага инсталлятора.
Как правило, это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы.
Если нужно сделать какие-нибудь специфические настройки системы, то это можно сделать здесь.

Упаковать архив можно, выполнив команду: tar cf install-scripts.tar preinstall.d postinstall.d


alterator-postinstall
С апреля 2015 года появился пакет alterator-postinstall1, который позволяет выполнить в конце установки или при первом запуске команду или скрипт, скачиваемый по сети. Этот пакет должен устанавливаться вместе с другими пакетами, так как запускается во второй стадии установки.

Пример использования:

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

("/postinstall/firsttime" script "http://server/post.sh")
Уровни запуска (указываются после префикса /postinstall/:
laststate Скрипт запускается при завершении Alterator (перед перезагрузкой после установки)
firsttime Скрипт запускается во время первого запуска ОС

Типы команд:

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

("/postinstall/laststate" script "http://server/script.sh")
Скрипт скачивается с сервера и выполняется

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

("/postinstall/laststate" run "command arg1 arg2")
Запуск команды и аргументов. Возможно указание перенаправления.

Примечание по chroot
Данные скрипты выполняются в среде установщика, а не в среде установленной системы.
На уровне laststate для работы с установленной системой требуется указывать пути с $destdir или выполнять команды через run_chroot: post.sh

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

#!/bin/sh

a= . install2-init-functions

run_chroot sh -c "date > /root/STAMP_1"
date > $destdir/root/STAMP_2
Еще пример
mcedit /home/user1/ALT-CREATE/squashfs-root82/usr/share/install2/postinstall.d/97-ku.sh -При установке системы

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

#!/bin/sh

a= . install2-init-functions

kuinstall="$destdir/usr/share/kuinstall"
logfile=$kuinstall/install.log

cp -r /usr/tmp/kuinstall $destdir/usr/share/
cp -r /usr/tmp/kuinstall/firsttime.d/* $destdir/etc/firsttime.d/

# правим лимиты
yes | cp $destdir/etc/security/limits.d/50-defaults.conf $destdir/etc/security/limits.d/50-defaults.conf.bak

echo -e 'IyByZWNvbW1lbmRlZCBkZWZhdWx0cyBmb3IgbW9zdCBzeXN0ZW1zCioJCXNvZnQJY29yZQkwCioJ
CXNvZnQJbnByb2MJMjA0OApyb290CQlzb2Z0CW5wcm9jCTEwMjQKKgkJaGFyZAlucHJvYwk0MDk2
Cg==' | base64 --decode > $destdir/etc/security/limits.d/50-defaults.conf

# ****************************** INSTALL PACKAGES *****************************

run_chroot apt-repo rm all
run_chroot apt-repo add 'rpm-dir file:/usr/share/kuinstall/repocsv35 x86-64 classic'
run_chroot apt-get update -y

echo "repo apt-get update $?" >> $logfile

# kuauthservice service
cp $kuinstall/lib/systemd/system/kuauthservice.service $destdir/lib/systemd/system/

# VNC
run_chroot apt-get install x11vnc -y >> $logfile 2>&1
echo "INSTALLING X11VNC $?"

И далее различные команды
chroot — это команда в Unix-подобных операционных системах, которая изменяет корневую директорию (root directory) для текущего процесса и его дочерних процессов.
Это означает, что программа, запущенная в окружении chroot, будет видеть только файловую систему, начиная с указанной директории, как если бы она была корнем.
Изоляция: chroot используется для создания изолированных сред, что может быть полезно для тестирования, разработки или повышения безопасности. Например, можно запустить сервер или приложение в ограниченной среде, чтобы минимизировать риски


Так же выполнить команды и скрипты можно через autoinstall.scm

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

mcedit /home/user1/ALT-CREATE/altiso82/Metadata/autoinstall.scm
В конец файла autoinstall.scm можно добавить шаг /postinstall, который позволяет в конце установки или при первом запуске ОС выполнить команду или скрипт.
Например:

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

("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
У шага /postinstall есть два уровня запуска:
laststate – скрипт запускается при завершении альтератора (перед перезагрузкой после установки);
firsttime – скрипт запускается во время первого запуска ОС.

И два метода указания скрипта запуска:
script – скрипт скачивается с сервера и выполняется;
run – выполняется заданная команда или набор команд (возможно указание перенаправления) (возможно указание перенаправления).
Примеры:

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

("/postinstall/firsttime" script "http://server/script.sh")
("/postinstall/firsttime" run "curl --silent --insecure http://server/finish")
("/postinstall/laststate" script "http://server/script.sh")
("/postinstall/laststate" run " curl --silent --insecure http://server/gotoreboot")53
Примечание.
На уровне laststate для работы с установленной системой требуется указывать пути с $destdir или выполнять команды через run_chroot


Автоустановка в UEFI
В файле autoinstall.scm поменять установку загрузчика с /dev/vda на efi:
("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "*" passwd_2 "*")

Мы оставляем 2 строки сперва для /dev/vda после строка для UEFI
"autoinstall.scm оба формата uefi legas
на паре машин legacy/UEFI пока сработал следующий вариант:
поместил обе строки в конец файла скрипта
вначале отрабатывает установка grub в MBR первого диска т.к. она в UEFI системе не мешает и первый диск всегда есть
потом ставится grub в UEFI"

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

; установка загрузчика GRUB в MBR на первый жёсткий диск
("/grub" action "write" language ("ru_RU") device "/dev/sda" passwd "#t" passwd_1 "grubalt" passwd_2 "grubalt")
; Автоустановка в UEFI
("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "grubalt" passwd_2 "grubalt")
В файле vm-profile.scm добавить разбивку диска для /boot/efi:

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

("/boot/efi" (size 1024000 . 1024000 ) (fsim . "FAT32") (methods plain))
Внимание! Добавление записи для /boot/efi больше не требуется начиная с alterator-vm-0.4.2-alt1 - установщик добавит её сам!


И так образ мы подготовили осталось сделать что бы он устанавливался в автоматическом режиме использовал схемы установки autoinstall.scm, vm-profile.scm пакеты rpm pkg-groups.tar со скриптами install-scripts.tar.

Для это нам нужно отредактировать загрузчик в автоматический режим установки режима legacy (bios)

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

mcedit /home/user1/ALT-CREATE/altiso82/syslinux/isolinux.cfg
В некоторых случаях в файле
mcedit /home/user1/ALT-CREATE/altiso82/syslinux/syslinux.cfg
Пример как это сделано

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

default harddisk
prompt 1
timeout 200
ui gfxboot bootlogo message
menu title ALT (alt-sp8-workstation)
implicit 1

label harddisk
  localboot -2

label linux
  kernel alt0/vmlinuz
  append initrd=alt0/full.cz ai changedisk fastboot automatic=method:cdrom ramdisk_size=2719744 vga=normal splash=0 showopts

label rescue
  kernel alt0/vmlinuz
  append initrd=alt0/full.cz fastboot live automatic=method:cdrom ramdisk_size=301045 stagename=rescue splash=0 showopts

label memtest
  kernel memtest

label failsafe
  kernel alt0/vmlinuz
    append initrd=alt0/full.cz changedisk ramdisk_size=187401 lang=ru_RU  showopts noapic pci=nomsi noeject acpi=off noload=ahci nomodeset
    
Описание настроек isolinux.cfg
Показать
default harddisk - Указывает, что по умолчанию будет загружен жесткий диск.

prompt 1 - Включает отображение приглашения для выбора загрузки.

timeout 200 - Устанавливает таймер на 200 секунд, в течение которого можно выбрать пункт меню перед автоматической загрузкой.

ui gfxboot bootlogo message - Указывает на использование графического интерфейса с логотипом при загрузке.

menu title ALT (alt-sp8-workstation) - Заголовок меню загрузчика, который будет отображаться на экране.

implicit 1 - Указывает, что неявные метки будут автоматически добавлены для пунктов меню.

Пункты меню:
label harddisk

localboot -2 - Загрузка с локального жесткого диска.

Установка системы
label linux
kernel alt0/vmlinuz - Указывает путь к ядру Linux.
append ... - Параметры, передаваемые ядру при загрузке, такие как:
initrd=alt0/full.cz - Указывает путь к образу initrd.
ai - система должна автоматически выполнять установку без необходимости вмешательства пользователя.
changedisk - Переключает источник загрузки на другой диск (в данном случае, на CD-ROM).
fastboot - Ускоряет процесс загрузки, возможно, отключая некоторые проверки.
automatic=method:cdrom - Указывает, что загрузка должна происходить автоматически с CD-ROM.
ramdisk_size=2719744 - задает размер RAM-диска
vga=normal - режимом отображения видео во время загрузки стандартного текстового режима VGA
splash=0 - отключение заставки во время загрузки
showopts - показать дополнительные параметры загрузки или опции, которые могут быть доступны пользователю

Лайв загрузка
label rescue
kernel alt0/vmlinuz
append initrd=alt0/full.cz fastboot live automatic=method:cdrom ramdisk_size=301045 stagename=rescue splash=0 showopts

label memtest
kernel memtest Указывает на запуск программы тестирования памяти.

режим восстановления.
label failsafe
kernel alt0/vmlinuz
append initrd=alt0/full.cz changedisk ramdisk_size=187401 lang=ru_RU showopts noapic pci=nomsi noeject acpi=off noload=ahci nomodeset


В строке «Параметры загрузки», меню начального загрузчика, можно вручную задать параметры, передаваемые ядру, например:
nomodeset – не использовать modeset-драйверы для видеокарты;
vga=normal – отключить графический экран загрузки установщика;
xdriver=vesa – явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;
acpi=off noapic – отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.

В безопасном режиме отключаются все параметры ядра (apm=off acpi=off mce=off barrier=off vga=normal) , которые могут вызвать проблемы при загрузке. В этом режиме установка будет произведена без поддержки APIC. Возможно, у вас какое-то новое или нестандартное оборудование, но может оказаться, что оно отлично настраивается со старыми драйвера-ми.
Заставка
/home/user1/ALT-CREATE/altiso82/syslinux/back.jpg

/home/user1/ALT-CREATE/altiso82/syslinux/alt0/
full.cz
vmlinuz

Пример из моего образа
syslinux.zip
syslinux.zip
(64.64 МБ) 4 скачивания
vmlinuz — это сжатый файл образа ядра Linux для загрузки операционной системы Linux. файл содержит основные компоненты ядра.
При загрузке системы загрузчик читает файл vmlinuz с загрузочного устройства и распаковывает его в память, после чего распакованный образ ядра запускается из памяти.
Обычно файл vmlinuz находится в директории /boot
full.cz - состоит из двух слоёв. В первом сам initrd, во втором модули ядра и firmware.
распаковка full.cz
Показать
zcat full.cz | cpio -i -d -H newc --no-absolute-filenames
Распаковывал этой командой, но размер распакованных файлов меня сильно удивил - 34М, при весе full.cz аж 73М.
Запаковывал:
find ./src | cpio -R root:root -H newc -o --quiet| gzip > initrd.img
initrd.img весит 68M и отказывается грузиться.
full.cz взял от инсталлятора alt linux 10.

menuentry "AltLinux 7.0.5, simply install" {
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
insmod xfs
set bootpart=uuid:df46d821-e7f9-4e35-bbd2-728bdce8d89a
set isodir=/iso/Alt705simple
set isofile=altlinux-7.0.5-simply-x86_64-install-dvd5.iso
loopback loop (${root})${isodir}/${isofile}
linux (loop)/syslinux/alt0/vmlinuz automatic=method:disk,${bootpart},directory:${isodir}/${isofile} ramdisk_size=183210 changedisk lang=ru_RU splash noeject xdriver=auto quiet=1 showopts
initrd (loop)/syslinux/alt0/full.cz
}
Для Загрузчика UEFI
Нас интересует файл .efiboot.img
/home/user1/ALT-CREATE/altiso82/EFI/.efiboot.img

Все что лежит
/home/user1/ALT-CREATE/altiso82/EFI/BOOT/
elilo.conf
refind.conf - Загрузчик
refind_ia32.conf
/home/user1/ALT-CREATE/altiso82/EFI/refind/
refind.conf
refind_ia32.conf
Это все исходники они никак не влияют на загрузку можно все удалить из папки EFI кроме .efiboot.img

Монтируем .efiboot.img
/home/user1/ALT-CREATE/EDITUEFI/EFI/BOOT/
refind.conf - Правим файл

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

# Ожидания в секундах, 0-вечное ожидание, -1 немедленная загрузк
timeout 3
# По истечении времени ожидания: false загружает параметр default_selection, true или refined выключить компьютер
shutdown_after_timeout false
# Указываем загрузку по умолчанию.
default_selection "ALT Linux Installation"
# Ведение журнала 0-4
log_level 0
# Удаляет указанные функции пользовательского интерфейса: banner, label, singleuser, safemode, hwtest, arrows, hints, editor, badges, all
#hideui
# Значки каталог должен содержать файлы с теми же именами, что и файлы в каталоге стандартных значков
#icons_dir
# Фон картинка в формате ICNS, BMP, PNG или JPEG с глубиной цвета 24, 8, 4 или 1 бит
banner /EFI/refind/icons/bg.png
# noscale без масштабирования, fillscreen заполнять экран
banner_scale fillscree
# Какие теги инструментов будут отображаться во второй строке: shell, memtest, gdisk, gptsync, install, bootorder, apple_recovery, csr_rotate, mok_tool, fwupdate, netboot, about, hidden_tags, exit, shutdown, reboot, firmware, ничего не указано нет пара
#showtools
# false off или 0 графический режим, true on или 1 текстовый режим
textonly false
# Управление мышью true on 1 включено, false off 0 отключено
enable_mouse true

# Дириктивы загрузки:
# internal, external, optical, netboot, hdbios, biosexternal, cd, manual, firmware
# external внешнее сканирование дисков флешки
# internal внутреннее сканирование hdd/ssd/nvm
# optical оптические приводы
# manual - то-есть в ручную указываю директивы загрузки систем
scanfor manual
# Каталог с драйверами, дополнение к подкаталогам drivers и drivers_arch если они есть
scan_driver_dirs /EFI/refind/drivers_x64
# Больше параметров https://www.rodsbooks.com/refind/configfile.html

# ELILO используется в качестве трамплина SB для неподписанных ядер
# Загрузите установки из ALT Linux из EL Torito
menuentry "ALT Linux Installation" {
  icon /EFI/refind/icons/altlinux/altinst.png
  loader /EFI/BOOT/elilo.efi
  # NB: -v seems critical, otherwise we hit this:
  #     gzip_x86_64: invalid exec_header
  options "-v -i full.cz vmlinuz ramdisk_size=301341 stagename=altinst splash lang=ru_RU"
..
   #options "-v -i full.cz vmlinuz ramdisk_size=662701 fastboot stagename=live automatic=method:cdrom 'nomodeset lowmem live shplash showtops lang=ru_Ru"
   options "-v -i full.cz vmlinuz ramdisk_size=2719744 ai changedisk fastboot stagename=altinst automatic=method:cdrom vga=normal splash=0 showopts lang=ru_RU"
}

# ELILO used as SB trampoline for unsigned kernels
menuentry "ALT Linux Live" {
  icon /EFI/refind/icons/altlinux/live.png
  loader /EFI/BOOT/elilo.efi
  # NB: -v seems critical, otherwise we hit this:
  #     gzip_x86_64: invalid exec_header
  options "-v -i full.cz vmlinuz ramdisk_size=1034189 stagename=live splash lang=ru_RU"
}

# ELILO используется в качестве трамплина SB для неподписанных ядер
# Загрузите ALT Linux Восстановления из EL Torito
menuentry "ALT Linux Rescue" {
  icon /EFI/refind/icons/altlinux/rescue.png
  loader /EFI/BOOT/elilo.efi
  # NB: -v seems critical, otherwise we hit this:
  #     gzip_x86_64: invalid exec_header
  options "-v -i full.cz vmlinuz ramdisk_size=316257 stagename=rescue "
}

# Загрузить другие из EL Torito
menuentry "others" {
  icon /EFI/BOOT/icons/os_unknown.png
  loader /EFI/refind/refind_x64.efi
}

Официальный сайт rEFInd Boot Manager

Параметры настройки Конфигурационного файла /boot/efi/EFI/refind/refind.conf, /boot/EFI/BOOT/refind.conf, /Volumes/ESP/EFI/refind/refind.conf, R:\EFI\refind\refind.conf

/home/user1/ALT-CREATE/EDITUEFI/EFI/BOOT/
full.cz
vmlinuz

Отмонтируем образ и собираем образ ISO

Получили
efiboot.zip
efiboot.zip
(69.27 МБ) 1 скачивание
Для отладки укажите в параметрах загрузки ядра instdebug
При установке пакетов могут возникать ошибки. Отследить их можно командой:
grep E: /tmp/pkg-install.log


Запуск автоматической установки
Для включения режима автоматической установки ядру инсталлятора ОС необходимо передать параметр загрузки ai (без значения) и параметр curl с указанием каталога с установочными файлами.
Формат адреса в curl должен быть представлен в виде URL. Пример параметров загрузки:
ai curl=ftp://<IP-адрес>/metadata/



Для обновления системы необходимо выполнить команды (с правами администратора):
# apt-get update
# apt-get dist-upgrade
# update-kernel
# apt-get clean
# reboot

Получить права администратора можно, зарегистрировавшись в системе (например, на второй консоли – нажать клавиши <Ctrl>+<Alt>+<F2>) под именем root или выпол-нив в терминале команду:
$ su -
количество слов: 2017
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Какие ошибки у меня были в процессе и какая задача была в целом.

Образ alt8.2sp уже был изменённым с нашим софтом и настройками из него было вырезано UEFI так как оно не заработало и его не надо было просто убрали.
Далее была закупка ПК
Материнская плата: ASUS PRIME H510M-E R2.0
Процессор: Intel(R) Core(TM) i3-10105 CPU 3.70GHz
Встроенная графика: Intel CometLake-S GT2 UHD Graphics 630 vendor: ASUSTeK driver: i915 v
ASUS PRIME H510M-E R2.0
ASUS PRIME H510M-E R2.0
В чем отличие этого системника от других?
При установке в Legacy формате ставим внешнюю видео карту начинам установку как обычно, после установки выдергиваем и по идее должно все работать на внутренней. Были такие системники что на внутренней vga не было отображения bios и установки, еще на DVI или HDMI изображение могло быть (но тут мониторы были все старенькие vga аналог). Поэтому где графики нет установку делали через внешнюю видео карту.
1.Тут же ставим через внешнюю видео карту установка идет но при первом включении он начинает нас гонять в цикле запуска ХМ это ладно, думаем может ядро обновить там все новые драйвера и ставить с новым ядром.

Цикличность при первом старте
Цикличность
Цикличность
IMG_E7702
IMG_E7702
2.Второй момент образ изначально собирался командой

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

mkisofs \
-input-charset iso8859-1 \ # Кодировка для входных файлов
-o "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
-b syslinux/isolinux.bin \ # Загрузочный образ первичный загрузчик
-c syslinux/boot.cat \ # Файл каталога загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузки
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Включает в образ таблицу информации о загрузке
-J \ # Поддержка Joliet для Windows
-R \ # Поддержка Rock Ridge для UNIX
-V "ALT 8 SP WORKSTATION" \ # Метка тома
"$DIRISO"/altiso"$VER"/ # путь к директории, которую нужно включить в ISO
3.B далее писался в RUFUS на флешку, если писать образ на флешку командой dd то он получается не загрузочным.
Пишем флешку через Rufus, начинаем установку и получаем что в процессе установки флешка теряется установщик ее не видит, как устройство есть и определяется в VFAT формате.
Цикличность
Цикличность
drive-media-to-appear.JPG
drive-media-to-appear.JPG
error-filesystem.JPG
error-filesystem.JPG
ntfs-driver
ntfs-driver
IMG_E7820
IMG_E7820
IMG_E7823
IMG_E7823
IMG_7824
IMG_7824
4.Еще был момент был передан распакованный образ, а при копировании на флешку теряются все символические ссылки естественно такой образ работать не будет, удаляем раcпакованную паку altinst и заново распаковываем.

Далее Образ формируем командой

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

xorriso \
-as mkisofs -v \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT8SP64" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
 #-c isolinux/boot.cat \ # короткий -с
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
 #-b isolinux/isolinux.bin
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
 #--grub2-boot-info \ # Файл MBR для Grub2
 #--protective-msdos-label \ # Защитная метка MSDOS для GPT
 #--grub2-mbr syslinux/isohdpfx.bin \ # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
 #-e EFI/.efiboot.img \ # EFI-образ, но с другим синтаксисом
 #-efi-boot-part EFI/.efiboot.img \ # Это часть EFI-загрузки
 #-e boot/grub/efi.img
--efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
 #-o ../custom-ubuntu.iso .
-output "$DIRISO"/ISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/  # Путь к директории для включения в ISO

В процессе правок, тестируем оригинальные образы на новом железе
Ставим оригинальный ALTLINUX 8SP в UEFI нет графики на интегрированной видео карте
Ставим оригинальный ALTLINUX 9 в UEFI нет графики на интегрированной видео карте
Ставим оригинальный ALTLINUX 10 в UEFI есть графика на интегрированной видео карте

Почему именно в UEFI ? как только достаем внешнюю видеокарту, подключаем к интегрированной видео карте в Биосе пропадают все диски в формате Legacy и ожидается загрузка только в UEFI
По этому в наш текущий образ нужно встроить UEFI в автоматическом режиме установки.


Версии UEFI refind
alt8sp-refind
alt8sp-refind
alt8-refind
alt8-refind
alt9-refind
alt9-refind
Так как в моем образе не было UEFI возвращаем его из оригинального образа.
Скопировав оригинальный UEFI из образа, собираю образ и пробую поставить его в ручном режиме через графику
Uefi грузится начинаю установку дохожу до диска диск видится выбираю разбить автоматически
получаю ошибку Operation not permitted
Operation not permitted "/evms/control" action "write" control commit
любое другое действие с диском приводит к той же ошибке хм....
Operation not permitted
Operation not permitted
Хотя на оригинальном образе диск разбивает, пробую взять refind с другова образа другой версии и снова та же ошибка...
Пробую автоматический режим установки на оригинальном образе UEFI
Добавив папку Metadata со всеми файлами

Ручные параметры авто установки работают
autoinstall
autoinstall
Правлю
/home/user1/ALT-CREATE/altiso82/EFI/refind/
refind.conf
refind_ia32.conf
И ничего не меняется нет автоматического режима установки, дошло до того что я удалил все содержимое папки EFI кроме .efiboot.img
Стало понятно что рядом это исходники сборки, а все нужное нам лежит в .efiboot.img его нужно распаковать и изменить конфиг.
/home/user1/ALT-CREATE/EDITUEFI/EFI/BOOT/refind.conf
Меняем собираем.

Монитруем получаем содержимое .efiboot.img
mount -o rw "/home/user1/ALT-CREATE/altiso82/EFI/.efiboot.img" /home/user1/ALT-CREATE/altiso82/EFI
Проверка / Просмотреть
losetup -a
mount | grep /EFI
/home/user1/ALT-CREATE/altiso82/EFI/.efiboot.img on /home/user1/ALT-CREATE92/altiso82/EFI type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=866,iocharset=utf8,shortname=mixed,utf8,errors=remount-ro)
Отмонитруем
umount /home/user1/ALT-CREATE92/altiso82/EFI

И мое удивление в оригинальном образе не поддерживается autoinstall.scm он не воспринимает пишет что нет systemd как так, инструкция ведь для alt9 и alt10
autoinstall-systemd
autoinstall-systemd
System has not been booted with systemd as init system )PID 1) can't operate failed to connect to bus host is down
Попалось в интернете
"версия WSL2 не поддерживает команду systemd
отдельно включить systemd или обновить WSL до последней версии wsl --update"

Получил 2 ошибки мой образ ошибка с диском, оригинальный не может работать с autoinstall.scm
Operation not permitted
Operation not permitted

Пробую разные варианты с переносом папок сравнением содержимого и тд.
В итоге в своем образе беру
/home/user1/ALT-CREATE/altiso82/syslinux/alt0/
full.cz
vmlinuz
И копирую их в UEFI
/home/user1/ALT-CREATE/EDITUEFI/EFI/BOOT/
full.cz
vmlinuz

Собираю образ, ставлю и о чудо образ ставится диск разбивается, авто установка идет.

Дальше еще была ошибка на оперативную память при установке
ram
ram
ram
ram
На ПК 8Гб а он ругается, хотя на виртуалке с 3Гб все ставится.
Ошибка стала так как файл altinst с нашими изменениями и дополнениями стал большим 2.6Гб изначально 512мб
Правим в загрузчиках объем память если на ПК менее 4ГБ Система уже ставится не будет

mcedit /home/user1/ALT-CREATE/altiso82/syslinux/isolinux.cfg
mcedit /home/user1/ALT-CREATE/EDITUEFI/EFI/BOOT/refind.conf
Параметр
ramdisk_size=1800000 на ramdisk_size=2719744 так как altinst стал больше размером

Собираем обратно образ, записываем на флешку и ставим образ ставится без проблем в автоматическом режиме.

Как просмотреть ошибки в процессе установки системы (пакетов rpm) и то что вообще идет установка
Допустим у нас на этом этапе стоит установка, а может идет как понять?
Автоматическая установка системы
Автоматическая установка системы
Если это виртуалка то по индикации жесткого диска что пишутся данные,
Если системник индикация флешки идет чтение и индикация процессора что идет загрузка

А как посмотреть ? Или как просмотреть ошибки если процесс установки остановился ?

Работа ОС, как правило, организована в виртуальных терминалах с 1 по 12, хотя для начинающего пользователя это может быть неочевидным.
Графическая подсистема xorg запускается в одном или нескольких виртуальных терминалах.
Ранее обычно использовались терминалы 7 и 8, сейчас часто используется терминал 1.
Терминал 12, как правило, используется для вывода системных сообщений.

Переключение между терминалами осуществляется комбинацией клавиш
Ctrl+Alt+Fn , где Fn функциональные клавиши от F1 до F12.

Если переключение осуществляется из не из графической среды, то можно не использовать Ctrl: Alt+Fn.
Это знание чаще всего бывает полезно в случае проблем с графической подсистемой:
можно переключиться в текстовый терминал, посмотреть журналы, исправить настройки.
Так же это бывает полезно при установке, если надо что-то сделать вне инсталлятора, либо при работе, если какие-то действия нельзя сделать в графической среде.

У меня работает Alt F2 или Alt F3 вернутся обратно на экран установки Alt F1

Далее смотри лог
/tmp/pkg-install.log

Для отладки укажите в параметрах загрузки ядра instdebug
При установке пакетов могут возникать ошибки.
Отследить их можно командой:

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

grep E: /tmp/pkg-install.log
Вывести весть лог

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

cat /tmp/pkg-install.log
Вывести 10 последних строк

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

cat /tmp/pkg-install.log | tail -n 10
Найти строки где нет зависимости

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

cat /tmp/pkg-install.log|grep -i 'Depends'
Или так с номером строки

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

grep -in 'Depends' /tmp/pkg-install.log
вывести определённый номер строки и следующие 20 строк из файла
с 10-й строки. Вот как это сделать:
sed -n '10,30p' /tmp/pkg-install.log
строки с 25-й по 45-ю:
sed -n '25,45p' /tmp/pkg-install.log


Чтение лога по мере написания построчно

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

tail -f /tmp/pkg-install.log
Вывод по 10 строк

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

tail -n 10 -f /tmp/pkg-install.log
Текстовый редактор

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

vim /tmp/pkg-install.log
Кто не знает как выйти из Vim
Показать
Сохранить изменения и выйти:

Нажмите Esc, чтобы убедиться, что вы находитесь в режиме команд.
Введите :wq и нажмите Enter. Это сохранит изменения и выйдет из Vim.
Выйти без сохранения изменений:

Нажмите Esc.
Введите :q! и нажмите Enter. Это выйдет из Vim без сохранения изменений.
Сохранить изменения (без выхода):

Нажмите Esc.
Введите :w и нажмите Enter. Это сохранит изменения, но останется в Vim.
Логи после установки ОС

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

mcedit /root/.install-log/alteratord.log

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

mcedit /root/.install-log/diskinfo

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

mcedit /root/.install-log/install2.log

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

mcedit /root/.install-log/pkg-install.log

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

mcedit /root/.install-log/remount.log

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

mcedit /root/.install-log/wizard.log

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

mcedit /root/.install-log/x11.log

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

mcedit /var/log/rpmpkgs


Просмотр установленных пакетов по алфавиту

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

rpm -qa | sort
Выгрузить в список

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

rpm -qa | sort > installed_packages.txt
Поиск установленных пакетов

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

rpm -qa | grep -i 'имя пакета'
время установки каждого пакета

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

rpm -qa --last
количество слов: 704
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Еще информация оставлю в одном месте.

Параметры командной строки

Загрузчик инсталлятора принимает следующие параметры:
stagename=<имя> -- название squashfs образа со второй стадией, по умолчанию "altinst".

splashcount=<номер> -- количество шагов progressbar'а bootsplash, которые необходимо выполнить до полной загрузки системы. Используется только в том случае, если в bootsplash включён режим silent.

automatic=атрибут:значение,атрибут:значение - настройка поведения propagator. Возможно достаточно детальное описание поведения. Основной атрибут -- method, способ установки.
При использовании gfxboot метод установки можно выбрать нажатием на F4.

Инсталлятор принимает следующие параметры:
xdriver -- графический инсталлятор предпринимает попытку автоматического подбора драйвера видеокарты, но иногда это ему не удаётся. Данным параметром, можно отключить "искуственный интеллект".

instdebug -- если будет присутсвовать этот параметр, то до и после инсталлятора будет запущена оболочка shell.
Очень полезное средство, когда требуется выяснить почему инсталлятор не запускается.
Вообще последовательность работы внутренних скриптов следующая: install2 -> xinit -> alterator-install2 -> "alterator-wizard".
При необходимости, можно вручную загрузить xorg (команда xinit), и в открывшемся окне терминала запустить alterator-install2 (или alterator-wizard) вручную.

expertmode — режим дополнительной функциональности. Например, возможность выбора других файловых систем.

Отладочная информация
В ходе работы инсталлятора на одной из виртуальных консолей доступна оболочка shell для отладки (на остальных консолях можно при этом наблюдать сообщения от различных работающих подсистем).
Инсталлятор создаёт несколько файлов журнала и в случае возникновения каких-либо проблем эти файлы можно отослать разработчикам для "разбора полётов" и выяснения причин отказа.
Во время работы инсталлятора эти журналы размещаются в /tmp, в установленную систему они копируются в /root/.install-log.

Возможно изучение следующих журналов:
install2.log - стандартный вывод (stdout, stderr) от инсталлятора. Тут можно обнаружить полезные сообщения, если инсталлятор вдруг не запустился или "свалился" на пол-пути.

basesystem.log - стандартный вывод (stdout,stderr) от процесса установки базовой системы. Здесь наблюдаются все ошибки в устанавливаемых пакетах, в частности немаловажным является изучение порядка установки.

wizard.log - отладочная информация от alterator. Здесь записаны все команды пролетавшие по его внутренней шине. Полезно для уточнения причин отказа того или иного шага. Кроме того, данный лог может использоваться для воспроизведения установки при помощи alterator-autoinstall (there have been some problems with this: altbug #31817).

Типичный сценарий работы инсталлятора
Выбор языка и клавиатуры - по некоторому алгоритму выбирается язык на котором будет происходить установка системы и её работа. Вместе с языком надо бы выбрать и раскладку клавиатуры, ибо не у всех народов мира она QWERTY. (см. тж. altbug #6781)

Настройка даты и времени - чтобы вся дальнейшая установка отработала корректно, необходимо убедиться, что на машине правильно установлены часы
Подготовка целевого устройства - создание разделов, настройка точек монтирования.
При использовании p7/branch и новее обратите внимание на altbug #28181, добавилось перемонтирование свежесозданных разделов без применения EVMS для обеспечения окружения в части блочных устройств и ФС, совпадающего с итоговым.

Установка базовой системы - фактически базовая система -- это система, достаточная для того чтобы всю оставшуюся работу инсталлятора проводить в ней. В частности, в базовую систему устанавливаются модули инсталлятора, которые будут запущены чуть позже.
Перенос настроек в установленную систему - часть данных введённых пользователем ранее осталась в среде инсталлятора, необходимо их донести до новой системы. Также на этом этапе выгружаются из памяти большая часть предыдущих модулей и инсталлятор переходит (chroot) к работе из новой системы.

Дополнительные настройки - дальнейший тюнинг системы: установка дополнительных пакетов, настройка сети, задание пароля для администратора системы, создание первого пользователя, и так далее и тому подобное ... Все запускаемые модули должны быть предварительно установлены в базовую систему.

Вполне допустимо вносить изменения в установленный порядок, но делайте это всё на свой страх и риск. Например, модули могут быть не подготовлены к тому, чтобы сделанные при их помощи настройки были перенесены из среды инсталлятора в базовую систему. Самая правильная идея - заниматься творчеством в районе пункта №6.


Неинтерактивные шаги инсталлятора
Часть шагов установщика пользователь видит на экране (настройка времени, установка системы), а часть нет. Неинтерактивные шаги оформленны как последовательно запускаемые скрипты.

Есть особые точки в ходе работы установщика, где можно вставить свой собственный скрипт (подробнее):
Подробнее
Показать
Порядок выполнения шагов и скриптовых хуков
загрузка
/usr/share/install2/initinstall.d/*
alterator-vm (разбивка)
/usr/share/install2/prepkg.d/*
alterator-pkg (установка пакетной базы)
alterator-preinstall (перемонтирование ФС, запуск нижеуказанных наборов preinstall-скриптов)
/mnt/destination/usr/share/install2/preinstall.d/*
/usr/share/install2/preinstall.d/*
настройки, выполняемые из устанавливаемой системы (обычно начиная с установки загрузчика)
/usr/share/install2/postinstall.d/*
перезагрузка

Отладка модулей инсталятора
Для того, чтобы в живой тестовой сборке поправить модуль в процессе инсталяции, можно перейти на вторую консоль и использовать vi(1)
[1].Примечания
до installer-1.1-alt2 (2009) приходилось также делать mount-unionfs /usr/share/install2/ для перевода каталога из readonly в read-write

Чтобы /usr/share/install2/01-myscript работал в нужном окружении (знал про $destdir и т.д.), достаточно запустить его до окончания работы установщика с любой доступной консоли. Всё окружение там есть.

Не забудьте включить скрипт с функциями модулей инсталятора:

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

. install2-init-functions
Конфликты при установке
См. /tmp/install2.log; может быть полезно добавить _до_ начала установки эти строчки в /etc/apt/apt.conf:

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

Debug::pkgMarkInstall "true";
Debug::pkgProblemResolver "true";
1. /usr/share/install2/initinstall.d -- выполняются перед стартом инсталлятора. В этот момент, как правило, производится вся подготовительная работа (генерация конфигурационного файла xorg.conf, необходимые исправления в evms.conf и apt.conf[1]).

2. /usr/share/install2/prepkg.d -- выполняются после инициализации чрута для новой системы ($destdir), но перед собственно установкой пакетов (см. alterator-pkg); здесь можно, например, повлиять на умолчания в "галочках" выбора групп пакетов.

3. /usr/share/install2/preinstall.d -- выполняются сразу после установки базовой системы. Как правило, это скрипты для дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора. Добавлять суда свои собственные скрипты стоит только тогда когда вы чётко представляете свои цели (например перенесли шаг до установки базовой системы и теперь требуется перенести настройки).

4. /usr/share/install2/postinstall.d — выполняются сразу после последнего шага инсталлятора. Как правило, это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы и прочий «окончательный тюнинг» установленных пакетов для тех или иных нужд. Если захочется сделать какие-нибудь специфические настройки «из коробки», то это самое лучшее место для этого.
Обратите внимание: скрипты из такого каталога выполняются сперва из только что установленной системы, затем — из корня инсталятора (см. scripts/postinstall); причём среди последних обычно есть зачищающий отработавшие первые. Следует также учитывать, что даже скрипты из установленной системы выполняются в среде установщика, а не в среде установленной системы.

Некоторые распространённые коллекции скриптов оформлены как пакеты installer-feature-*.

Схема запуска различных подсистем инсталлятора (процесс /sbin/install2):
1. предварительная подготовка и разбор командной строки.
2. запуск /sbin/initinstall -- initinstall.d скрипты.
3. запуск alterator; в ходе работы alterator сразу по окончанию установки базовой системы происходит запуск preinstall.d скриптов.
4. запуск /sbin/postinstall -- postinstall.d скрипты.
5. отмонтирование всех файловых систем, завершение работы.

Cреда инсталлятора — это сильно урезанная система Linux. Имеется несколько дополнительных каталогов:
/image — образ дистрибутива
/mnt/destination — устанавливаемая система

/image Используется прежде всего как источник пакетов, репозиторий которых которые располагаются в /image/ALTLinux.
Список подлежащих установке пакетов определяется в /image/Metadata/pkg-groups.tar (см. ниже). Установка пакетов производится модулем alterator-pkg.

Вся файловая система за исключением каталогов /var и /etc находится в режиме "только чтение".


Данные и метаданные
Инсталлятор размещается в корне CD/DVD-диска в файле altinst. Это образ файловой системы формата squashfs. Для работы ваших скриптов им возможно потребуются некоторые файлы с данными.

Первый способ ("данные") - разместить их вместе с инсталлятором. Это делается во время сборки squashfs образа (при помощи хуков spt или mkimage). Соответственно для того чтобы изменить данные - надо создать заново файл altinst. Иногда это не очень удобно и хочется менять отдельные параметры созданного дистрибутива без полной пересборки. А поэтому существует второй способ.

Второй способ ("метаданные") - рядом с файлом altinst вы обнаружите каталог Metadata. Всё что туда положите можно будет потом получить прямо в скриптах вызвав утилиту cp-metadata — данные будут доставлены, даже если установка идёт через сеть. Формат запуска:

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

metadata-cp <целевой-каталог>/<файл>
В результат будет взят (скачан, скопирован) Metadata/<файл> и положен в <целевой-каталог>.

На данный момент используются следующие метаданные:
basesystem.manifest - список rpm-пакетов составляющих базовую систему. Фактически это список пакетов из каталога RPMS.base.
Получение происходит на стадии запуска initinstall.d

pkg-groups.tar — описание групп пакетов, устанавливаемых дополнительно при помощи модуля alterator-pkg. Получение происходит на стадии запуска preinstall.d

autoinstall.scm — сценарий автоматической установки для alterator-autoinstall. Получение происходит на стадии запуска initinstall.d.

vm-profile.scm — различные варианты автоматической разбивки диска для модуля разбивки диска alterator-vm. Получение происходит на стадии запуска initinstall.d.

install-scripts.tar - содержит дополнительные скрипты для preinstall.d и postinstall.d в одноимённых каталогах (начиная с версии installer 1.11.3-alt1). Скрипты должны быть исполняемыми. Скрипты из архива заменяют одноимённые скрипты инсталлятора. Получение происходит на стадии запуска initinstall.d.

Сборка собственного инсталлятора

Описание шагов инсталлятора делится на две части: описание порядка шагов и собственно описание каждого шага. Описание шага полностью повторяет описание модуля конфигуратора. Все описания шагов размещаются в каталогe /usr/share/install2/steps/.

Порядок шагов указывается в файле /usr/share/install2/installer-steps (см. alterator-wizardface). В этом файле перечисляются имена desktop-файлов без полного пути и суффикса .desktop.
Вот пример типичного набора шагов инсталлятора:

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

sysconfig
license
datetime
vm
pkg
installer-preinstall
grub
installer-network
users-root
users-add
release-notes
В поставке с инсталлятором идут описания самых распространённых шагов.

Примечание: По техническим причинам (инсталлятору нужно видеть описание всех шагов при старте одновременно, а часть из-них появляется после базовой системы), dekstop-файлы не распределяются по пакетам модулей, а лежат в пакетах installer-*-stage2.
Пакет installer-stage2 содержит набор готовых desktop-файлов, достаточный для большинства дистрибутивов. Если хочется добавить свои особые шаги - сохраняйте все необходимые вам desktop-файлы в installer-flavour-stage2.

Профиль инсталлятора
Профиль инсталлятор состоит из:
список шагов
описание нестандартных шагов (если есть)
postinstall.d скрипты (если надо)

Ядро инсталлятора, основные скрипты, шаги установки и файлы с описанием основных шагов размещаются в серии пакетов installer (installer,installer-stage2,installer-stage3).

Профиль размещается в серии пакетов installer-distro (installer-distro, installer-distro-stage2, installer-distro-stage3). Не забудьте добавить в каждый пакет зависимости на пакеты с необходимыми модулями alterator и на соответствующие пакеты installer.

Вместо написания своих preinstall.d/postinstall.d скриптов постарайтесь использовать готовые компоненты
количество слов: 332
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Все в одном с крипте распаковка образа, сборка, запись на флешку.

Распаковать образ командой:

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

./modaltlinux.sh unpak "/путь до образа/altliux.iso"
Или командой

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

./modaltlinux.sh 1 "/путь до образа/altliux.iso"
Собрать образ командой:

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

./modaltlinux.sh build
Или командой

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

./modaltlinux.sh 2
Повторно распаковать командой:

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

./modaltlinux.sh extract
Или командой

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

./modaltlinux.sh 3
Записать образ командой:

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

./modaltlinux.sh record "/путь до записываемого образа/altliux.iso"
Или командой

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

./modaltlinux.sh 4 "/путь до записываемого образа/altliux.iso"
Запустить проверку RPM всех пакетов:

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

./modaltlinux.sh rpms
Или командой

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

./modaltlinux.sh 5
указать конкретные пакеты:

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

./modaltlinux.sh 5 "vlc-3.0.11-alt1.x86_64.rpm;zabbix-agent-4.4.4-alt0.p9.1.x86_64.rpm"
Вызвать справку командой:

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

./modaltlinux.sh help
Или командой

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

./modaltlinux.sh 0
СКАЧАТЬ
MODISOALT.zip
MODISOALT.zip
(13.89 КБ) 0 скачиваний
Цветная справка
MODISOALT.zip
MODISOALT.zip
(17.32 КБ) 2 скачивания
modaltlinux.sh

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

#!/bin/bash

# Модификация установочного ISO образа
# 2024.11.28 A.A.Mamzikov
# https://diyit.ru/viewtopic.php?t=2222

# https://www.altlinux.org/Модификация_установочного_ISO_образа
# https://www.mytechnote.ru/administrirovanie/kak-sdelat-kastomnyy-disk-alt-linux-s-avtomaticheskoy-ustanovkoy-sistemy/
# https://www.altlinux.org/Autoinstall
# https://www.altlinux.org/Первая_помощь#Изменение_параметров_загрузки
# http://ftp.altlinux.org/pub/distributions/ALTLinux/c8/branch/x86_64/
# https://packages.altlinux.org/en/c9f2/packages/

# Установка пакетов
#apt-get install xorriso squashfs-tools cdrkit-utils genisoimage apt-repo-tools

# Список необходимых пакетов
PACKAGES=("xorriso" "squashfs-tools" "cdrkit-utils" "genisoimage" "apt-repo-tools")
# Массив для недостающих пакетов
MISSING_PACKAGES=()
# Проверка установленных пакетов
for PACKAGE in "${PACKAGES[@]}"; do
    if ! rpm -q "$PACKAGE" &>/dev/null; then
        echo "$PACKAGE не установлен."
        MISSING_PACKAGES+=("$PACKAGE")
    else
        echo "$PACKAGE уже установлен."
    fi
done
# Установка недостающих пакетов, если таковые имеются
if [ ${#MISSING_PACKAGES[@]} -ne 0 ]; then
    echo "Устанавливаем недостающие пакеты для работы скрипта: ${MISSING_PACKAGES[*]}"
    apt-get install "${MISSING_PACKAGES[@]}" -y
    echo ""
else
    echo "Все пакеты не обходимые для работы скрипта уже установлены."
    echo ""
fi

# Путь до ISO-образа пример: ./modaltlinux"$VER".sh "/home/user1/alt"$VER"-x64-auto-24-10-2024.iso"
ALTISO=$2
# Текущий путь откуда запущен скрипт
#currentpath=$(readlink -f $0)
#currentpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
currentpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"

# Путь распаковки образа
DIRISO="${currentpath}"/ALT-CREATE
# Версия ALT
VER=84

# Создать каталоги
mkdir -p "$DIRISO"/altiso"$VER"
mkdir -p "${currentpath}"/OUTISO
#mkdir -p "$DIRISO"/squashfs-root"$VER"
mkdir -p "$DIRISO"/syslinux
mkdir -p "$DIRISO"/EDITUEFI



function isounpack(){
# Проверяем, передан ли второй аргумент
if [ -z "$ALTISO" ]; then
    echo "Ошибка: Не указан путь до образа"
    exit 1
fi

# Проверяем, найден ли образ ISO по указаному пути
if [ ! -f "$ALTISO" ]; then
    echo "Образ не найден: $ALTISO"
    exit 1
fi

# Получение информации об образе
isoinfo -d -i "$ALTISO" > "$DIRISO"/infoiso.txt
xorriso -indev "$ALTISO" -toc -pvd_info > "$DIRISO"/xorriso.txt

# Распаковка образа
xorriso -osirrox on -indev "$ALTISO" -extract / "$DIRISO"/altiso"$VER"
chmod 700 -R "$DIRISO"/altiso"$VER"


# altinst — базовый образ для установки системы
# live — образ для запуска LiveCD
# rescue — образ для запуска RescueCD
# ALTLinux/ — содержит набор пакетов для установки системы

# Перейдем в папку
cd "$DIRISO"
# Распакуем образ altinst
unsquashfs altiso"$VER"/altinst
# Удалить предыдущее если есть с запросом
rm -ri "$DIRISO"/squashfs-root"$VER"
# Переименуем
mv squashfs-root squashfs-root"$VER"

# Извлекем список пакетов для изменения если это будет необходимо
# groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае)
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups


# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/install-scripts
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/preinstall.d
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/postinstall.d
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts


# Чтобы новый ISO сохранил возможность запускаться с флешек, необходимо из исходного ISO получить гибридный MBR:
rm "$DIRISO"/syslinux/isohdpfx.bin
dd if="$ALTISO" of="$DIRISO"/syslinux/isohdpfx.bin bs=512 count=1
# Права на архив
chmod 0774 "$DIRISO"/syslinux/isohdpfx.bin


# Распаковка загрузчика UEFI .efiboot.img
mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI
# Проверка что смонтировалось
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
else
    echo "UEFI НЕ СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
fi

# Запаковать образ обратно можно так, предварительно удалив существующий образ:
# rm -f altiso"$VER"/altinst
# mksquashfs squashfs-root"$VER"/ altiso"$VER"/altinst

# Собирать будем скриптом ./build.sh
}



function isorecord(){
# Проверяем, передан ли второй аргумент с путем до образа
if [ -z "$2" ]; then
    echo "Ошибка: Не указан путь до образа"
    exit 1
fi

# Проверяем, найден ли образ ISO по указанному пути
if [ ! -f "$2" ]; then
    echo "Образ не найден: $2"
    exit 1
fi

# Получаем список флешек
flash_drives=$(lsblk -d -o NAME,SIZE | grep -E "^sd[b-z]" | awk '{print $1 " - " $2}')

# Подсчитываем количество флешек
num_drives=$(echo "$flash_drives" | wc -l)

# Проверяем, подключена ли хотя бы одна флешка
if [ $num_drives -eq 0 ]; then
    echo "Флешка не обнаружена."
    exit 1
fi

# Печатаем список флешек
echo "Выберите флешку для записи образа:"
i=1
while IFS= read -r line; do
    echo "$i) $line"
    ((i++))
done <<< "$flash_drives"

# Запрашиваем у пользователя номер флешки
read -p "Введите номер флешки (ВНИМАНИЕ БУДЕТ ОТФОРМАТИРОВАНА/ПЕРЕЗАПИСАНА!!!) [1-$num_drives]: " flash_drive_num

# Проверяем, что номер находится в допустимом диапазоне
if ! [[ $flash_drive_num =~ ^[1-9][0-9]*$ ]] || (( flash_drive_num < 1 || flash_drive_num > num_drives )); then
    echo "Ошибка: Неверный номер флешки."
    exit 1
fi

# Получаем выбранную флешку
flash_drive=$(echo "$flash_drives" | sed -n "${flash_drive_num}p" | awk '{print $1}')

# Проверяем, выбрана ли флешка
if [ -z "$flash_drive" ]; then
    echo "Ошибка: Неверный номер флешки."
    exit 1
fi

# Отформатируем выбранную флешку
# Внимание! Не добавляйте номер раздела, образ пишется на флэшку с самого начала!
#echo "Отформатируем флешку /dev/$flash_drive..."
# Перед записью стоит убедиться, что флешка не используется, размонтирована.
# Куда примонтирована флешка просмотр
#put=$(mount | grep /dev/$flash_drive| awk '{print $1}')
#umount -l $put 2>/dev/null
#umount -l /dev/$flash_drive 2>/dev/null
# Посик процессов блокирующее флешку
#lsof | grep /dev/$flash_drive
#fuser -v /dev/$flash_drive
# Удалить с флешки таблицу(ы) разделов
#wipefs -a /dev/$flash_drive
# Форматировать
#mkfs.vfat -F 32 /dev/$flash_drive
#mkfs.fat -F 32 -v -I /dev/$flash_drive

# Записываем образ на выбранную флешку
echo "Сформированая команда записи: dd oflag=direct if=\"$2\" of=/dev/$flash_drive bs=4M status=progress && sync"
echo "Запись образа на /dev/$flash_drive..." "Внимание! Не извлекайте флешку, пока образ не запишется до конца!"
dd oflag=direct if="$2" of=/dev/$flash_drive bs=4M status=progress && sync
# pv "$2" | dd oflag=dsync of=/dev/$flash_drive bs=4M;sync


# Проверка целостности записанного образа
# Запрашиваем проверить контрольную сумму
read -p "Хотите проверить контрольную сумму записанного образа (продолжительное время)? (y/n): " response
if [[ "$response" == "y" || "$response" == "Y" ]]; then
# Получаем контрольную сумму исходного образа
original_checksum=$(md5sum "$2" | awk '{print $1}')

# Определяем длину образа в байтах
echo "Проверка контрольной суммы записаного образа"
checksum=$(du -b "$2" | cut -f1)
 if [ "$checksum" -gt 0 ]; then
        # Подсчёт контрольной суммы записанного образа
        #head -c "$checksum" /dev/$flash_drive | md5sum
        written_checksum=$(head -c "$checksum" /dev/$flash_drive | md5sum | awk '{print $1}')
        # Сравниваем контрольные суммы
        if [ "$original_checksum" == "$written_checksum" ]; then
         echo "Контрольные суммы совпадают. Запись прошла успешно."
        else
         echo "Контрольные суммы не совпадают! Возможна ошибка при записи."
        fi
 else
   echo "Ошибка: Не удалось получить размер образа."
 fi
fi

echo "Можно извлечь USB-Накопитель и достать"

# https://www.altlinux.org/Запись_образов_на_DVD_и_USB_Flash
}


function isobuild(){
START=$(date +%s)

# Перейдем в папку с образом
cd "$DIRISO"

# Программа установки будет смотреть в следующих местах
# Каталог "$DIRISO"/altiso"$VER"/Metadata/ или "$DIRISO"/squashfs-root"$VER"/usr/share/install2/metadata/
# Содержимое каталога metadata
# autoinstall.scm — сценарий установки на языке schem
# vm-profile.scm — схема разбивки жёсткого диска на языке Scheme
# pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов
# install-scripts.tar — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты. Скрипты нужно помещать внутрь архива в эти подкаталоги. Скрипты должны быть исполняемыми
# У нас скрипт "$DIRISO"/squashfs-root"$VER"/usr/share/install2/postinstall.d/97-ku.sh при установке системы
#              "$DIRISO"/squashfs-root"$VER"/usr/tmp/kuinstall/firsttime.d/firsttime.sh - Выполняется при первом включении ОС
# Изменение образа внутри "$DIRISO"/squashfs-root"$VER"/var/tmp/kuinstall

# Добавить свои пакеты в состав пакетов в подкаталоге ALTLinux/RPMS.main в ""$DIRISO"/altiso"$VER"/ALTLinux/RPMS.main"
# После этого запустите:
genbasedir --topdir="$DIRISO"/altiso"$VER" ALTLinux main
# Обновится содержимое каталога "$DIRISO"/altiso"$VER"/ALTLinux/base/

# Архив с дополнительными группами пакетов
if [ -d "$DIRISO"/altiso"$VER"/Metadata/pkg-groups ]; then
# Удалить старый архив pkg-groups.tar
rm -f "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar
# Пакуем pkg-groups со списками установки пакетов
tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups -cf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar groups lists profiles
# Если архив создался удалим папку
if [ -f "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar ]; then rm -rf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups ; fi
# Права на архив
chmod 0774 "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar
fi
# Права на пакеты
chmod 700 -R "$DIRISO"/altiso"$VER"/ALTLinux/RPMS.main

# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
if [ -d "$DIRISO"/altiso"$VER"/Metadata/install-scripts ]; then
# Удалить старый архив install-scripts.tar
rm -f "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar
# Сделать скрипты исполнемыми
chmod +x "$DIRISO/altiso$VER/Metadata/install-scripts"/preinstall.d/*
chmod +x "$DIRISO/altiso$VER/Metadata/install-scripts"/postinstall.d/*
# Пакуем содержимое install-script
tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts -cf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar preinstall.d postinstall.d
# Если архив создался удалим папку
if [ -f "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar ]; then rm -rf "$DIRISO"/altiso"$VER"/Metadata/install-scripts ; fi
# Права на архив
chmod 0774 "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar
fi

# Везде укажем владельца и группу root так как случайно созданая пака от user1 установка не стартует
chown -R root:root "$DIRISO"/squashfs-root"$VER"


# Удаляем старый altins
rm -f "$DIRISO"/altiso"$VER"/altinst

# формируем altinst
mksquashfs "$DIRISO"/squashfs-root"$VER" "$DIRISO"/altiso"$VER"/altinst -b 1024k -comp gzip -Xcompression-level 1
# Удалить распаковку altinst если файл сформировался
#if [ -f "$DIRISO"/altiso"$VER"/altinst ]; then
#rm -rf "$DIRISO"/squashfs-root"$VER"
#fi

# Отмонтируем загрузчик UEFI
umount "$DIRISO"/EDITUEFI
# Проверим
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo
    echo "Команда размонтирования: umount "$DIRISO"/EDITUEFI"
    echo "Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI"
else
    echo "UEFI для редактирования РАЗМОНТИРОВАНО"
    echo
    echo "Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI"
    echo "Команда размонтирования: umount "$DIRISO"/EDITUEFI"
    #rm -rf "$DIRISO"/EDITUEFI
fi


# подключаем общий ресурс для сохранения образа и сохраняем образ
# mount -t vboxsf -o uid=500,gid=500 ALT /mnt/work/alt

function isomkisofs(){
command='mkisofs \
-input-charset iso8859-1 \ # Кодировка для входных файлов
-o "${currentpath}"/OUTISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
-b syslinux/isolinux.bin \ # Загрузочный образ первичный загрузчик
-c syslinux/boot.cat \ # Файл каталога загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузки
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Включает в образ таблицу информации о загрузке
-J \ # Поддержка Joliet для Windows
-R \ # Поддержка Rock Ridge для UNIX
-V "ALT 8 SP WORKSTATION" \ # Метка тома
"$DIRISO"/altiso"$VER"/ # путь к директории, которую нужно включить в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

# Значения параметров volid и appid полученные на этапе анализа исходного образа
volid=$(cat "$DIRISO"/infoiso.txt "$DIRISO"/xorriso.txt|grep -i ^"Volume id" | sed "s/Volume id.*://I; s/[\']//g; s/^[ \t]*//; s/[ \t]*$//"| awk 'NF {print; exit}')
appid=$(cat "$DIRISO"/infoiso.txt "$DIRISO"/xorriso.txt|grep -i ^"Application id\|App Id" | sed "s/Application id.*://I;s/App Id.*://I;s/[\']//g; s/^[ \t]*//; s/[ \t]*$//"| awk 'NF {print; exit}')

function testiso(){
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet для Windows
-r \ # -rational-rock: Генерировать рационализированную информацию о каталоге Rock Ridge для UNIX
-R \ # -rock Генерировать информацию о каталоге Rock Ridge
-sysid "LINUX" \ # Устанавливает идентификатор системы
-volid "ALT8SP" \ # Метка тома
-eltorito-boot syslinux/isolinux.bin \ # Загрузочный образ первичный загрузчик
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Включает в образ таблицу информации о загрузке
-input-charset iso8859-1 \ # Кодировка для входных файлов
-o "${currentpath}"/OUTISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/ # Путь к директории, которую нужно включить в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}


function isoxorrisor(){
command='xorriso \
-as mkisofs -v \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT8SP64" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
 #-c isolinux/boot.cat \ # коротский -с
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
 #-b isolinux/isolinux.bin
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
 #--grub2-boot-info \ # Файл MBR для Grub2
 #--protective-msdos-label \ # Защитная метка MSDOS для GPT
 #--grub2-mbr syslinux/isohdpfx.bin \ # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
 #-e EFI/.efiboot.img \ # EFI-образ, но с другим синтаксисом
 #-efi-boot-part EFI/.efiboot.img \ # Это часть EFI-загрузки
 #-e boot/grub/efi.img
--efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
 #-o ../custom-ubuntu.iso .
-output "${currentpath}"/OUTISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/  # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}





function isoxorriso(){
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALTSP8" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
 #-c isolinux/boot.cat
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
 #-b isolinux/isolinux.bin
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
 #--grub2-boot-info # Файл MBR для Grub2
 #--protective-msdos-label # Защитная метка MSDOS для GPT
 #--grub2-mbr syslinux/isohdpfx.bin # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
 #-e EFI/.efiboot.img # EFI-образ, но с другим синтаксисом
 #-efi-boot-part EFI/.efiboot.img # Это часть EFI-загрузки
 #-e boot/grub/efi.img
--efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
 #-o ../custom-ubuntu.iso .
-output "${currentpath}"/OUTISO/alt"$VER"-x64-auto-`date +"%d-%m-%Y-%H-%M-%S"`.iso \ # Имя выходного ISO-файла
"$DIRISO"/altiso"$VER"/  # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

function isoxorrisot(){
# Пример ALT Workstation 9.0
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-partition_cyl_align "off" \ # Выравнивание по цилиндрам отключено
-partition_offset 16 \ # Cмещение для раздела
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT Workstation 9.0 x86_64" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "ALT WORKSTATION 9.0 X86_64 2019-10-22" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot syslinux/isolinux.bin \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
-eltorito-catalog syslinux/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
-efi-boot EFI/.efiboot.img \ # Файл загрузки для EFI
-no-emul-boot \ # Образ не должен эмулировать загрузку
-isohybrid-gpt-basdat \ # Образ должен поддерживать GPT
-output ../alt-custom.iso \ # Имя выходного ISO-файла
. # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}

function isoxorrisos(){
# Пример ALT Workstation 10
command='xorriso \
-as mkisofs \ # xorriso должен работать как mkisofs
-joliet \ # Поддержка Joliet
-iso-level 3 \ # Уровень ISO поддержка длинных имен файлов
-full-iso9660-filenames \ # Полные имена файлов ISO 9660
-sysid "LINUX" \ # Идентификатор системы
-volid "ALT Workstation 10" \ # Метка тома
-volset "ALT" \ # Имя набора томов
-publisher "BASEALT LTD" \ # Издатель
-appid "ALT WORKSTATION" \ # Идентификатор приложения
-copyright "LICENSE_ALL_HTML" \ # Информация о авторских правах
-eltorito-boot boot/grub/bios.img \ # Параметры для загрузки El Torito пример: syslinux/isolinux.bin  boot/grub/bios.img
--eltorito-catalog boot/grub/boot.cat \ # Файл каталога загрузки El Torito пример: syslinux/boot.cat  boot/grub/boot.cat
-no-emul-boot \ # Образ не должен эмулировать загрузку
-boot-load-size 4 \ # Размер загрузочного сектора
-boot-info-table \ # Таблица информации о загрузке
--grub2-boot-info # Файл MBR для Grub2
--protective-msdos-label # Защитная метка MSDOS для GPT
--grub2-mbr syslinux/isohdpfx.bin # --grub2-mbr вместо "syslinux/isohdpfx.bin" можно указать путь до исходного ISO образа
-isohybrid-mbr syslinux/isohdpfx.bin \ # Файл MBR для гибридного образа
-eltorito-alt-boot \ # Альтернативный загрузочный образ
-e EFI/.efiboot.img # EFI-образ, но с другим синтаксисом
-efi-boot-part EFI/.efiboot.img # Это часть EFI-загрузки
-no-emul-boot \ # Образ не должен эмулировать загрузку
-output ../my-alt-custom.iso \ # Имя выходного ISO-файла
. # Путь к директории для включения в ISO'

# Удаляем комментарии для выполнения команды
commanda=$(echo "$command" | sed 's/\\$//g;s/\\ #.*//g;s/ #.*//g'| tr -d '\r\n')
echo "Команда создания ISO:" $commanda
# Выполним
eval "$commanda"
}


# Выбираем через что будем формировать iso образ
#isomkisofs
#testiso
isoxorrisor
#isoxorriso
#isoxorrisot
#isoxorrisos

END=$(date +%s)
DIFF=$(( $END - $START )) 
printf '%dh:%dm:%ds\n' $(($DIFF/3600)) $(($DIFF%3600/60)) $(($DIFF%60))

# Дать права на образы ISO
chmod 777 -R "${currentpath}"/OUTISO/

# Получим самый свежий образ имя
isonew=$(ls -lt "${currentpath}"/OUTISO | sed '1d' | head -n 1 | awk '{print $9}')
echo "Образ Готов:" "${currentpath}"/OUTISO/"$isonew"

# Удалить распаковку если образ собрался
#if [ -f "${currentpath}"/OUTISO/alt"$VER"-x64-auto-$(date +"%d-%m-%Y-%H-%M-%S").iso ]; then
#rm -rf "$DIRISO"/altiso"$VER"
#rm -rf "$DIRISO"/syslinux
#rm -f "$DIRISO"/infoiso.txt
#rm -f "$DIRISO"/xorriso.txt
#rm -rf "$DIRISO"
#fi

read -p "Записать Образ на USB-флеш накопитель? (y/n): " respon
if [[ "$respon" == "y" || "$respon" == "Y" ]]; then
# Запуск блока записи Образа
echo "Если запись не началась, запустить командой:"
echo "./modaltlinux.sh 4 \"${currentpath}/OUTISO/$isonew\""
isorecord "4" "${currentpath}/OUTISO/$isonew"
else
echo "Для запись вручную, запустить команду:"
echo "./modaltlinux.sh 4 \"${currentpath}/OUTISO/$isonew\""
fi
}



function isoextract(){
# Повторная распаковка без извлечения образа ISO

# Перейдем в папку
cd "$DIRISO"

# Распакуем образ altinst
#unsquashfs altiso"$VER"/altinst
# Удалить предыдущее если есть с запросом
#rm -ri "$DIRISO"/squashfs-root"$VER"
# Переименуем
#mv squashfs-root squashfs-root"$VER"

# Извлекем список пакетов для изменения если это будет необходимо
# groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/pkg-groups
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/pkg-groups.tar -C "$DIRISO"/altiso"$VER"/Metadata/pkg-groups

# Архив install-scripts.tar; preinstall.d - сразу после установки OC (перед установкой дополнительного набора ПО); postinstall.d -после последнего шага инсталлятора.
# Удалить если есть старый каталог с запросом
rm -ri "$DIRISO"/altiso"$VER"/Metadata/install-scripts
# Создать директорию
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/preinstall.d
mkdir -p "$DIRISO"/altiso"$VER"/Metadata/install-scripts/postinstall.d
# Извлечение
tar xf "$DIRISO"/altiso"$VER"/Metadata/install-scripts.tar -C "$DIRISO"/altiso"$VER"/Metadata/install-scripts

# Распаковка загрузчика UEFI .efiboot.img
mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI
# Проверка что смонтировалось
if mount | grep -q "$DIRISO/EDITUEFI"; then
    echo "UEFI СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
else
    echo "UEFI НЕ СМОНТИРОВАНО для редактирования"
    echo 'Команда монтирования: mount -o rw ""$DIRISO"/altiso"$VER"/EFI/.efiboot.img" "$DIRISO"/EDITUEFI'
fi
}

function isorpms(){
echo "Запуск скрипта проверки зависимосей RPM"
bash "${currentpath}"/check_rpm.sh "$2"
}

function isohelp(){
# Помощь Справка
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
WHITE='\033[1;37m'
NC='\033[0m' # Без цвета
echo -e "${CYAN}Справка/Помощь по использованию скрипта modaltlinux.sh${NC}"
echo ""
echo -e "${GREEN}Распакавать образ командой:${NC} ./modaltlinux.sh unpak "${YELLOW}/путь до образа/altliux.iso${NC}" Или командой ./modaltlinux.sh 1 "${YELLOW}/путь до образа/altliux.iso${NC}""
echo ""
echo -e "${GREEN}Собрать образ командой:${NC} ./modaltlinux.sh build Или командой ./modaltlinux.sh 2"
echo ""
echo -e "${GREEN}Повторно распаковать командой:${NC} ./modaltlinux.sh extract Или командой ./modaltlinux.sh 3"
echo ""
echo -e "${GREEN}Записать образ командой:${NC} ./modaltlinux.sh record "${YELLOW}/путь до записываемого образа/altliux.iso${NC}" Или командой ./modaltlinux.sh 4 "${YELLOW}/путь до записываемого образа/altliux.iso${NC}""
echo ""
echo -e "${GREEN}Запустить проверку RPM всех пакетов:${NC} ./modaltlinux.sh rpms Или командой ./modaltlinux.sh 5"
echo -e "${GREEN}указать конкретные пакеты:${NC} ./modaltlinux.sh 5 "${YELLOW}"'vlc-3.0.11-alt1.x86_64.rpm;zabbix-agent-4.4.4-alt0.p9.1.x86_64.rpm'"${NC}""
echo ""
echo -e "${GREEN}Вызвать справку командой:${NC} ./modaltlinux.sh help Или командой ./modaltlinux.sh 0"
echo ""
echo ""
echo -e "${CYAN}Путь распаковки образа:${NC} cd "${YELLOW}$DIRISO${NC}""
echo ""
echo -e "${CYAN}Путь до сформированыз образов ISO:${NC} cd "${YELLOW}${currentpath}/OUTISO/${NC}""
echo ""
echo -e "${GREEN}UEFI СМОНТИРОВАТЬ для редактирования${NC}"
echo -e "${GREEN}Команда монтирования:${NC} mount -o rw "${YELLOW}$DIRISO/altiso$VER/EFI/.efiboot.img${NC}" "${YELLOW}$DIRISO/EDITUEFI${NC}""
echo -e "${GREEN}Перейти в каталог:${NC} cd "${YELLOW}$DIRISO/EDITUEFI/EFI${NC}""
echo -e "${GREEN}Редактировать конфигурацию:${NC} mcedit "${YELLOW}$DIRISO/EDITUEFI/EFI/BOOT/refind.conf${NC}""
echo ""
echo -e "${GREEN}Команда размонтирования UEFI:${NC} umount "${YELLOW}$DIRISO/EDITUEFI${NC}""
echo ""
echo ""
echo -e "${GREEN}Редактировать загрузчик: bios/legacy:${NC} mcedit "${YELLOW}$DIRISO/altiso$VER/syslinux/isolinux.cfg${NC}""
echo ""
echo -e "${GREEN}Редактировать параметры автоустановки:${NC} mcedit "${YELLOW}$DIRISO/altiso$VER/Metadata/autoinstall.scm${NC}""
echo ""
echo -e "${GREEN}Редактировать автоматическое РАЗБИТИЕ ДИСКА:${NC} mcedit "${YELLOW}$DIRISO/altiso$VER/Metadata/vm-profile.scm${NC}""
echo ""
echo -e "${GREEN}Команда для ручной распаковки пакетов RPM установки:${NC}"
echo -e "${YELLOW}tar xf "${DIRISO}/altiso$VER/Metadata/pkg-groups.tar" -C "${DIRISO}/altiso$VER/Metadata/pkg-groups"${NC}"
echo ""
echo -e "${GREEN}Сами пакеты:${NC} "${YELLOW}$DIRISO/altiso$VER/ALTLinux${NC}""
echo ""
echo -e "${CYAN}Пример редактирования Групп на установку списков RPM пакетов:${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/pkg-groups/groups/sp/office.directory\"${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/pkg-groups/groups/sp/kuinst.directory\"${NC}"
echo ""
echo -e "${CYAN}Пример редактирования списков RPM пакетов на установку:${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/pkg-groups/lists/sp/office\"${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/pkg-groups/lists/sp/kuinst\"${NC}"
echo -e "${CYAN}Базовый список который ставится в любом случае:${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/pkg-groups/lists/.base\"${NC}"
echo ""
echo -e "${CYAN}Пакуем pkg-groups со списками установки пакетов RPM:${NC}"
echo -e "${YELLOW}tar -C \"$DIRISO/altiso$VER/Metadata/pkg-groups\" -cf \"$DIRISO/altiso$VER/Metadata/pkg-groups.tar\" groups lists profiles${NC}"
echo ""
echo ""
echo -e "${CYAN}Внутренний репозиторий RPM в altinst:${NC}"
echo -e "${YELLOW}\"$DIRISO/squashfs-root$VER/var/tmp/kuinstall/repoc/x86-64/RPMS.classic\"${NC}"
echo ""
echo ""
echo -e "${CYAN}Распаковка Скриптов install-scripts от Версии 10.1:${NC}"
echo -e "${YELLOW}tar xf \"$DIRISO/altiso$VER/Metadata/install-scripts.tar\" -C \"$DIRISO/altiso$VER/Metadata/install-scripts\"${NC}"
echo -e "${CYAN}альтернативный вариант нахождения install-scripts.tar defalut:${NC}"
echo -e "${YELLOW}\"$DIRISO/squashfs-root$VER/usr/share/install2/metadata/install-scripts.tar\"${NC}"
echo -e "${CYAN}Скрипты из архива заменяют одноимённые скрипты инсталлятора которые находятся в одноименных директориях /usr/share/install2/. Получение происходит на стадии запуска initinstall.d.${NC}"
echo -e "${CYAN}preinstall.d выполняются сразу после установки базовой системы:${NC}"
echo -e "${YELLOW}\"$DIRISO/altiso$VER/Metadata/install-scripts/preinstall.d\"${NC}"
echo -e "${CYAN}postinstall.d выполняются сразу после последнего шага инсталлятора:${NC}"
echo -e "${YELLOW}\"$DIRISO/altiso$VER/Metadata/install-scripts/postinstall.d\"${NC}"
echo -e "${CYAN}Упаковка install-scripts Скриптов:${NC}"
echo -e "${YELLOW}tar -C \"$DIRISO/altiso$VER/Metadata/install-scripts\" -cf \"$DIRISO/altiso$VER/Metadata/install-scripts.tar\" preinstall.d postinstall.d${NC}"
echo ""
echo -e "${CYAN}Альтернативный вариант Скриптов работает так же для версий ОС ниже 10.1:${NC}"
echo -e "${YELLOW}cd \"$DIRISO/squashfs-root$VER/usr/share/install2\"${NC}"
echo ""
echo -e "${CYAN}/alterator-menu${NC}"
echo ""
echo -e "${CYAN}/initinstall.d/* (alterator-vm разбивка, alterator-pkg подготовку среды инсталлятора /etc/apt/sources.list RPM::RootDir \"/mnt/destination\";)${NC}"
echo -e "${CYAN}выполняются перед стартом инсталлятора. В этот момент, как правило, производится вся подготовительная работа ${NC}"
echo -e "${CYAN}(генерация конфигурационного файла xorg.conf, необходимые исправления в evms.conf и apt.conf[1])${NC}"
echo ""
echo -e "${CYAN}/prepkg.d/* alterator-pkg (установка пакетной базы)${NC}"
echo -e "${CYAN}выполняются после инициализации чрута для новой системы (\$destdir), но перед собственно установкой пакетов (alterator-pkg);${NC}"
echo -e "${CYAN}здесь можно, например, повлиять на умолчания в "галочках" выбора групп пакетов.${NC}"
echo ""
echo -e "${CYAN}alterator-preinstall (перемонтирование ФС, запуск нижеуказанных наборов preinstall-скриптов)${NC}"
echo ""
echo -e "${CYAN}/preinstall.d/*  сразу после установки базовой системы, настройки, выполняемые из устанавливаемой системы (обычно начиная с установки загрузчика)${NC}"
echo -e "${CYAN}дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора.${NC}"
echo ""
echo -e "${CYAN}/metadata - используется если нет в корне Metadata${NC}"
echo ""
echo -e "${CYAN}/postinstall.d/ - Выполняется во время установки системы, сразу после последнего шага инсталлятора (run_chroot apt-get install установка от chroot)${NC}"
echo -e "${CYAN}скрипты, удаляющие служебные пакеты инсталлятора из базовой системы и прочий «окончательный тюнинг» установленных пакетов специфические настройки «из коробки», то это самое лучшее место для этого.${NC}"
echo ""
echo -e "${CYAN}/slideshow${NC}"
echo -e "${CYAN}/steps${NC}"
echo -e "${CYAN}/steps.d${NC}"
echo -e "${CYAN}/firsttime.d - Выполняется при первом включении ОС${NC}"
echo -e "${CYAN}/etc/firsttime.d/ выполнялся до первого запуска X-ов ghb sysvinit${NC}"
echo -e "${CYAN}installer-feature-* распространённые коллекции скриптов оформлены как пакеты${NC}"
echo -e "${CYAN}installer-steps${NC}"
echo -e "${CYAN}services-off${NC}"
echo -e "${CYAN}systemd-disabled${NC}"
echo -e "${CYAN}systemd-enabled${NC}"
echo ""
echo -e "${CYAN}Схема запуска различных подсистем инсталлятора (процесс /sbin/install2):${NC}"
echo -e "${CYAN}1. предварительная подготовка и разбор командной строки.${NC}"
echo -e "${CYAN}2. запуск /sbin/initinstall -- initinstall.d скрипты.${NC}"
echo -e "${CYAN}3. запуск alterator; в ходе работы alterator сразу по окончанию установки базовой системы происходит запуск preinstall.d скриптов.${NC}"
echo -e "${CYAN}4. запуск /sbin/postinstall -- postinstall.d скрипты.${NC}"
echo -e "${CYAN}5. отмонтирование всех файловых систем, завершение работы.${NC}"
echo ""
echo -e "${CYAN}Cреда инсталлятора — это сильно урезанная система Linux.${NC}"
echo -e "${CYAN}/image — образ дистрибутива Используется прежде всего как источник пакетов, репозиторий которых располагаются в /image/ALTLinux.${NC}"
echo -e "${CYAN}Список подлежащих установке пакетов определяется в /image/Metadata/pkg-groups.tar. Установка пакетов производится модулем alterator-pkg.${NC}"
echo -e "${CYAN}alterator-pkg Модуль предназначен для выбора групп пакетов и установки пакетов из выбранных групп /var/lib/install3/${NC}"
echo -e "${CYAN}/mnt/destination — устанавливаемая система${NC}"
echo -e "${CYAN}Вся файловая система за исключением каталогов /var и /etc находится в режиме \"только чтение\".${NC}"
echo ""
echo ""
echo -e "${CYAN}Так же выполнить команды и скрипты можно через autoinstall.scm${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/altiso$VER/Metadata/autoinstall.scm\"${NC}"
echo -e "${CYAN}У шага /postinstall есть два уровня запуска:${NC}"
echo -e "${CYAN}laststate – скрипт запускается при завершении альтератора (перед перезагрузкой после установки);${NC}"
echo -e "${CYAN}firsttime – скрипт запускается во время первого запуска ОС.${NC}"
echo -e "${CYAN}И два метода указания скрипта запуска:${NC}"
echo -e "${CYAN}script – скрипт скачивается с сервера и выполняется;${NC}"
echo -e "${CYAN}run – выполняется заданная команда или набор команд (возможно указание перенаправления).${NC}"
echo ""
echo ""
echo -e "${CYAN}Наши Скрипты${NC}"
echo -e "${CYAN}Выполняется в завершении установки системы${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/squashfs-root$VER/usr/share/install2/postinstall.d/97-ku.sh\"${NC}"
echo -e "${CYAN}Выполняется при первом включении ОС (скопируется в /etc/firsttime.d/)${NC}"
echo -e "${YELLOW}mcedit \"$DIRISO/squashfs-root$VER/var/tmp/kuinstall/firsttime.d/firsttime.sh\"${NC}"
echo ""
echo ""
echo -e "${CYAN}Вне наши изменения хранятся тут:${NC}"
echo -e "${YELLOW}cd \"$DIRISO/squashfs-root$VER/var/tmp/kuinstall/\"${NC}"
echo ''
echo -e "${CYAN}Логи после установки ОС${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/alteratord.log${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/diskinfo${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/install2.log${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/pkg-install.log${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/remount.log${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/wizard.log${NC}"
echo -e "${YELLOW}mcedit /root/.install-log/x11.log${NC}"
echo -e "${YELLOW}mcedit /var/log/rpmpkgs${NC}"
}


# Определение переданого параметра какой блок запустить
case $1 in
1|unpak)
isounpack
;;
2|build)
isobuild
;;
3|extract)
isoextract
;;
4|record)
isorecord "$@"
;;
5|rpms)
isorpms "$@"
;;
0|help)
isohelp
;;
*)
isohelp
;;
esac

количество слов: 3495
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Проверка зависимостей пакетов .rpm

Да можно поставить образ на виртуалку, запустить установку нужных пакетов и скопировать вне не обходимые зависимости и обновления при выдаче запроса на установку, или забрать папку с кэшем пакетов, либо запустить команду просмотра установленных пакетов по времени rpm -qa --last и зная когда был установлен пакет посмотреть какие еще установились.

Например у нас есть папка с пакетами в образе (своем репозитории) мы что то добавляем и проверяем есть ли не обходимые зависимости внутри всей папки или конкретного пакета/пакетов через ; перечислив.

Я решил еще сделать скрипт проверки
Скрипт игнорирует зависимости: *rpmlib*, *rtld*, lib* , *so.*, /* так как их нельзя сравнить с пакетами.
Скрипт сперва проходить все пакеты в папке или папках записывая их точное имя, версию, релиз и архитектуру в файл в дальнейшем для сравнения зависимости.

Так же при запуске скрипт проверяет дубли пакетов на одинаковые имена из пакета
Все выводится в папку LOGRPM


Просто запуск скрипта проверит все пакеты в папке(ах) на зависимость

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

./check_rpm.sh
С указанием конкретного или конкретных пакетов проверит только их, без углубления зависимостей только указанные но не дальше

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

./check_rpm.sh "vlc-3.0.11-alt1.x86_64.rpm"

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

./check_rpm.sh "vlc-3.0.11-alt1.x86_64.rpm;drweb-workstations_11.1.4-2208301425linux_1661858905_x86_64.rpm"
Пример как получить зависимость, в папке с пакетами запускаем команду

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

rpm -qpR vlc-3.0.11-alt1.x86_64.rpm
Зависимости пакета vlc-3.0.11-alt1.x86_64.rpm
Показать
vlc-interface-qt = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-ass = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-bluray = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-dbus = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-dvdnav = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-dvdread = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-ffmpeg = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-freetype = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-globalhotkeys = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-live555 = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-matroska = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-mpeg2 = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-ogg = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-pulseaudio = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-taglib = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-v4l = 3.0.11-alt1:p9+254089.100.1.1
vlc-plugin-xml = 3.0.11-alt1:p9+254089.100.1.1
rpmlib(PayloadIsLzma)

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

rpm -qpR drweb-workstations_11.1.4-2208301425linux_1661858905_x86_64.rpm
Зависимости пакета drweb-workstations_11.1.4-2208301425linux_1661858905_x86_64.rp
Показать
drweb-antispam >= 11.1
drweb-cloudd >= 11.1
drweb-configure >= 11.1
drweb-documentation >= 11.1
drweb-esagent >= 11.1
drweb-firewall >= 11.1
drweb-gated >= 11.1
drweb-gui >= 11.1
drweb-libs >= 11.1
drweb-maild >= 11.1
drweb-meshd >= 11.1
drweb-netcheck >= 11.1
drweb-se >= 11.1
drweb-session >= 11.1
drweb-spider >= 11.1
drweb-spider-kmod >= 11.1
drweb-statd >= 11.1
drweb-vaderetro >= 11.1
drweb-workstations-doc >= 11.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

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

rpm -qpR zabbix-agent-4.4.4-alt0.p9.1.x86_64.rpm
Зависимости пакета zabbix-agent-4.4.4-alt0.p9.1.x86_64.rpm
Показать
zabbix-common >= 1:2.0.4-alt1
/bin/sh
/bin/sh
/etc/rc.d/init.d
/etc/rc.d/init.d(msg_reloading)
/etc/rc.d/init.d(msg_usage)
/etc/rc.d/init.d(start_daemon)
/etc/rc.d/init.d(status)
/etc/rc.d/init.d(stop_daemon)
/etc/rc.d/init.d/functions
/lib64/ld-linux-x86-64.so.2
coreutils
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libcrypto.so.1.1()(64bit) >= set:qlNHoybgleVAon4qWvbunW1AILZb8nMTDjZKxDFJx8EZEuy1podo8SrdeA7CEJk1qaiUOTaRaMHa2Hu1
rpmlib(SetVersions)
libcrypto.so.1.1(OPENSSL_1_1_0)(64bit)
libcurl.so.4()(64bit) >= set:khZKmuOOm6oNiR23
libdl.so.2(GLIBC_2.2.5)(64bit)
liblber-2.4.so.2()(64bit) >= set:lkzXA
libldap-2.4.so.2()(64bit) >= set:mieTNdz1kqIkT7IhF7OCIdL1dvqwFV3
libm.so.6(GLIBC_2.2.5)(64bit)
libpcre.so.3()(64bit) >= set:ifQes7VZdQOnJ1
libpthread.so.0(GLIBC_2.2.5)(64bit)
libresolv.so.2(GLIBC_2.2.5)(64bit)
libssl.so.1.1()(64bit) >= set:mgBO2HhgAIM9tFfrbBkpMgJZlGVu3MXjyfqu0nykdPapYrL9wU1UwVkoLT5hoCmsqTR4Ago7czl6tumxcZ2wXV1JfbiOe5X43
libssl.so.1.1(OPENSSL_1_1_0)(64bit)
libssl.so.1.1(OPENSSL_1_1_1)(64bit)
libz.so.1()(64bit) >= set:kiId1BQpJq1
libz.so.1(ZLIB_1.2.0)(64bit)
rtld(GNU_HASH)
/usr/sbin/post_service
sed
/usr/sbin/preun_service
rpmlib(PayloadIsLzma)

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

rpm -qpR  firefox-93.0-alt0.p9.1.x86_64.rpm
Зависимости пакета firefox-93.0-alt0.p9.1.x86_64.rpm
Показать
mozilla-common
gst-plugins-ugly1.0
/etc/alternatives/packages.d
/lib64/ld-linux-x86-64.so.2
/usr/lib64/browser-plugins
ld-linux-x86-64.so.2()(64bit) >= set:ihidc
rpmlib(SetVersions)
ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
libX11-xcb.so.1()(64bit) >= set:edp7
libX11.so.6()(64bit) >= set:ohEJELsBgnQKO0ExzMek1p4cVapgtMa9MQ7Vhg45p7qLEzyXR0Tk9A2OT28sfJNkDd0ABwC9BmVdoCgMlFJH3xZ8YrPTQsTLXCRckwwBpKbxwlPOjZgZ1LDsePqhToOHkipQPW6bnTwuAnJDmiaB0e1YZt1Gaf9h0cB4O2005CSYqIzCnaw4wtZHeEgzzh5dGFF1wAa9t3BO7f8ouCRi2V38e2AC43
libXcomposite.so.1()(64bit) >= set:hfyvaRnwk
libXcursor.so.1()(64bit)
libXdamage.so.1()(64bit) >= set:he8Nm2J37p7
libXext.so.6()(64bit) >= set:lhcWSCz1u8rueyBbKNVmy43Rnt1
libXfixes.so.3()(64bit) >= set:jgA6wHTUKT8dqrHbg
libXi.so.6()(64bit)
libXrender.so.1()(64bit) >= set:jeLBBL6Tk45rZLH1cHhNtsTHjVd1FcPaZxKsGXVHSYT5CZDZf5FhpZKAda0
libatk-1.0.so.0()(64bit) >= set:mhhTgvEZAqLjUZ6hqpBAAap5a4YNR7lcq6Vo1vxNO7SoOoowT0Y8CzuZ1usleBSvv88RpHiEde6Ks8C0
libc.so.6(GLIBC_2.10)(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.18)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.25)(64bit)
libc.so.6(GLIBC_2.27)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.2)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libc.so.6(GLIBC_2.9)(64bit)
libcairo-gobject.so.2()(64bit) >= set:ji5Gb
libcairo.so.2()(64bit) >= set:mgBeSCb87HukKiOm7O1GNiv8dm8PDpzIHsDca08u2BblXf9zyYRqLdiH8pUmLtmmB4GmXAzTY3spCz3fmwvsxG0YQ56YQHY0g5BczZqZmg1luR319yYjFgYqeW2C4RIbZbtZup
libdbus-1.so.3()(64bit) >= set:ngUpt4CCqtDVnEAhAZGE71vSjnoGAGebLEiv4SbPEYzCUGQIZjHlbnJEzAxeIqmqQi3datNG10kY0tdEh34LwydU7FyzxGnZwwdf4zIZdW1fGZlE8YPcil2mfrgNfqQEF9HrfVA2eDT6Vw1ztou2qHXDNVSOQvINY2292ZA4ZEivseIxAA0QZgCdRtkvkyVsSI0mbrJBZeeKiuYCqCo1e5JZkD
libdbus-1.so.3(LIBDBUS_1_3)(64bit)
libdbus-glib-1.so.2()(64bit) >= set:kgygdw5h7JzwdqBlkL7rko2BJl91SuySzmBc350
libdl.so.2(GLIBC_2.2.5)(64bit)
libevent_core-2.1.so.6()(64bit) >= set:mi1bqHf43z8IMgCALF3h8VIkQVDgX2qS80
libffi.so.6()(64bit) >= set:jee4ZuRAxZbZmMB80O8l6vZBMjbjk8GmbRQZgiFFhhId
libfontconfig.so.1()(64bit) >= set:lfTbap6I0KWRvzv9B6Ug4AOeQBmaTH4eqNhcBuMmpZv4rXxlrLcpQ2QeuRJNtX00zuLUBJOQ7712lSLURCZ7I9Bw8zv1Wpgax5WpoG6Qu0
libfreetype.so.6()(64bit) >= set:lfbRsMHjZ8fTAZBSJFd8ALRTGwd8hLJf0oEvmCcAwXJaJuq0VZeT88Q5vfL24tyFoGIZgqIDZLa1zMiA1S
libgcc_s.so.1(GCC_3.0)(64bit)
libgcc_s.so.1(GCC_3.3)(64bit)
libgcc_s.so.1(GCC_4.0.0)(64bit)
libgcc_s.so.1(GCC_4.2.0)(64bit)
libgdk-3.so.0()(64bit) >= set:nf8PwA630VTRhMdY3UJZJlF350LsA78Y0H6d1asDq3Y1yzTKX89mRT07sCqlZ0q8ZpZeNMkObNHEFjeQAbya5qZAunWM8bICS32RWPLKR43D1sdmncd7q2Pe5xtKxHTnZl0Od435M9D6p9E0f9fFS7SgoFtximIsulz2lgQAbVkSG0NetWRjqmCZynkkbqIZc716Zkw2geBFkFXxHZuZ7e3gr6DZ7Ko1EY34DTVWF3nVMEbDQxZJZn5OVysyqEZt1CyRaIZrw7Av2FJamrhYkZvrIFrkZwN7QkAPvwtA5amUoUm13ycEQhnkPQswCiZ8DBgY74IUe8QNjSql3kE2jIZF1
libgdk_pixbuf-2.0.so.0()(64bit) >= set:lgnLZlVCS16t3jD6kNOWSYPWoC0jFaIF01CiqLB0NNj3KxDHGO0
libgio-2.0.so.0()(64bit) >= set:ohDURQYEz0W5WVW3Tjg5KZ8d71ZBOokF4pxES8Z9HZjUUZCs9bhS1t4oUKTn9T7zhD5KV7E27VCRimXMgU4nzeReHoHV5mgNpc3UiwobCivR1c9zgapfzrsLgafCEr3XpxrHpUcQc3bdvJ2ZiabiLQKWdO9YbLm3FsaI3A9hZtvdt28iZ4Cn23yVxaLZ0emS3NXZgS03jH04St8kmR8ubiSJf
libglib-2.0.so.0()(64bit) >= set:ogpEaGHtU2jJ1M8b3qFWcee9FRhErAQm7ETFiAuYAgcRFP9chCfZ9jtz6BKQxR0OH40ds2yM7MKuY9xsJh5dUJArV6xv5rqUh1KGrAp00m3KhifA8DDPkxXnmV3ZyWEmVZ0EGByiD0fRt23qURCjBnfBBMw0vee2BZe4DwEfWAKFHB99TIsiD9Lp1n7OC0jDWaIwU1NRk3FEQSgvSWzxL7iSFmg104octM6bYYYDeNYjvYSw3Mw2w18XqSnxOeAcmUxC6zFKRnG10aZ2TNi0m4LXRKYYghDz3i68zNcyMhXci7pGhxF0fwvbHzIuZ2U5boQyeAY25AD3REKK86HB9DW7Pcq2SzlzZgIm6G20
libgobject-2.0.so.0()(64bit) >= set:mgX88yz1usDW3xZIrkD3XdTLPQ7Sgm82onvFJ2FoA2jfVoOzk3I87Zy6sxP7sVR4Y09KXcjC6LFYgxDYkXaZaWdQHhit5HhB4v8gNQDZ5RFhWh7R4s5ZjZ5tJ1sZ2VKUZ50AiIRDOmqx1a96
libgraphite2.so.3()(64bit) >= set:kf32n5isX7lQKeZ6muRgDDHnTEsbZwNkwKg5DOMUQ4c3VqwNdCyuon9TsN
libgtk-3.so.0()(64bit) >= set:qhjBFRzhmUuOkJzwl8SboK6eDZ30LVCrUfyoP1GsJZIKjesrorUZqXKh11IUamZw73rKzUxF8z0km54XEqVD3gZjZLSpPYo5ZhbZazZpZtQXVZEfW1lHYZ52H31Oc8E7kKyB51nvp0rw12Cqii4lgN7supkbdzusrYMkA2MMbUu7QmThbNnhgqG3EjO5Z8LUqYvHbEbj2ZxiFKy5XawyRSZ9pRhTb734h8DZ1QQjFSy3M8RapnbAlmszsDK9Q4oJIYThYJGT2lYzhovSN2aeVIFJ6uqaZ5JT8hybBofG0mEm7JTdmuohHNZjWQ5JzjL2zKeLMaeO2VSMTIWswCLQCKLBUlatIMgkjksqBHPBhpSxw9GCvZfWgZDs8Y7RECD18ZFZGLSR0yKZfO6ZxhR3g7HC3poTeevAYLq6HyyJvI3Iwxaj9uSwuGZGrQoeIJL2sJKI0KrWJXJr4tVI8zbTJlOvswLlpVZiGcqp2jL7PJTIcvZlnrq8LH0mmEINx2eO9KgmW4BREfNBp2X8t6VCLn2Fcm5ZpDVJcAnNizvSCv258qpakR8mW9NuZK9wB8VJDn8Qnb8bht0Vue8Y6HZGhHBX4rytHktCtIiGLBp5Gais0YSNBULOMx7wTW2cBNqiHg7CRSuZ0bH2sp2JmvGJZrUbZvN3Op8EbOjAgw8acssfnBMshcTBXcUYbCnZo4NLzLsF7risGAW4JzyYvHbJsNwVT1ngtgCgKJtbg5y9qdIpLIx7a8ZGJKZ0H7izflqHPa5VkhgZa2XNNay05r8x1ZCAEZFBjxSk8cZFxuXn3rp2rOwMFd8mZ5LkDCAxNWMqSYk9JOOn713exjCfh6PgCfMTu6td3JuKRcn8L7JziSupGqZ1vY0LLfHWUulELJ7Sf3sG2D9ZvZnMZgIHevng7bedVFA2hg1XcRpHdvdnxeDBPIz6XNejPOGTNeWsjRZnwJd6oxxCqYUBwjt5t0VJzlnL631XYa9NpiY75B11zzZ9bMdFzKyDwaajXSjJQenWMhiZfweUq6EqkTLda0gVcSYO2Gybg8cylFr9ujIZ1HxOHf9avoKrAKv9ctOWGj3NsJyTJz97ryuAnyttgzqZh9VtGIpCr0MfV4S49G9eyL2zZkRpY4CPl5jHA6Z8mwvZcLrkWwDXwtwt
libharfbuzz.so.0()(64bit)
libm.so.6(GLIBC_2.15)(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.27)(64bit)
libpango-1.0.so.0()(64bit) >= set:miFIBpHOvBSrjhCzRKkcPrPZnSCQCZC5mQoGF85
libpangocairo-1.0.so.0()(64bit)
libproxy.so.1()(64bit) >= set:lj9NyrBLNdc
libpthread.so.0(GLIBC_2.12)(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libpthread.so.0(GLIBC_2.3.3)(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(CXXABI_1.3.5)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
libstdc++.so.6(GLIBCXX_3.4.18)(64bit)
libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
libvpx.so.6()(64bit) >= set:jeMZo94aN9ffBUtE8ztwxdiuiSNYcmqbsZE8na5DCOZepD3
libxcb-shm.so.0()(64bit) >= set:ifNviLwAAD1biTZh2Y0
libxcb.so.1()(64bit) >= set:njLwekKGdlxQxXCmabZptBMOUkF4jUht7ya1
libz.so.1()(64bit) >= set:kfb6dgbJdOhi7QXJERaNvT4Z92EZ8CpfbeqjjZJMVyfDEZJmZF0
libz.so.1(ZLIB_1.2.0)(64bit)
libz.so.1(ZLIB_1.2.3.4)(64bit)
libz.so.1(ZLIB_1.2.9)(64bit)
rtld(GNU_HASH)
Еще пример зависимости
Показать
perl(Cwd.pm)
perl(File/Glob.pm)
perl(Getopt/Long.pm)
perl(base.pm)
perl(constant.pm)
PAM(pam_userpass.so)
pam0(system-auth)
pam0(system-auth-use_first_pass)
PAM(pam_deny.so)
PAM(pam_permit.so)
PAM(pam_rootok.so)
pam(system-auth)
perl(Alterator/Backend3.pm)
perl(AnyDBM_File.pm)
perl(Fcntl.pm)
perl(Fcntl.pm)
typelib(GObject) = 2.0
typelib(Gio) = 2.0
RPMQ(EPOCH)
RPMQ(BUILDTIME)
RPMQ(DISTTAG)
perl(File/Glob.pm)
python3(datetime) < 0
python3(dbus) < 0
python3(dbus.mainloop.glib) < 0
typelib(XApp)
typelib(GstAudio) = 1.0
typelib(GModule) = 2.0
perl(Getopt/Long.pm)
python2.7(editor)
python3(__future__) <= set:edFi
python3(distutils.version) <= set:edFi
python3(traceback) <= set:edmN
XORG_ABI_VIDEODRV = 24.1
СКРИПТ ПРОВЕРКИ ЗАВИСИМОСТЕЙ check_rpm.sh

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

#!/bin/bash

# Текущий путь откуда запущен скрипт
currentpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
# Путь распаковки образа
DIRISO="${currentpath}"/ALT-CREATE
# Версия ALT
VER=84
# Директория с RPM пакетами, Замените на фактический путь
RPM_DIR="$DIRISO/altiso$VER/ALTLinux/RPMS.main"
# RPM_DIR="$DIRISO/altiso$VER/ALTLinux/RPMS.main;$DIRISO/squashfs-root$VER/var/tmp/kuinstall/repocsv35/x86-64/RPMS.classic"
# Список всех пакетов в папке $RPM_DIR вывод подробной информации

# Создать каталог для ЛОГОВ RPM Пакетов
mkdir -p "${currentpath}"/LOGRPM

OUTPUT_FILE="LOGRPM/packages_info.tsv"  # TSV файл с табуляцией
# Файл для вывода отсутствующих зависимостей Имя пакета + не подходящая версия
MISSING_DEPS_FILE="LOGRPM/missing_dependencies.txt"
# Файл для некритичных несовпадений Реализ + Архитектура пакета
NON_CRITICAL_FILE="LOGRPM/non_critical_mismatches.txt"
# Файл дубликатов rpm пакетов по имени
DUPNAMERPM="LOGRPM/duplicates.txt"
# Файл реализов
REALSPISOKRPM="LOGRPM/spisokrealis.txt"


# Удаляем старые файлы, если они существуют
rm -f "$OUTPUT_FILE" "$MISSING_DEPS_FILE" "$NON_CRITICAL_FILE" "$DUPNAMERPM" "$REALSPISOKRPM"

# ПОЛУЧИМ СПИСОК ПАКЕТОВ: ИМЯ ВЕРСИЯ РЕАЛИЗ АРХИТЕКТУРА
# Проверка нескольких директорий RPM, делим через ;
IFS=';' read -ra rpmdir <<< "$RPM_DIR"
found_rpm_dir=false
found_rpm_package=false

# Переберем пути до rpm пакетов
for rpmput in "${rpmdir[@]}"
do
  # Проверка, существует ли директория
  if [[ ! -d "$rpmput" ]]; then
    echo "Путь не существует: $rpmput"
  else
    found_rpm_dir=true
    # Список всех RPM-пакетов в директории
    count=$(ls -1 "$rpmput" | grep -c '\.rpm')
    # Проверяем, есть ли RPM-пакеты в директории
    if [ $count -eq 0 ]; then
      echo "Ошибка: В директории $rpmput не найдено RPM-пакетов."
    else
      echo "$rpmput" >> "$OUTPUT_FILE"
      # Проверяем каждый указанный RPM-пакет
      for rpm in $(ls -1 "$rpmput" | grep '\.rpm'); do
        # Проверяем, существует ли указанный RPM-пакет
        if [[ ! -f "$rpmput"/"$rpm" ]]; then
          echo "Пакет не найден: $rpmput/$rpm"
        else
          found_rpm_package=true
          # Получаем имя, версию и релиз пакета с архитектурой
          PACKAGE_INFO=$(rpm -qp --queryformat '%{NAME}\t%{VERSION}\t%{RELEASE}\t%{ARCH}\n' "$rpmput"/"$rpm")
          echo -e "$PACKAGE_INFO" >> "$OUTPUT_FILE"
        fi
      done
    fi
  fi
done

# Завершаем работу скрипта, если ни один путь не найден или ни один RPM-пакет не найден
if [ "$found_rpm_dir" = false ]; then
  echo "Ошибка: Ни один из указанных путей не найден. Завершение работы скрипта."
  exit 1
fi

if [ "$found_rpm_package" = false ]; then
  echo "Ошибка: Ни один RPM-пакет не найден. Завершение работы скрипта."
  exit 1
fi


# Находим дубликаты по имени и выводим их в лог-файл
#awk -F '\t' '{print $1}' "$OUTPUT_FILE" | sort | uniq -d > "$DUPNAMERPM"
awk -F '\t' '{print $1}' "$OUTPUT_FILE" | sort | uniq -c | awk '$1 > 1' | sort -nr > "$DUPNAMERPM"

# Список отличающихся версий сборки пакетов дистрибутивов или репозиториев
#awk -F '\t' '{print $3}' "$OUTPUT_FILE" | sort | uniq -d > "$REALSPISOKRPM"
awk -F '\t' '{print $3}' "$OUTPUT_FILE" | sort | uniq -c | sort -nr > "$REALSPISOKRPM"

# Вывод количества дубликатов по именам в файл
if [[ -s "$DUPNAMERPM" ]]; then
  echo "Количество одинаковых имен пакетов:" > "$DUPNAMERPM.tmp"
  cat "$DUPNAMERPM" | while read count name; do
    echo "Имя: $name, Дублей: $count" >> "$DUPNAMERPM.tmp"
  done
  mv "$DUPNAMERPM.tmp" "$DUPNAMERPM"
else
  echo "Дубликатов имен пакетов не найдено." > "$DUPNAMERPM"
fi

# Вывод количества дубликатов по релизам в файл
if [[ -s "$REALSPISOKRPM" ]]; then
  echo "Количество одинаковых релизов:" > "$REALSPISOKRPM.tmp"
  cat "$REALSPISOKRPM" | while read count release; do
    echo "Релиз: $release, Колличество: $count" >> "$REALSPISOKRPM.tmp"
  done
  mv "$REALSPISOKRPM.tmp" "$REALSPISOKRPM"
else
  echo "Дубликатов релизов не найдено." > "$REALSPISOKRPM"
fi

# Выбрать определенные пакета реализa
# rpm -qp --queryformat '%{NAME}-%{VERSION}-%{RELEASE}-%{ARCH}\n' /home/user1/MODISOALT/ALT-CREATE/altiso82/ALTLinux/RPMS.main/*.rpm | grep -E '[^-]*-alt6-'


# Счетчики для найденных и не найденных зависимостей
found_count_name=0
found_count_version=0
found_count_realis=0
found_count_arch=0
missing_count_name=0
missing_count_version=0
missing_count_realis=0
missing_count_arch=0

# ПРОВЕРКА ЗАВИСИМОСТЕЙ
# Переберем пути до rpm пакетов
for rpmput in "${rpmdir[@]}" ;do
  # Проверка, существует ли директория
  if [[ ! -d "$rpmput" ]]; then
    echo "Путь не существует: $rpmput"
  else
    # Проверяем, передан ли аргумент
    if [ -n "$1" ]; then
    # Если аргумент передан, формируем массив с указанными пакетами
    IFS=';' read -ra SPECIFIED_PACKAGES <<< "$1"
    else
    # Если аргумент не передан, используем все пакеты в директории
    SPECIFIED_PACKAGES=($(ls -1 "$rpmput" | grep '\.rpm'))
    fi
       # Проверяем каждый указанный RPM-пакет
       for pkg in "${SPECIFIED_PACKAGES[@]}"; do
        # Проверяем, существует ли указанный RPM-пакет
        if [[ ! -f "$rpmput"/"$pkg" ]]; then
          echo "Пакет не найден: $rpmput/$pkg"
        else
          # Получаем зависимости пакета
          DEPENDENCIES=$(rpm -qpR "$rpmput"/"$pkg")
            # Проверяем каждую зависимость
            # echo "$DEPENDENCIES" | while read -r dep; do
            while read -r dep; do
              # Игнорируем зависимости, которые не требуют наличия RPM-пакетов
              if [[ "$dep" == *"rpmlib("* ]] || [[ "$dep" == *"rtld("* ]]; then
              continue
              fi
              # Игнорируем зависимости библиотек
              if [[ "$dep" == lib* || "$dep" == *so.* ]]; then
              continue
              fi
              # Игнорируем строки, представляющие собой пути
              if [[ "$dep" == /* ]]; then
              continue
              fi
              #echo "Зависимости для пакета $pkg:" "$dep"
                 # Извлекаем ИМЯ, УСЛОВИЕ, ВЕРСИЮ,РЕАЛИЗ и АРХИТЕКТУРУ
                 DEP_NAME=$(echo "$dep" | awk '{print $1}')
                 #DEP_CONDITIONS=$(echo "$dep"| sed -n 's/.* \(.*\) .*/\1/p')
                 DEP_CONDITIONS=$(echo "$dep"| awk '{print $2}' | tr -d '()')
                  # Разбиваем двузначные символы
                  first_char=${DEP_CONDITIONS:0:1}  # Первый символ
                  second_char=${DEP_CONDITIONS:1:1}  # Второй символ
                 DEP_VERSION=$(echo "$dep"| sed -n 's/.* \(.*\)-.*/\1/p')
                 DEP_RELEASE=$(echo "$dep"| sed -n 's/.*-\(.*\):.*/\1/p')
                 DEP_ARCH=$(echo "$dep"| sed -n 's/.*:\(.*\)/\1/p')
                   echo ""
                   echo "Зависимый пакет $DEP_NAME"

                   # Получим переменые искомого пакета, в файле списка пакетов
                   searchp=$(grep -P "^$DEP_NAME\t" "$OUTPUT_FILE")
                   # Если несколько пакетов найдено по имени разных реализов
                   for searchrpm in "$searchp" ;do
                   nameis=$(echo "$searchrpm"| awk '{print $1}')
                   versionis=$(echo "$searchrpm"| awk '{print $2}')
                   realiseis=$(echo "$searchrpm"| awk '{print $3}')
                   archis=$(echo "$searchrpm"| awk '{print $4}')

                   # Проверяем, есть ли данный пакет в списке пакетов по Имени (обязательное)
                   if [ -z "$searchrpm" ]; then
                      echo "Зависимость по имени не найдена для пакета $pkg: требуется $dep" >> "$MISSING_DEPS_FILE"
                      missing_count_name=$((missing_count_name + 1))
                   else
                      #echo "ИСКОМЫЙ ПАКЕТ НАЙДЕН в списке $searchrpm"  "Cравнение имени "$DEP_NAME" == "$nameis""
                      if [[ "$DEP_NAME" == "$nameis" ]]; then
                      # Проверка по условию и версии (обязательное)
                      echo ""
                      echo "Совпадение имени найдено $DEP_NAME"
                      found_count_name=$((found_count_name + 1))
                      # Проверка что переменая условия и версии не пустая
                      if [ -n "$DEP_CONDITIONS" ]; then
                      if [ -n "$DEP_VERSION" ]; then
                      uslov=0
                      # Получим наименьшую версию из 2х и сравним с требуемое условие $DEP_CONDITIONS и то условие которое получили
                          if [ "$(echo -e "$versionis\n$DEP_VERSION" | sort -V | head -n1)" = "$versionis" ]; then
                             if [ "$versionis" = "$DEP_VERSION" ]; then
                             echo "существующий: $versionis Равно= Искомый: $DEP_VERSION Требуемое условие: $first_char $second_char" 
                             if [ "$first_char" == "=" ]; then uslov=1 ;fi
                             if [ "$second_char" == "=" ]; then uslov=1 ;fi
                             else
                             echo "существующий: $versionis <Mеньше Искомый: $DEP_VERSION Требуемое условие: $first_char $second_char"
                             if [ "$first_char" == "<" ]; then uslov=1 ;fi
                             if [ "$second_char" == "<" ]; then uslov=1 ;fi
                             fi
                          else
                          echo "существующий:" "$versionis Больше> Искомый: $DEP_VERSION Требуемое условие: $first_char $second_char"
                          if [ "$first_char" == ">" ]; then uslov=1 ;fi
                          if [ "$second_char" == ">" ]; then uslov=1 ;fi
                          fi
                          # Если uslov=1 то условие соотвествеут, uslov=0 не соответсвует
                          if [ "$uslov" == "1" ]; then
                          found_count_version=$((found_count_version + 1))
                          echo "Зависимость по условию найдена: $first_char $second_char"

                               # Проверка по Реализу (не обязательная)
                               # Проверка что переменая Реализа не пустая
                               if [ -n "$DEP_RELEASE" ]; then
                               # echo "Искомый реализ: $DEP_RELEASE Существующий реализ: $realiseis"
                               if [ "$DEP_RELEASE" == "$realiseis" ]; then 
                               found_count_realis=$((found_count_realis + 1))
                               echo "для пакета $pkg: Искомый реализ: $DEP_RELEASE НАЙДЕН  Существующий реализ: $realiseis"
                               else
                               missing_count_realis=$((missing_count_realis + 1))
                               echo "для пакета $pkg: Искомый реализ: $DEP_RELEASE НЕНАЙДЕН  Существующий реализ: $realiseis" >> "$NON_CRITICAL_FILE"
                               fi ;fi

                               # Проверка по Архитектуре (не обязательная)
                               # Проверка что переменая Архитектуры не пустая
                               if [ -n "$DEP_ARCH" ]; then
                               echo "для пакета $pkg: Искомая Архитектура: $DEP_ARCH Существующая Архитектура: $archis"
                               if [ "$DEP_ARCH" == "$archis" ]; then
                               found_count_arch=$((found_count_arch + 1))
                               echo "для пакета $pkg: Искомая Архитектура: $DEP_ARCH НАЙДЕНА Существующая Архитектура: $archis"
                               else
                               missing_count_arch=$((missing_count_arch + 1))
                               echo "для пакета $pkg: Искомая Архитектура: $DEP_ARCH НЕНАЙДЕНА Существующая Архитектура: $archis" >> "$NON_CRITICAL_FILE"
                               fi ;fi

                          else
                          echo "Зависимость по условию не найдена для пакета $pkg: требуется $dep" >> "$MISSING_DEPS_FILE"
                          missing_count_version=$((missing_count_version + 1))
                          fi
                      fi
                      fi
                      fi
                   fi
                   done
            done <<< "$DEPENDENCIES"
        fi
       done
  fi
done


echo "Проверка завершена."
echo "Найдено зависимостей по ИМЕНИ: $found_count_name"
echo "Найдено зависимостей по УСЛОВИЮ и ВЕРСИИ: $found_count_version"
echo "Найдено зависимостей по РЕЛИЗУ: $found_count_realis"
echo "Найдено зависимостей по АРХИТЕКТУРЕ: $found_count_arch"
echo ""
echo "Не найдено зависимостей по ИМЕНИ: $missing_count_name"
echo "Не найдено зависимостей по УСЛОВИЮ и ВЕРСИИ: $missing_count_version"
echo "Не найдено зависимостей по РЕЛИЗУ: $missing_count_realis"
echo "Не найдено зависимостей по АРХИТЕКТУРЕ: $missing_count_arch"


количество слов: 2294
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Есть еще один вариант установки ОС уже с софтом и обновлениями.
Ставим образ на вритуалку все устанавливаем в ОС что не обходимо настраиваем и после снимаем например КлонЗилой образ жесткого диска и ставим на нужный нам системник.

А если железо разное включится ? (не будет как на Windows синий экран смерти) Да включится так как там все драйвера какие есть содержатся в ядре, может только не совпасть вид жесткого диска например был sata стал M2 нужно просто через загрузочный диск поправить загрузчик.
И еще один основной момент размер диска будет один в один как на виртуалке например он 500Гб, а в системнике 1000Гб то все равно будет 500 и 500 неразмеченной областью (можно это переделать занимает длительный процесс)

Более подробно по данному способу можно уточнить у Сисадмин Михалыч
Клонирую виртуальный диск на компы, потом просто меняю хостнейм и ввожу в домен. Весь предустановленный софт уже настроен.
выключаю виртуалку, далее от рута alt-rootfs-installer --image-in=ПутьДоRAWОбразаВиртуальногоДиска --media=ПутьДоДискаНазначения(например /dev/sdb) --resize
Можно клонзиллой, только там надо подобрать параметры клонирования и развертывания, я давно ей не пользовался.
На счёт виртуального диска, нужно чтоб его формат был именно raw, если нет то конвертировать в него например утилитой qemu-img. На виртуальной машине виртуальный диск должен быть сэмулирован на sata шине, иначе можно огребсти ошибку с initramfs.

У меня на дзене есть видео: https://dzen.ru/video/watch/6710d44bc954404aeab741fc
Пример работы с qemu-img есть тут https://dzen.ru/video/watch/64c845f502606d249358586a примерно на 7й минуте
количество слов: 37
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Чтобы подключить диск CD/образ с репозиторием в ALT Linux, можно использовать утилиту apt-cdrom.
Для этого нужно вставить диск в привод и выполнить команду
[cod=ebash]apt-cdrom add[/code]

Репозитории

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

# Репозиторий на диске CD
# rpm cdrom:[ALT 8 SP Workstation 11100-01 x86_64 build 2020-12-02]/ ALTLinux main

# Репозиторий на жестком диске
# rpm-dir file:/usr/share/install/repo x86-64 classic

#rpm [p5] http://ftp.altlinux.org/pub/distributions/ALTLinux/p5/branch x86_64 classic
#rpm [p5] http://ftp.altlinux.org/pub/distributions/ALTLinux/p5/branch i586 classic
#rpm [p5] http://ftp.altlinux.org/pub/distributions/ALTLinux/p5/branch noarch classic

#rpm [p6] http://ftp.altlinux.org/pub/distributions/ALTLinux/p6/branch x86_64 classic
#rpm [p6] http://ftp.altlinux.org/pub/distributions/ALTLinux/p6/branch x86_64-i586 classic
#rpm [p6] http://ftp.altlinux.org/pub/distributions/ALTLinux/p6/branch noarch classic

#rpm [p7] http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch x86_64 classic
#rpm [p7] http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch x86_64-i586 classic
#rpm [p7] http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

# Cтандартных репозиториев ALT Linux 8.0 СП
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/c8/branch x86_64 classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/c8/branch noarch classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/c8/branch x86_64-i586 classic

#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64 classic
#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic
#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic

# Cтандартных репозиториев ALT Linux 8.2 СП
#rpm http://update.altsp.su/pub/distributions/ALTLinux CF/branch/x86_64 classic
#rpm http://update.altsp.su/pub/distributions/ALTLinux CF/branch/x86_64 classic
#rpm http://update.altsp.su/pub/distributions/ALTLinux CF/branch/noarch classic

# стандартных репозиториев ALT Linux 8.2 СП Старый вариант
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux c9f1/branch/x86_64 classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux c9f1/branch/x86_64-i586 classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux c9f1/branch/noarch classic

#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux c9f2/branch/x86_64 classic
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux c9f2/branch/x86_64 classic debuginfo
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux c9f2/branch/x86_64-i586 classic
rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux c9f2/branch/noarch classic

#rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/x86_64 classic debuginfo
#rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/x86_64-i586 classic
#rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/noarch classic

#rpm [cert8] http://ftp.altlinux.org/pub/distributions/ALTLinux c10f1/branch/x86_64 classic
#rpm [cert8] http://ftp.altlinux.org/pub/distributions/ALTLinux c10f1/branch/x86_64-i586 classic
#rpm [cert8] http://ftp.altlinux.org/pub/distributions/ALTLinux c10f1/branch/noarch classic

# Установка нестабильных репозиториев Sisyphus
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64-i586 classic
#rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic
#rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 debuginfo

#rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64 classic
#rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic
#rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64-i586 classic

#rpm [p10] http://mirror.yandex.ru/altlinux p10/branch/x86_64 classic
#rpm [p10] http://mirror.yandex.ru/altlinux p10/branch/x86_64-i586 classic
#rpm [p10] http://mirror.yandex.ru/altlinux p10/branch/noarch classic

Ошибка ключей обновить alt-gpgkeys

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

https://packages.altlinux.org/ru/p10/binary/alt-gpgkeys/noarch/2709206173060638588
alt-gpgkeys-0.8.17-alt1.noarch.rpm

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

https://packages.altlinux.org/ru/p10/srpms/apt/
apt-0.5.15lorg2-alt86.x86_64.rpm

Обновление списка пакетов

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

apt-get update
Информация о системе текущий реализ ОС

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

cat /etc/*-release*
Очистка кеша пакетов

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

apt-get clean

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

apt-get autoclean
Тесты обновления

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

apt-get dist-upgrade

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

apt-get update && apt-get dist-upgrade && update-kernel

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

epm full-upgrade

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

update-kernel

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

apt-get update && apt-get install apt rpm && apt-get dist-upgrade
Чтобы выполнить обновление дистрибутива до следующей версии, выполните
# epm release-upgrade

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

epm full-upgrade
количество слов: 689
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Изменение Модификация Пересборка Образа ALTLINUX

Сообщение Артём Мамзиков »

Еще один скрипт rename_rpms.sh
Указываем путь до rpm пакетов запускаем скрипт
1. Переименовывает все пакеты Имя Версия Реализ Архитектура берутся из команды тоесть из самого пакета
rpm -qp --queryformat '%{NAME}-%{VERSION}-%{RELEASE}-%{ARCH}
2. Если есть дубль пакета были просто с разными именами добавляется к имени copy-1 2 3 в зависимости сколько пакетов копий.

3. Удалить донниковые пакеты copy сравнивается от имени оригинального пакета и размер copy если одинаково удаляем, если каким то чудом у нас copy другова размера (кто то пересобрал сам пакет) copy сравниваются между собой одноимённые и если размер одинаковый удаляются.
4. Автоматическое удаление одинаковых пакетов или ручное при ручном спрашивает действие на каждое удаление.
5. Итог список удаленных и количество (если ручное удаление, отменяем удаление в статистике проходит как удаленный по факту нет)

Дополнительно дубли по именам вывести в лог можно скриптом check_rpm.sh
OGRPM/duplicates.txt
Количество реализов
LOGRPM/spisokrealis.txt

# Выбрать определенные пакета реализa пример alt6

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

rpm -qp --queryformat '%{NAME}-%{VERSION}-%{RELEASE}-%{ARCH}\n' /home/user1/MODISOALT/ALT-CREATE/altiso84/ALTLinux/RPMS.main/*.rpm | grep -E '[^-]*-alt6-'
rename_rpms.sh

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

#!/bin/bash

# Текущий путь откуда запущен скрипт
#currentpath=$(readlink -f $0)
#currentpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
currentpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"

# Переменная на путь где хранятся rpm
dirrpms="$currentpath/ALT-CREATE/altiso84/ALTLinux/RPMS.main/"
#dirrpms="/home/user1/MODISOALT/RPMS.main/"
#dirrpms="/home/user1/Загрузки/"

# Получаем список файлов и заменяем переносы строк на ;
namedirrpm=$(ls -1 "$dirrpms" | tr '\n' ';')

# Убираем последний символ ';' из строки
namedirrpm=${namedirrpm%;}

# Инициализируем счетчики
total_packages=0
renamed_packages=0

# Цикл по именам пакетов в папке
IFS=';' # Устанавливаем разделитель на ';'
for file in $namedirrpm; do
    # Увеличиваем счетчик общего количества пакетов
    ((total_packages++))

    # Получаем внутреннее имя пакета
    internal_name=$(rpm -qp --queryformat '%{NAME}-%{VERSION}-%{RELEASE}-%{ARCH}\n' "$dirrpms$file")

    # Проверяем, что внутреннее имя не пустое
    if [ -n "$internal_name" ]; then
        # Экранируем специальные символы
        internal_name=$(echo "$internal_name" | sed 's/[&/\]/\\&/g')

        # Удаляем пробелы
        internal_name=$(echo "$internal_name" | tr -d ' ')

        # Убираем лишние тире
        internal_name=$(echo "$internal_name" | sed 's/-\+/-/g; s/^-//; s/-$//')

        # Устанавливаем новое имя файла
        new_file="$internal_name.rpm"

          # Сравним имена если одинаковые переименование не нужно
          if [ "$file" != "$new_file" ]; then

          # Переименовать без потверждения с заменой одноименных
          #mv "$dirrpms$file" "$dirrpms$new_file"
          # Переименовать с запросом и заменой одноименных при потверждении
          #mv -i "$dirrpms$file" "$dirrpms$new_file"

            # Цикл для обработки возможных конфликтов одинаковых имен
            while true; do
             # Проверка одноименных файлов в процессе переименования
             #if ! grep -q -i '^$dirrpms$new_file$' /dev/null; then
             if [ ! -e "$dirrpms$new_file" ]; then

             # Если файл не найден, переименовать файл
                mv -i "$dirrpms$file" "$dirrpms$new_file"
                echo "Переименован: $file -> $new_file"
                ((renamed_packages++))  # Увеличиваем счетчик переименованных пакетов
                break  # Выходим из цикла после успешного переименования
             else
             # Если файл найден, возник конфликт, добавляем индекс к имени
                index=1
                while [ -e "$dirrpms${internal_name}_copy-$index.rpm" ]; do
                  ((index++))
                done
                new_file="${internal_name}_copy-$index.rpm"
             fi
            done
          else
             echo "Имена уже одинаковые: $file -> $new_file"
         fi
    else
        echo "Не удалось получить внутреннее имя для: $file"
    fi
done
# Вывод результатов
echo "Общее количество пакетов: $total_packages"
echo "Количество переименованных пакетов: $renamed_packages"




# Сортируем список файлов с копиями по алфавиту и выводим его
copy_rpms=$(ls -1 "$dirrpms" | grep "copy-" | sort)
# Проверяем, есть ли файлы с копиями
if [ -z "$copy_rpms" ]; then
    echo "Нет файлов с копиями. Выход из скрипта."
    exit 1  # Выход из скрипта с кодом 1
fi
echo "Список файлов с копиями по алфавиту:"
echo "$copy_rpms"


# Запрашиваем у пользователя, хочет ли он удалить одинаковые файлы
read -p "Удалить одинаковые файлы одного размера и имени? (y/n): " remove_choice
if [[ "$remove_choice" != "y" ]]; then
    echo "Удаление отменено."
    exit 0
fi

# Запрос выбора пользователя для удаления
read -p "Хотите удалить дублирующиеся пакеты автоматически (y) или вручную (n)? " choice
if [[ "$choice" == "y" ]]; then
# Удаление без потверждения
argrm="-f"
else
# Удаление с запросом потверждения
argrm="-i"
fi

# Переменные для подсчета удаленных пакетов
total_removed=0
removed_packages=""

# Получаем имя оригинального пакета
origrpm=$(echo $copy_rpms|sed 's/_copy.*.rpm//g'| sort | uniq| tr '\n' ';'| sed 's/;$//')
# Оригинальные пакеты и их размер
    IFS=';' read -r -a origpackages <<< "${origrpm%;}"  # Разбиваем на массив
for pkg in "${origpackages[@]}"; do
    # Размер оригинального пакета
    size=$(du -sb "$dirrpms$pkg.rpm"| awk '{print $1}')
    # echo "имя пакета $pkg"
    # echo "размер $size"

# Пакеты с Copy-*
copypackages=$(echo $copy_rpms|grep -i "$pkg"| tr '\n' ';'| sed 's/;$//')
 # echo "Список копий $copypackages"
# Разбиваем строку на массив
IFS=';' read -r -a copypackages_array <<< "$copypackages"
for pkgcopy in "${copypackages_array[@]}"; do
    # Размер оригинального пакета
    sizecopy=$(du -sb "$dirrpms$pkgcopy"| awk '{print $1}')
    # echo "имя пакета $pkgcopy"
    # echo "размер $sizecopy"
# Копию каждого пакета сравним с оригиналом
if [[ "$size" == "$sizecopy" ]]; then
rm $argrm "$dirrpms$pkgcopy"
echo "Удаление пакета: $pkgcopy $sizecopy"
total_removed=$((total_removed + 1))  # Увеличиваем счетчик удаленных пакетов
removed_packages+="$pkgcopy "  # Добавляем удаленный пакет в список
else
echo "Пакеты с оригиналом разные $pkg $size и $pkgcopy $sizecopy"
# Накопительная оставшихся пакетов copy для данного имени
listcopy=$listcopy"$rz$pkgcopy $sizecopy"
rz=";"
fi
done
#Сравнение одноименных копий между собой (удаление одинаковых копий если есть такие)
echo "Оставшиеся copy: $listcopy"

    # Сравнение одноименных копий между собой (удаление одинаковых копий если есть такие)
    IFS=';' read -r -a remaining_copies <<< "${listcopy%;}"  # Разбиваем на массив
    declare -A seen  # Ассоциативный массив для отслеживания размеров

    for copy in "${remaining_copies[@]}"; do
        pkgdname=$(echo "$copy" | awk '{print $1}')  # Имя копии
        pkgdsize=$(echo "$copy" | awk '{print $2}')  # Размер копии

        # Проверяем, есть ли такой размер уже в ассоциативном массиве
        if [[ -n "${seen[$pkgdsize]}" ]]; then
            echo "Удаление дубликата: $pkgdname (размер: $pkgdsize)"
            # Удаляем пакет
            rm $argrm "$dirrpms$pkgdname"
            total_removed=$((total_removed + 1))  # Увеличиваем счетчик удаленных пакетов
            removed_packages+="$pkgdname "  # Добавляем удаленный пакет в список
        else
            seen[$pkgdsize]=$pkgdname  # Запоминаем
            seen[$pkgdsize]=$pkgdname  # Запоминаем уникальный пакет по размеру
            echo "Оставляем уникальный пакет: $pkgdname (размер: $pkgdsize)"
        fi
    done

done



# Выводим общее количество удаленных пакетов и их список
echo "Общее количество удаленных пакетов: $total_removed"
if [ $total_removed -gt 0 ]; then
    echo "Список удаленных пакетов: $removed_packages"
else
    echo "Не было удалено ни одного пакета."
fi

количество слов: 512
Ответить Вложения 32 Пред. темаСлед. тема

Вернуться в «Linux»