tmp
Различия
Показаны различия между двумя версиями страницы.
| tmp [2026/05/03 08:38] – создано VladPolskiy | tmp [2026/05/22 12:15] (текущий) – внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | <note page> | ||
| - | {{: | ||
| - | **[[software: | ||
| - | </ | ||
| - | ====== 5.0 Файлы и директори приложения ====== | ||
| - | Расмотрим примерную структуру нашего приложения (названия директорий произвольное, | ||
| - | < | + | 🔍 Шаг 1. смотрим диски |
| - | |AAA||||||AAA{text-align: | + | <code bash> |
| - | |!|`|BBB|||BBB{text-align: | + | lsblk sdb |
| - | |)|DDD|||DDD{text-align: | + | </code> |
| - | |!|)|DDD||DDD{text-align: | + | 🔍 Шаг 2. вставить скрипт |
| - | |!|)|DDD||DDD{text-align: | + | < |
| - | |!|)|DDD||DDD{text-align: | + | cat << ' |
| - | |!|)|DDD||DDD{text-align: | + | #!/bin/bash |
| - | |!|)|CCC||CCC{text-align: | + | set -e |
| - | |!|)|DDD||DDD{text-align: | + | |
| - | |!|)|CCC||CCC{text-align: | + | |
| - | |!|!|)|CCC||CCC{text-align: | + | |
| - | |!|!|!|`|DDD||DDD{text-align: | + | |
| - | |!|!|`|CCC||CCC{text-align: | + | |
| - | |!|!||`|DDD||DDD{text-align: | + | |
| - | |!|)|DDD||DDD{text-align: | + | |
| - | |!|`|DDD|||DDD{text-align: | + | |
| - | |)|CCC|||CCC{text-align: | + | |
| - | |!|!|CCC||CCC{text-align: | + | |
| - | |!|!|)|CCC|CCC{text-align: | + | |
| - | |!|!|!|`|CCC|||CCC{text-align: | + | |
| - | |!|!|)|CCC|CCC{text-align: | + | |
| - | |!|!|!|`|CCC|||CCC{text-align: | + | |
| - | |!|!|)|CCC|CCC{text-align: | + | |
| - | |!|!|!|)|CCC|||CCC{text-align: | + | |
| - | |!|!|!|`|CCC|||CCC{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|)|BBB||||BBB{text-align: | + | |
| - | |!|!|`|BBB||||BBB{text-align: | + | |
| - | |)|MMM|||MMM{text-align: | + | # ============================================================================== |
| - | |)|MMM|||MMM{text-align: | + | # 0. ГЛОБАЛЬНАЯ ТЕХНИЧЕСКАЯ КОНФИГУРАЦИЯ СЕРВЕРА И ССЫЛОК |
| - | |)|MMM|||MMM{text-align: | + | # ============================================================================== |
| - | |)|MMM|||MMM{text-align: | + | TARGET_FLASH=" |
| - | |)|MMM|||MMM{text-align: | + | SERVER_NAME=" |
| - | |)|MMM|||MMM{text-align: | + | ADMIN_NAME=" |
| - | |`|MMM|||MMM{text-align: | + | ADMIN_PASS=" |
| - | </diagram> | + | ROOT_PASS=" |
| - | Надеемся, | + | OFFLINE_MODE=" |
| - | * .htaccess — это локальный конфигурационный файл веб-сервера Apache, | + | |
| - | * index.php - это стартовая страница. | + | |
| - | * readme.html - руководство, которое дает пользователям подробное описание проекта | + | |
| - | * /user - главная папка пользователей | + | |
| - | * guest - пользователь с правом только просмотра и поиска по сайту контента. | + | |
| - | * / | + | |
| - | * user_login.php - файл авторизации пользователя | + | |
| - | * user_logout.php - файл окончания | + | |
| - | * user_signup.php - файл регистрации нового | + | |
| - | * user_edit.php - редактор постов пользователя | + | |
| - | * user_nav.php - меню пользователя | + | |
| - | * / | + | |
| - | * admin_setting.php - файл настроек CMS администратором | + | |
| - | * admin_nav.php - расширенное меню пользователя-администратора | + | |
| - | * /install - папка установки CMS | + | |
| - | и т.д... (см. описание в файле readme.html) | + | |
| - | ===== Дополнения и Файлы ===== | + | # Базовый образ Arch Linux |
| - | см. также: | + | URL_BOOTSTRAP=" |
| - | * [[https:// | + | |
| - | * [[https://www.w3.org/International/questions/qa-html-language-declarations.ru|Объявление языка в HTML]] | + | |
| - | <note page> | + | # Официальные репозитории и зеркала (используются для скачивания и прописываются на ПК) |
| - | <wrap left> | + | URL_YANDEX=" |
| - | [[software: | + | URL_PKGS=" |
| - | </ | + | URL_RACKSPACE=" |
| - | <wrap right> | + | URL_PKGBUILD=" |
| - | [[software: | + | |
| - | {{:icons:16:arrow-transition.png?|}}</wrap> | + | |
| - | </note> | + | |
| + | # ============================================================================== | ||
| + | # ШАГ 1: Верификация безопасности накопителей | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 1: Верификация безопасности накопителей ===" | ||
| + | UBUNTU_ROOT_DISK=$(lsblk -no PKNAME $(findmnt -nvo SOURCE /) 2>/ | ||
| + | if [ -z " | ||
| + | UBUNTU_ROOT_DISK=$(lsblk -dno NAME, | ||
| + | fi | ||
| + | if [ "/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | echo " | ||
| + | sleep 3 | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 2: Принудительное уничтожение метаданных и разметки | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 2: Принудительное уничтожение метаданных и разметки ===" | ||
| + | # Принудительно отрываем все виртуальные ФС, которые могли остаться в памяти хоста | ||
| + | sudo umount -l / | ||
| + | sudo umount -l / | ||
| + | sudo umount -l / | ||
| + | sudo umount -l / | ||
| + | sudo umount -l / | ||
| + | sudo umount -l /mnt/arch 2>/ | ||
| + | sudo umount -l ${TARGET_FLASH}* 2>/ | ||
| + | |||
| + | # Стираем сигнатуры файловых систем | ||
| + | sudo wipefs -a --force " | ||
| + | |||
| + | sudo dd if=/ | ||
| + | sudo partprobe " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 3: Создание новой таблицы разделов GPT | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 3: Создание новой таблицы разделов GPT ===" | ||
| + | printf " | ||
| + | sudo partprobe " | ||
| + | |||
| + | if [[ " | ||
| + | PART1=" | ||
| + | PART2=" | ||
| + | else | ||
| + | PART1=" | ||
| + | PART2=" | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | sudo partprobe /dev/sdb || true | ||
| + | sudo udevadm settle || true | ||
| + | sleep 2 | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 4: Безусловное форматирование файловых систем | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 4: Безусловное форматирование файловых систем ===" | ||
| + | sudo mkfs.vfat -F 32 " | ||
| + | sudo mkfs.ext4 -F " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 5: Развертывание структуры точек монтирования | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 5: Развертывание структуры точек монтирования ===" | ||
| + | sudo mkdir -p /mnt/arch | ||
| + | sudo mount " | ||
| + | sudo mkdir -p / | ||
| + | sudo mount " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 6: Скачивание официального образа Arch Linux | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 6: Скачивание официального образа Arch Linux ===" | ||
| + | sudo apt update && sudo apt install -y zstd wget | ||
| + | if [ ! -f archlinux-bootstrap-x86_64.tar.zst ]; then | ||
| + | wget --timeout=15 --tries=3 " | ||
| + | fi | ||
| + | sudo tar -I zstd -xf archlinux-bootstrap-x86_64.tar.zst --strip-components=1 -C /mnt/arch | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 7: Статическая генерация таблицы fstab флешки | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 7: Статическая генерация таблицы fstab флешки ===" | ||
| + | EFI_UUID=$(sudo blkid -s UUID -o value " | ||
| + | ROOT_UUID=$(sudo blkid -s UUID -o value " | ||
| + | sudo mkdir -p / | ||
| + | printf " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 8: Внедрение скрипта АВТОУСТАНОВКИ на флешку (ОФФЛАЙН МЕТОД) | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 8: Внедрение скрипта АВТОУСТАНОВКИ на флешку ===" | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | sudo cat << EOF | sudo tee / | ||
| + | #!/bin/bash | ||
| + | set -e | ||
| + | echo "=== КОМБАЙН ЗАПУЩЁН ===" | ||
| + | |||
| + | MY_DISK=\$(lsblk -no PKNAME \$(findmnt -nvo SOURCE /) 2>/ | ||
| + | if [ -z " | ||
| + | MY_DISK=\$(lsblk -no PKNAME /bootmnt 2>/ | ||
| + | fi | ||
| + | |||
| + | TARGET_DISK=\$(lsblk -dno NAME,TYPE | grep -v " | ||
| + | TARGET="/ | ||
| + | if [ -z " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | umount -f \${TARGET}* 2>/ | ||
| + | wipefs -a --force " | ||
| + | dd if=/ | ||
| + | partprobe " | ||
| + | |||
| + | echo " | ||
| + | printf " | ||
| + | if [[ " | ||
| + | TPART1=" | ||
| + | TPART2=" | ||
| + | else | ||
| + | TPART1=" | ||
| + | TPART2=" | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | mkfs.vfat -F 32 " | ||
| + | mkfs.ext4 -F " | ||
| + | |||
| + | echo " | ||
| + | mkdir -p /mnt/target && mount " | ||
| + | mkdir -p / | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 8.1 ОФЛАЙН УСТАНОВКА С ОБНОВЛЕНИЕМ | ||
| + | # ============================================================================== | ||
| + | # ============================================================================== | ||
| + | # НАСТОЯЩИЙ АВТОНОМНЫЙ ОФЛАЙН-МЕТОД 20.05.26 14:15 | ||
| + | # ============================================================================== | ||
| + | echo " | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | |||
| + | echo " | ||
| + | if [ -d "/ | ||
| + | cp -R / | ||
| + | fi | ||
| + | if [ -d "/ | ||
| + | cp -R / | ||
| + | fi | ||
| + | |||
| + | |||
| + | cp / | ||
| + | touch / | ||
| + | |||
| + | echo " | ||
| + | # Подставляем имена файлов через find прямо на ПК, защищая строку от Ubuntu | ||
| + | pacman -U --noconfirm --root /mnt/target --dbpath / | ||
| + | |||
| + | # ============================================================================== | ||
| + | # КОНЕЦ НАСТОЯЩИЙ АВТОНОМНЫЙ ОФЛАЙН-МЕТОД 20.05.26 14:15 | ||
| + | # ============================================================================== | ||
| + | |||
| + | echo " | ||
| + | printf " | ||
| + | |||
| + | echo " | ||
| + | mount --types proc /proc / | ||
| + | mount --rbind /sys / | ||
| + | mount --make-rslave / | ||
| + | mount --rbind /dev / | ||
| + | mount --make-rslave / | ||
| + | mount --rbind /dev/pts / | ||
| + | |||
| + | |||
| + | |||
| + | arch-chroot /mnt/target /bin/bash << ' | ||
| + | set -e | ||
| + | # Отключите автоматическую синхронизацию | ||
| + | # Автоматическая настройка времени без пользовательского ввода | ||
| + | # Вариант 1: Использовать UTC (рекомендуется) | ||
| + | #echo " | ||
| + | #ln -sf / | ||
| + | # | ||
| + | |||
| + | # Вариант 2: Использовать локальное время с материнки напрямую через конфиги | ||
| + | hwclock --systohc --localtime | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | |||
| + | touch / | ||
| + | |||
| + | echo -e " | ||
| + | echo " | ||
| + | useradd -m -G wheel -s /bin/bash " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ЖЕСТКОЕ ПОДАВЛЕНИЕ СИНЕГО ЭКРАНА НА ЦЕЛЕВОМ ПК | ||
| + | # ============================================================================== | ||
| + | echo " | ||
| + | locale-gen | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | systemd-machine-id-setup | ||
| + | ln -sf /dev/null / | ||
| + | |||
| + | # ============================================================================== | ||
| + | |||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | touch / | ||
| + | touch / | ||
| + | touch / | ||
| + | |||
| + | echo " | ||
| + | sed -i ' | ||
| + | systemctl enable sshd NetworkManager | ||
| + | |||
| + | echo " | ||
| + | grub-install --target=x86_64-efi --efi-directory=/ | ||
| + | grub-mkconfig -o / | ||
| + | CHROOT_INNER_EOF | ||
| + | |||
| + | printf "## Russia\nServer = %s\nServer = %s\n## International\nServer = %s\nServer = %s\n" \ | ||
| + | " | ||
| + | |||
| + | # Размонтируем за собой виртуальные ФС на флешке | ||
| + | umount -l / | ||
| + | umount -l / | ||
| + | umount -l / | ||
| + | umount -l / | ||
| + | umount -R /mnt/target | ||
| + | |||
| + | umount -R /mnt/target | ||
| + | echo " | ||
| + | sleep 3 | ||
| + | reboot | ||
| + | EOF | ||
| + | |||
| + | # Настройка прав доступа к файлу автоустановщика | ||
| + | sudo chmod 755 / | ||
| + | sudo chmod +x / | ||
| + | sudo chmod 700 / | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 9: Создание и регистрация фоновой службы systemd | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 9: Создание и регистрация фоновой службы systemd ===" | ||
| + | sudo cat << ' | ||
| + | [Unit] | ||
| + | Description=Автоустановщик Arch Linux без монитора | ||
| + | After=multi-user.target | ||
| + | [Service] | ||
| + | Type=idle | ||
| + | ExecStart=/ | ||
| + | StandardOutput=tty | ||
| + | StandardError=tty | ||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | SERVICE_EOF | ||
| + | |||
| + | sudo mkdir -p / | ||
| + | sudo ln -sf / | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 10: Формирование чистых репозиториев для флешки | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 10: Формирование чистых репозиториев для флешки ===" | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | # Пишем зеркала через стандартный echo, полностью избегая капризных Here-Doc с пайпами | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 11: Подготовка локального репозитория на флешке (Выполняет Ubuntu) | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 11: Подготовка локального репозитория силами Ubuntu ===" | ||
| + | sudo mkdir -p / | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | # Генерируем правильный pacman.conf для флешки (пока со стандартными зеркалами) | ||
| + | cat << ' | ||
| + | [options] | ||
| + | Architecture = auto | ||
| + | SigLevel = Optional TrustAll | ||
| + | LocalFileSigLevel = Optional | ||
| + | |||
| + | [core] | ||
| + | Include = / | ||
| + | |||
| + | [extra] | ||
| + | Include = / | ||
| + | EOF | ||
| + | |||
| + | # Скачиваем базы данных и ВСЕ пакеты, | ||
| + | sudo / | ||
| + | |||
| + | set -e | ||
| + | |||
| + | echo " | ||
| + | pacman-key --init | ||
| + | pacman-key --populate archlinux | ||
| + | |||
| + | echo " | ||
| + | pacman -Syw --noconfirm \ | ||
| + | iana-etc filesystem linux-api-headers tzdata licenses \ | ||
| + | glibc libgcc libstdc++ libasan libatomic libgfortran libgomp \ | ||
| + | liblsan libobjc libquadmath libtsan libubsan gcc-libs \ | ||
| + | ncurses readline bash acl attr gmp zlib sqlite | ||
| + | util-linux-libs e2fsprogs keyutils gdbm brotli xz \ | ||
| + | lz4 zstd openssl libsasl libldap libevent libverto lmdb \ | ||
| + | krb5 libcap-ng audit libxcrypt libtirpc libnsl pambase \ | ||
| + | libgpg-error libgcrypt systemd-libs pam libcap coreutils \ | ||
| + | bzip2 libseccomp file findutils mpfr gawk pcre2 grep \ | ||
| + | procps-ng sed tar libtasn1 libffi libp11-kit p11-kit \ | ||
| + | ca-certificates-utils ca-certificates-mozilla ca-certificates \ | ||
| + | libunistring libidn2 libnghttp2 libnghttp3 nettle leancrypto \ | ||
| + | gnutls libngtcp2 libpsl libssh2 curl json-c gnulib-l10n icu \ | ||
| + | libxml2 gettext hwdata kmod pciutils psmisc shadow util-linux \ | ||
| + | gzip licenses libksba libusb libassuan libsysprof-capture \ | ||
| + | glib2 tpm2-tss libsecret pinentry npth gnupg gpgme libarchive \ | ||
| + | pacman-mirrorlist device-mapper popt cryptsetup expat \ | ||
| + | dbus dbus-broker dbus-broker-units dbus-units kbd libelf \ | ||
| + | systemd jansson binutils libmakepkg-dropins pacman \ | ||
| + | archlinux-keyring systemd-sysvcompat iputils libmnl \ | ||
| + | libnfnetlink libnetfilter_conntrack libnftnl libnl libpcap \ | ||
| + | nftables iptables libbpf iproute2 base mkinitcpio-busybox \ | ||
| + | diffutils mkinitcpio \ | ||
| + | linux linux-firmware-whence linux-firmware-amdgpu \ | ||
| + | linux-firmware-atheros linux-firmware-broadcom \ | ||
| + | linux-firmware-cirrus linux-firmware-intel \ | ||
| + | linux-firmware-mediatek linux-firmware-nvidia \ | ||
| + | linux-firmware-other linux-firmware-radeon \ | ||
| + | linux-firmware-realtek linux-firmware libedit \ | ||
| + | openssh libmm-glib libndp gpm pcre slang libnewt nspr nss \ | ||
| + | libnm libdaemon libsodium libpgm zeromq libteam \ | ||
| + | mobile-broadband-provider-info duktape polkit \ | ||
| + | pcsclite wpa_supplicant networkmanager sudo \ | ||
| + | nano dosfstools mtools mailcap nginx libmd libbsd \ | ||
| + | talloc tevent tdb ldb avahi libcups liburing libwbclient \ | ||
| + | mpdecimal python cifs-utils smbclient samba grub efivar \ | ||
| + | efibootmgr libzip argon2 oniguruma php php-fpm | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | CHROOT_EOF | ||
| + | |||
| + | # Переводим pacman.conf флешки на полностью локальный оффлайн-режим file:/// | ||
| + | cat << ' | ||
| + | [options] | ||
| + | Architecture = auto | ||
| + | SigLevel = Optional TrustAll | ||
| + | LocalFileSigLevel = Optional | ||
| + | |||
| + | [core] | ||
| + | Server = file:/// | ||
| + | |||
| + | [extra] | ||
| + | Server = file:/// | ||
| + | EOF | ||
| + | |||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 12: Локальная автономная установка на флешку (БЕЗ ИНТЕРНЕТА) | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 12: Накатывание базовой системы на флешку из локального кэша ===" | ||
| + | |||
| + | # Генерируем базовые конфиги флешки до chroot, чтобы заблокировать синий экран | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | # Принудительная инициализация идентификаторов системы | ||
| + | sudo systemd-machine-id-setup --root=/ | ||
| + | sudo touch / | ||
| + | |||
| + | # ЖЕСТКОЕ ОФФЛАЙН ПОДАВЛЕНИЕ FIRSTBOOT (Записываем строго внутрь флешки с sudo) | ||
| + | sudo mkdir -p / | ||
| + | sudo ln -sf /dev/null / | ||
| + | sudo touch / | ||
| + | |||
| + | # РЕШЕНИЕ ПРОБЛЕМЫ 3/13 И 12/13: Создаем каталоги и монтируем виртуальные ФС ядра хоста | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | echo " | ||
| + | # Используем встроенный chroot флешки, | ||
| + | sudo / | ||
| + | set -e | ||
| + | # Ставим напрямую по маске файлы пакетов | ||
| + | pacman -U --noconfirm / | ||
| + | |||
| + | # Настраиваем GRUB на флешке как съемный диск | ||
| + | grub-install --target=x86_64-efi --efi-directory=/ | ||
| + | grub-mkconfig -o / | ||
| + | " | ||
| + | |||
| + | # ============================================================================== | ||
| + | # ШАГ 13: финальная проверка | ||
| + | # ============================================================================== | ||
| + | echo "=== ШАГ 13: финальная проверка ===" | ||
| + | |||
| + | sudo umount -l / | ||
| + | sudo umount -l /mnt/arch 2>/ | ||
| + | |||
| + | |||
| + | |||
| + | MAIN_EOF | ||
| + | </ | ||
| + | |||
| + | |||
| + | 🔍 Шаг 4. Очистите его от символов Windows | ||
| + | <code bash> | ||
| + | sed -i ' | ||
| + | </ | ||
| + | |||
| + | 🔍 Шаг 5. Разрешите запуск | ||
| + | <code bash> | ||
| + | chmod +x builder.sh && ./ | ||
| + | </ | ||
| + | 🔍 Шаг 4. запустить скрипт | ||
| + | <code bash> | ||
| + | ./ | ||
| + | </ | ||
tmp.1777786686.txt.gz · Последнее изменение: — VladPolskiy
