Вся суть харча™ (на самом деле все далеко не так...)
Выбираем Option --> Partition style --> GPT как на скрине.
Качаем ISO-образ Arch Linux [ и копируем/перемещаем ] в корень на созданном разделе флешки.
Так же нужно выделить немного места под Arch Linux, если не предполагается использование отдельного диска.
Запускаем Explorer/Проводник и кливаем правой по иконке This PC/Этот Компьютер, выбираем Manage (перед этим нужно выбрать Show more options):
В Disk Managment нужно сжать какой-нибудь раздел, выделив под Arch 80-100GB:
Во время включения компьютера при появлении логотипа жмем раза клавиши F2 /  F12 / Del (зависит от производителя).
Во вкладке Boot отключаем Secure Boot. Это виндовое изобретение, которое не позволяет запускать неподписанные сертификатами от Microsoft EFI. Оно появилось вместе с Windows 8, но по требованию Евросоюза производителей материнских плат, уличенных в сговоре с M$, обязали добавить возможность отключения этой настройки. Она не влияет на возможность использовать BitLocker или TPM. Можно еще включить Launch CSM / CMS Boot / CMS OS / Legacy OS для возможности загрузки с устройств, содержащих метку MBR (может потребоваться, например, для установки Windows 7). В этой же вкладке меняем приоритет загрузки устройств, делая флешку первой. Сохраняем изменения и выходим.
Когда загрузится Ventoy, выбираем в меню Arch Linux...
В качестве пароля указывайте фразу длинее 20 символов. Не используйте пароли, которые вами уже использовались на ресурсах, напрямую подключенных к СОРМ (Вконтакте, Одноклассники, Mail, Yandex, Rambler и тп), избегайте распространенных паролей, которые утекли в сеть, и, конечно, же не вздумайте проверять стойкость пароля через сайт Касперского (вы его просто добавите в базу для брута, которую используют правоохранительные органы). В качестве пароля можно использовать фразу на одном из вымирающих языков, например, абхазском или ады-гей-ском, набранную на английской раскладке. Взломостойкими являются бредовые фразы, так как такой пароль нельзя подобрать с помощью цепей Маркова (например, "краб катит листья яблок"). Так же можно намеренно допускать ошибки в словах. Помните Олбанский и «Онотоле, пыш-пыш»?
Касаемо, фраз, то их не советуют использовать, потому как с помощью цепей маркова в теории можно подобрать пароль. В документации советуют генерировать пароль с помощью pwgen, а потом пытаться его запомнить придумывая слова, начинающиеся на эти буквы... Фактически этот же способ используется в xkcdpass, но только вместо ввода первых букв фразы, мы вводим случаные слова
SED — Self Encrypted Drives. Samsung EVO и PRO поддерживают аппаратное шифрование с использованием спецификации TCG OPAL 2.0. Фактически единственным вариантом программного шифрования в Linux является LUKS. Аппаратное и программное шифрование в общем и целом работают похожим образом и имеют свои достоинства и недостатки.
Почему Luks, а не аппаратное шифрование? — Диски с аппаратным шифрованием (SED) в 2018 году по заказу королевской полиции Нидерландов были взломаны, путем замены прошивки, в результате без пароля удалось получить доступ к данным. Этот трюк был проделан на старых SSD EVO 840 и EVO 850... Статья в журнале ксакеп. Новые диски вроде как избавлены от этих проблем, но это не точно и никто не гарантирует отсутствия аппаратных закладок, и никак не решается проблема с "быстрым переподключением" к другому устройству для считывания данных.
Другие недостатки аппаратного шифрования:
- UEFI от некоторых производителей, например, ASUS и Acer, "забывают" загрузочные записи после перехода устройства в залоченное состояние... Acer не найдя загрузочных записей, начинает искать загрузчики по захардокоженным путям и первой грузит Windows...
 - sedutil не поддерживает спящий режим, поэтому потребуется пользоваться сторонней утилитой со всеми вытекающими рисками.
 - Ну и, конечно, мы не можем выбрать какой-то другой алгоритм шифрования кроме AES.
 
К сожалению программное шифрование намного медленее (где-то в 1.5-2x), потому как шифрование в самошифрующихся дисках осуществляется отдельным AES чипом (без поддержки AES-NI все еще печальнее). Однако, скорости записи не особо критична, потому как при просмотре видео с Youtube, тот же iostat -d показывает, что на диск пишется в среднем... 600кб/сек. При скачивании файлов из интернета мы ограничены скоростью соединения, которая явно меньше 3000Mb/s, а вот при копировании файлов скорость сначала будет высокой, а потом упадет из-за перенагрева чипа. Если для вас критична скорость записи...
Результаты моих тестов:
# Samsung SSD 980 500GB + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 7.26142 s, 1.2 GB/s
# WD Blue SN550 NVMe SSD, LUKS + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct 
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 16.6447 s, 516 MB/sСтоит упомянуть, что значительная часть SATA SSD поддерживает «установку пароля через BIOS», но выглядит это как ворота на замке без забора посреди чистого поля, так как эти пароли часто хранятся в открытом виде (наглядно), либо есть сервисный мастер пароль (см. тут)... и в конце-концов можно тупо перепаять контроллер. К шифрованию это не имеет никакого отношения.
IN SOVIET RUSSIA ИСПОЛЬЗОВАТЬ ШИФРОВАНИЕ ДАННЫХ НА ДИСКАХ НУЖНО ВСЕГДА ЧТОБЫ НЕ СЕСТЬ НА 🍾!
Следует отметить, что данные на самошифоующихся данных шифруются всегда, но отключен запрос пароля. Пароли администратора и пароль от SID устанавливаются на заводе и нигде не указаны.
Сначала нужно скачать и записать на флешку live-образ.
Грузимся с live и далее все действия выполняем с него.
Установка пароля и запись PBA.
$ sedutil-cli --scan
Scanning for Opal compliant disks
/dev/nvme1  2  Samsung SSD 970 EVO 250GB                2B2QEXE7
# для того чтобы задать новый пароль (взамен заводского)
# нужно выполнить PSID Revert, так как будет сгенерирован новый ключ
# шифрования, но СТАРЫЕ ДАННЫЕ БУДУТ ФАКТИЧЕСКИ УТЕРЯНЫ
# PSID указан на наклейке SSD 
$ sedutil-cli --PSIDrever <PSID> /dev/nvme1n1
# задаем временный пароль
$ sedutil-cli --initialSetup p /dev/nvme1n1На live уже есть PBA, который нужно записать на диск.
$ gunzip /usr/sedutil/UEFI64-1.15.1.img.gz 
$ sedutil-cli --loadPBAimage p /usr/sedutil/UEFI64-1.15.1.img /dev/nvme1n1Включаем блокировку диска и запрос пароля после отключения питания:
$ sedutil-cli --enableLockingRange 0 p /dev/nvme1n1
$ sedutil-cli --setMBREnable on p /dev/nvme1n1  Теперь можно поставить настоящий пароль:
$ sedutil-cli --setsidpassword p <your-password> /dev/nvme1n1
$ sedutil-cli --setadmin1pwd p <your-password> /dev/nvme1n1PS: пароль администратора может отличаться от SID пароля
Для разблокировки:
$ sedutil-cli --disableLockingRange 0 <your-password> /dev/nvme1n1
$ sedutil-cli --setMBREnable off <your-password> /dev/nvme1n1  Теперь можно вытащить флешку и выключить питание...
Примечание: в AUR есть sedutil-cli, установить его после завершения установки Arch Linux.
Ссылки:
Есть стандартная утилита для установки Arch Linux. Достаточно просто вбить arch-install в терминале, но лучше все слелать вручную, так как все нижеописанные действия предстоит проделывать не единожды.
Если вы подключены от провода, то ничего настраивать не надо.
Для Wi-Fi нужно выполнить ряд действий:
$ iwctl
# Получим список сетевых интерфейсов
[iwd]# device list
                           Devices
-------------------------------------------------------------
  Name          Address          Powered    Adapter    Mode
-------------------------------------------------------------
  wlan0         ...              on         ...        ...
# Сначала просканируем сети
[iwd]# station <interface> scan
# А потом посмотрим все сети к которым можно подключиться
[iwd]# station <interface> get-networks
                               Available networks                             *
--------------------------------------------------------------------------------
    Network name                    Security          Signal
--------------------------------------------------------------------------------
    ...  
    <sid>                           psk               ****
# Подключаемся
[iwd]# station wlan0 connect <sid>Проверка:
$ ping -c5 ya.ruПеред установкой желательно обновить базу пакетов и pgp-ключей для проверки подписи пакетов:
$ pacman -Sy archlinux-keyringДля Btrfs лучше всего подходит SSD.
Смотрим список и разделов и устройств:
fdsik -lПусть нам нужно поставить систему на nvme0n1.
Размечаем диск под систему, руководствуясь правилом от большего к меньшему:
cfdisk nvme0n1 Должно получиться что-то типа этого:
| раздел | точка монтирования | тип файловой системы | размер | описание | 
|---|---|---|---|---|
| nvme0n1p1 | / | btrfs | Весь объем минус размер efi/boot | arch linux | 
| nvme0n1p2 | /boot | vfat | 512 MiB-1 GiB | загрузочный раздел | 
Размещая тот же boot в конце диска, мы сможем в последующем менять его размер, откусывая место от предыдущего.
Если у вас уже установлена Windows, пропускайте шаг с форматированием загрузочного раздела.
Форматируем загрузочный раздел:
mkfs.vfat -F32 -n ESP /dev/nvme0n1p2Созданному разделу нужно выставить флаг boot, чтобы UEFI с него грузилось:
$ parted /dev/nvme0n1  
GNU Parted 3.5
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
...
 2      499GB   500GB  1074MB  fat32        Boot        msftdata
(parted) set 2 boot on                                                    
(parted) q                                                                
Information: You may need to update /etc/fstab.Если ваш диск не поддерживает аппаратное шифрование либо оно вам не подходит по каким-то причинам...
Создаем шифрованный раздел:
cryptsetup -q -i 15000 luksFormat /dev/nvme0n1p1С помощью --cipher можно указать алгоритм шифрования, если не устраивает дефолтный.
-i, --iter-time — это время в миллисекундах, которое требуется процессору на расшифровку ключа.
Производительность различных алгоритмов можно протестировать:
$ cryptsetup benchmark                                              
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      2475976 iterations per second for 256-bit key
PBKDF2-sha256    4665521 iterations per second for 256-bit key
PBKDF2-sha512    1859177 iterations per second for 256-bit key
PBKDF2-ripemd160  972705 iterations per second for 256-bit key
PBKDF2-whirlpool  752206 iterations per second for 256-bit key
argon2i      11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id     11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b      1353.5 MiB/s      5450.8 MiB/s
    serpent-cbc        128b       124.9 MiB/s       918.1 MiB/s
    twofish-cbc        128b       247.8 MiB/s       468.1 MiB/s
        aes-cbc        256b      1009.3 MiB/s      4422.6 MiB/s
    serpent-cbc        256b       128.4 MiB/s       922.5 MiB/s
    twofish-cbc        256b       252.1 MiB/s       468.0 MiB/s
        aes-xts        256b      4542.7 MiB/s      4508.0 MiB/s
    serpent-xts        256b       787.7 MiB/s       802.5 MiB/s
    twofish-xts        256b       443.9 MiB/s       449.0 MiB/s
        aes-xts        512b      3688.6 MiB/s      3750.5 MiB/s
    serpent-xts        512b       826.0 MiB/s       812.8 MiB/s
    twofish-xts        512b       449.7 MiB/s       449.1 MiB/sИ открываем шифрованный раздел:
cryptsetup luksOpen /dev/nvme0n1p1 cryptПоследний аргумент это имя под под которым блочное устройство будет доступно в /dev/mapper.
Создаем на шифрованном разделе файловую систему Btrfs:
mkfs.btrfs -n 32k -L arch ARCH_DEVICE-n указываем размер узла дерева в котором хранятся данные. Чем он больше, тем лучше сжимается...
- Тут и далее вместо 
ARCH_DEVICEуказываем/dev/mapper/cryptпри использовании LUKS либо просто/dev/nvme0n1p1. 
Btrfs ‒ это одна из самых продвинутых файловых систем в Linux. Многие считают ZFS достойной альтернативой, но она не включена в ядро. Btrfs поддерживает механизм CoW (copy-on-write), создание снапшотов и сжатие данных... Снапшоты — это снимки файловой системы, точки для восстановления. Сжатие данных позволяет экономить место на диске, отказаться от использования архивов, но различные форматы изображений и видео и так поддерживают сжатие, поэтому оно не всегда полезно. За 4 года использования Btrfs я не сталкивался с какими-то критическими багами, и она меня не раз спасали от утраты данных. Простой пример: sudo rm -rf /<тут закрался пробел>.
В Btrfs нет привычных разделов, есть только подтома, которые можно сравнить с обычными каталогами. У них нет фиксированного размера, однако его можно ограничить с помощью quota. Снапшоты, если упускать некоторые детали, являются теми же самыми подтомами, те их можно монтировать и выполнять аналогичные операции.
Монтируем RootFS:
mount ARCH_DEVICE /mntВозможные сабвольюмы:
| subvolume | mount | описание | 
|---|---|---|
@ | 
/ | 
Корневой каталог (системные файлы) | 
@home | 
/home | 
Домашний каталог с пользовательскими данными. Нужен отдельный так как при откате системы к предыдущему состоянию очень важно сохранить существующий прогресс (куки браузера, конфиги, документы, файлы проектов и т.д.) | 
@snapshots | 
/.snapshots | 
Содержит снапшоты корня, которые создает snapper | 
@home.snapshots | 
/home/.snapshots | 
Содержит снапшоты хомяка, которые создает snapper | 
@machines | 
/var/lib/machines | 
Если не существует, то создаст systemd | 
@portables | 
/var/lib/portables | 
Если не существует, то создаст systemd | 
@docker | 
/var/lib/docker | 
Рекомендации самого Docker с их сайта | 
@docker_btrfs | 
/var/lib/docker/btrfs | 
Docker создает саьвольюмы по этому пути | 
@var_lib | 
/var/lib | 
Вместо создания @machines, @portables, @docker можно создать только этот, если в /var/lib не будет храниться чего-то важного (предполагается, что будут делаться снапшоты только корня и/или хомяка) | 
@var | 
/var | 
Аналогично выше описанному | 
@var_log или просто @log | 
/var/log | 
Логи как правило не представляют интереса, но в снапшотах занимают дополнительное место | 
@swap | 
/swap или /var/swap, или /var/lib/swap | 
Хранит файл подкачки. Должен монтироваться с nodatacow | 
Подтома @machines, @portables, @.snapshots, @home.snapshots и @docker (опционально при использовании docker) нужны чтобы не заморачиваться с переносом вложенных подтомов при замене старого подтома на снапшот. Однако, вся эта плоская структура подтомов скорее нужна на серверах. Чтобы не заморачиваться я словетую использовать Btrfs Asssistant.
Создаем нужные подтома:
btrfs sub create /mnt/@
btrfs sub create /mnt/@homeОтмонтируем RootFS:
umount /mntМонтируем подтома и загрузочный раздел:
mount -o compress=zstd:9,subvol=@ ARCH_DEVICE /mnt
# Используем более закрытые права на каталог
mkdir -m 700 /mnt/boot
mount BOOT_DEVICE /mnt/boot
# x-mount.mkdir создает несуществующую директорию
mount -o x-mount.mkdir,compress=zstd:9,subvol=@home ARCH_DEVICE /mnt/homeЧерез двоеточие указывается уровень сжатия. Для десктопа лучшим является 9, обеспечивающий 15x максимальное сжатие. При нем скорость записи падает до 100 MiB/s, но при скачивании файлов из сети у нас скорость ~12 MiB/s (100 MBit/s)... Нам важна только скорость чтения, а она не падает меньше 2 GiB/s, те примерно равна скорость записи SSD (и не должна быть меньше нее в идеале). Протестировать уровни сжатия можно так:
$ zstd -T0 -b1 -e19
 1#Synthetic 50%     :  10000000 ->   3152996 (x3.172), 2539.0 MB/s, 2642.0 MB/s
 2#Synthetic 50%     :  10000000 ->   3129011 (x3.196), 1169.9 MB/s, 2647.2 MB/s
 3#Synthetic 50%     :  10000000 ->   3230491 (x3.096),  344.1 MB/s, 2115.2 MB/s
 4#Synthetic 50%     :  10000000 ->   3339961 (x2.994),  283.0 MB/s, 1899.2 MB/s
 5#Synthetic 50%     :  10000000 ->   3290137 (x3.039),  162.8 MB/s, 1788.2 MB/s
 6#Synthetic 50%     :  10000000 ->   3278503 (x3.050),  142.8 MB/s, 1823.8 MB/s
 7#Synthetic 50%     :  10000000 ->   3321448 (x3.011),  133.6 MB/s, 1696.6 MB/s
 8#Synthetic 50%     :  10000000 ->   3315141 (x3.016),  118.1 MB/s, 1696.1 MB/s
 9#Synthetic 50%     :  10000000 ->   3355994 (x2.980),   94.3 MB/s, 1573.8 MB/s
10#Synthetic 50%     :  10000000 ->   3363166 (x2.973),   68.0 MB/s, 1593.6 MB/s
11#Synthetic 50%     :  10000000 ->   3363170 (x2.973),   43.5 MB/s, 1590.3 MB/s
12#Synthetic 50%     :  10000000 ->   3362882 (x2.974),   36.2 MB/s, 1577.1 MB/s
13#Synthetic 50%     :  10000000 ->   3354692 (x2.981),   14.2 MB/s, 1610.2 MB/s
14#Synthetic 50%     :  10000000 ->   3354678 (x2.981),   15.0 MB/s, 1605.5 MB/s
15#Synthetic 50%     :  10000000 ->   3353801 (x2.982),   11.5 MB/s, 1597.6 MB/s
16#Synthetic 50%     :  10000000 ->   3080678 (x3.246),   10.3 MB/s, 2535.2 MB/s
17#Synthetic 50%     :  10000000 ->   3136878 (x3.188),   3.63 MB/s, 2184.5 MB/s
18#Synthetic 50%     :  10000000 ->   3145664 (x3.179),   3.73 MB/s, 2066.9 MB/s
19#Synthetic 50%     :  10000000 ->   3140424 (x3.184),   3.04 MB/s, 2101.9 MB/sУстановим ядро, драйвера и базовый набор пакетов:
pacstrap /mnt base base-devel linux linux-headers linux-api-headers linux-firmware btrfs-progs cryptsetup efibootmgr ntfs-3g exfat-utils git micro terminus-font wget xorg zshДобавьте к этому списку xf86-video-amdgpu для видеокарт AMD  или nvidia. А так же патчи безопасности для процессоров:  amd-ucode или intel-ucode.
А теперь сгенерируем fstab, файл который содержит указания системы что и куда монтировать при загрузке:
genfstab -U /mnt | sed 's/,relatime/,noatime,commit=300,discard=async/' >> /mnt/etc/fstabТут мы изменили с целью оптимизации некоторые параметры монтирования:
- Каждый раз когда мы открываем файл, записывается время его изменения, 
noatimeзапрещает запись времени модификации файла. - Btrfs хранит кеш в оперативной памяти и сбрасывает его на диск через интервал указанный в секундах в параметре
commit. discard=asyncпредотвращает микрофризы при выполнении TRIM.
Первые два параметра продлевают ресурс SSD.
Делаем chroot и "грузимся" в систему:
arch-chroot /mntРедактируем /etc/locale.gen:
$ micro /etc/locale.genНужно найти и расскоментировать (убрать в начале #) сл строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Генерируем локали:
$ locale-gen
Generating locales...
  ru_RU.UTF-8... done
  en_US.UTF-8... done
Generation complete.Задаем локаль по-умолчанию:
localectl set-locale LANG=en_US.UTF-8
# системная локаль
echo LANG=en_US.UTF-8 > /etc/locale.conf
# или
locale > /etc/locale.confСмотрим список раскладок клавиатуры для консоли Linux (та в которую можно попасть, нажав Ctrl + Alt + F1-6):
localectl list-keymaps | grep ruЗагружаем раскладку:
loadkeys ruwin_ct_sh-UTF-8Теперь мы можем по ctrl+shift переключать раскладку с английской на русскую.
Посмотрим шрифты для консоли:
ls /usr/share/kbd/consolefonts | lessЗагрузим какой-нибудь шрифт с поддержкой кириллицы:
# 1080p
setfont ter-v14n
# 4k
setfont ter-v18bЭти настройки нужно сохранить:
echo 'KEYMAP="ruwin_ct_sh-UTF-8"' >> /etc/vconsole.conf
 
# либо так
localectl set-keymap --no-convert ruwin_ct_sh-UTF-8
# И сохраняем шрифт
echo 'FONT="ter-v18n"' >> /etc/vconsole.confИщем нужную временную зону:
$ timedatectl list-timezones | grep Mosc
Europe/MoscowЗадаем временную зону:
timedatectl set-timezone 'Europe/Moscow'Включаем синхронизацию времени с NTP-сервером:
timedatectl set-ntp trueОпционально устанавливаем часы компьютера:
hwclock --systohcВ имени хоста можно использовать латинские символы, цифры, -, _, ....
В качестве имени хоста можно указать:
- если у вас сервер, то доменное имя;
 - username-laptop или username-pc username-LaptopModel, username-archlinux или username-arch;
 - фамилию, кличку, звезду, планету... случайны набор символов;
 - не указывать его, оставив по умолчанию archlinux.
 
Имя хоcта нужно для вашей идентификации в локальной сети. Это имя можно использовать вместо локального ip-адреса, который может измениться. Например, вы можете через VPN подключиться к локальной сети в офисе, а далее через ssh your_hostname к своей машине...
hostnamectl set-hostname YOURHOSTNAMEРедактируем хосты:
micro /etc/hostsСодержимое должно быть примерно таким:
127.0.0.1       localhost
::1             localhost
127.0.1.1       <YOUR_HOSTNAME>.localdomain <YOUR_HOSTNAME>
# строки ниже опциональны и приведены в примере из man
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allroutersDracut является альтернативой mkinitcpio, который идет по умолчанию. Он автоматизирует все действия, описанные в разделе Mkinitcpio.
Для его использования:
pacman -S dracut
pacman -Rns mkinitcpioДля генерации initramfs:
dracut -f /boot/initramfs-linux.img $(uname -r)Проверьте чтобы в образе был модуль crypt, если используете LUKS:
lsinitrd /boot/initramfs-linux.img | grep cryptЕсли нужно добавьте хук crypt:
mkdir -p /etc/dracut.conf.d
echo 'add_dracutmodules+=" crypt "' > /etc/dracut.conf.d/crypt.confLinux грузится с помощью образа initramfs: сначала файловая система монтируется в оперативную память (Initial-RAM-File-System), загружаются драйвера, монтируется реальная файловая система, и наконец мы получаем возможность войти в систему.
Редактируем настройки образа в файле /etc/mkinitcpio.conf:
nano /etc/mkinitcpio.confДобавьте драйвера видеокарт в образ:
# AMD
MODULES=(amdgpu)
# или NVIDIA
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
# или встройка AMD + дискретка NVIDIA
MODULES=(amdgpu nvidia nvidia_modeset nvidia_uvm nvidia_drm)Добавление видеодрайверов позволяет решить проблем с редактированием конфигов при подключении мониторов, запуске игр игр на дискретке...
ВАЖНО!!!!!! В хуки добавляем btrfs и encrypt (при исп LUKS) до filesystems:
HOOKS=(... encrypt btrfs filesystems ...)
Хуки — это скрипты с функцией run_hook, которые выполняются последовательно при загрузке initrmafs.
Изменим дефолтный уровень сжатия для zstd:
# COMPRESSION_OPTIONS
# Additional options for the compressor
COMPRESSION_OPTIONS=(-T0 -15)Теперь сгенериреум образ:
mkinitcpio -PСоздаем пользователя:
useradd -m -G users -s /bin/zsh <YOUR_USERNAME>-m‒ создать каталог пользователя в/home;-G‒ дополнительные группы, передаваемые через запятую. Добавив себя в группуsystemd-journal, вы сможете без sudo просматривать логи с помощьюjournalctl...
Устанавливаем для него пароль:
$ passwd <YOUR_USERNAME>
New password: 
Retype new password:
passwd: password updated successfully
В целях безопасности лочим пользователя root, чтобы из под него нельзя было авторизоваться:
$ passwd -l root
passwd: password changed.Разрешаем sudo для себя (одноименной группы, создаваемой по умолчанию):
echo '%<YOUR_USERNAME> ALL=(ALL:ALL) ALL' > /etc/sudoers.d/<YOUR_USERNAME>Так же можем отредактировать sudoers, разрешив пользователям в группе wheel доступ к sudo:
$ micro /etc/sudoers
# Нужно найти раскомментировать строку:
%wheel ALL=(ALL:ALL) ALLЧасто в инструкциях пользователя добавдяют в группу sudo. Группы wheel и sudo делают одно и то же: дают доступ к выполнению команды sudo. Так уж исторически сложилось, что в debian-based дистрибутивах используют группу sudo, а в RHEL ‒ wheel.
Загружаться мы будем через systemd-boot. Для этого установим EFI:
bootctl installСоздаем загрузочную запись. Для начала сохраним PARTUUID шифрованного раздела в конфиг, так как его запомнить проблематично:
blkid -o value -s PARTUUID /dev/nvme0n1p1 > /boot/loader/entries/arch.confОтредактируем конфиг:
micro /boot/loader/entries/arch.confОн должен выглядеть примерно так:
title   Arch Linux
initrd  /amd-ucode.img
initrd  /initramfs-linux.img
linux   /vmlinuz-linux
options cryptdevice=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
Последняя строчка, если не используется LUKS будет выглядеть так:
options root=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
- Параметр 
nvme_core.default_ps_max_latency_us=0нужен для некоторых моделей SSD M.2. Без него файловая система через неопределенное время переходит вread only. initrd /amd-ucode.img- это подгрузка микрокодов процессора для исправления различных уязвимостей./amd-ucode.imgзаменяем на/intel-ucode.img.
Установите микрокоды проца (в зависимости от производителя):
pacman -Sy amd-ucode
# либо
pacman -Sy intel-ucodeНастроим загрузчик:
micro /boot/loader/loader.conftimeout 4
default arch.conf
console-mode max
editor no
/etc/environment — это лучшее место для задания переменных, которые будут установлены глобально для всех пользователей...
Сделаем редактором по-умолчанию micro для всех взамен старперского vim (мы его даже не стали устанавливать) из которого не могут выйти 95% пользователей Linux (<ESC>, :qa!, <Enter>).
echo 'EDITOR=nano' >> /etc/environmentПеременные окружения, которые должны быть доступны только для вас и приложений, запускаемых от вашего пользователя, в дальнейшем можно добавлять в ~/.zshenv, ~/.zlogin, ~/.xprofile, ~/.profile как export KEY=VALUE. Общие для всех переменные можно установить в сценариях /etc/profiles.d/<filename>.sh.
Если система стартует через systemd (со startx не будет работать), то пользовательские переменные окружения в виде KEY=VALUE можно установить в ~/.config/environments.d/<filename>.conf либо в /etc/environment.d/<filename>.conf (общие для всех).
pacman -Sy xfce4 xfce4-goodies network-manager-applet lightdm lightdm-gtk-greeter
systemctl enable lightdmПлюсы:
- Выглядит минималистично... как Gnome 2, форком которого он и стал, но Gnome за это время уже сменил кучу версий Gtk.
 - Легковесность — пакеты занимают мало места, и система потребляет мало ресурсов. В xfce по умолчанию менее 900 пакетов в то время как для KDE или Gnome их нужно на треть больше...
 - Стабильность: разработчики что-то ломают нечасто.
 
Минусы:
- Вытекают из стабильности: баги не исправляют годами. Например, тот же gnome-keyring, будет у вас упорно запрашивать пароль даже если для связки ключей вы установите тот же пароль, что и для пользователя (эта проблема решается именно так в Gnome).
 - Многие простые вещи, например, создание ярлыка на рабочем столе, требуют кучу дополнительных телодвижений (нужно создать Launcher, указать имя, выбрать исполняемый файл и иконку для него).
 - Трудность настройки.
 - Ограниченная поддержка HDPi.
 - Не поддерживает Wayland (тут сомнительный минус, так как последний скорее всего так никогда и не победит иксы).
 - Нет расширений как в Gnome, есть убогий аналог Plasmoid'ов.
 
Заключение: все так себе, но жить можно. Некоторые делают из Xfce конфетку, выбрасывая стандартные панели и пр.
pacman -S gnome gnome-extra
systemctl enable gdmПлюсы:
- Закос под MacOS с довольно таки минималистичным интерфейсом;
 - Лучшая поддержка Wayland;
 - Сам Gnome ломается редко в отличии от расширений...
 
Минусы:
- Без расширений не очень удобен в использовании.
 - Расширения ломаются после каждого обновления.
 - Нужно отдельно настраивать внешний вид для приложений под Qt, например, ч/з Kvantum.
 - Потребляет ресурсов не меньше чем Windows.
 
Заключение: не с проста во многих дистрибутивах является DE по умолчанию, например, в Ubuntu, Fedora, что говорит о доверии со стороны разработчиков дистрибутивов, подтверждает тезис о стабильной работе самой системы, но не сторонних расширений...
pacman -S plasma kde-applications
systemctl enable sddmПлюсы:
- Похож на Windows 10.
 - Темы можно устанавливать глобально для Qt и Gtk приложений.
 - Настройка почти всего без ковыряния текстовых конфигов! Огромное количество настроек.
 
Минусы:
- Постоянные баги.
 - С поддержкой Wayland проблемы.
 - Потребляет много ресурсов примерно как Gnome.
 
Заключение: поддержка Wayland обычным пользователям не нужна, а с большинством багов можно смириться + Steam Deck работает на KDE Plasma, а значит есть надежда, что баги будут исправляться быстрее, как и появляться новые фичи, так как Габен занесет денег...
Включим менеджер сети:
systemctl enable NetworkManagerМожно не выходить, а выполнить что-то типа:
startx
systemctl start gdm
systemctl start sddmНо если хочется проверить загрузку...
Выходим из chroot:
exitТеперь можно перегрузиться и вытащить флешку:
rebootГлавное преимущество Arch Linux в AUR.
Часть популярных пакетов из AUR содержится в репозитории archlinuxcn.
Для его подключения добавьте в /etc/pacman.conf:
[archlinuxcn]
Server = https://repo.archlinuxcn.org/$archЗатем обновите список пакетов и импортируйте GPG-ключи:
sudo pacman -Sy && sudo pacman -S archlinuxcn-keyringОчень осторожно используйте пакеты напрямую из AUR!!! При прочих равных графическое приложение лучше установить через flatpak.
Существуют пакетные менеджеры с поддержкой AUR. Раньше для этих целей использовали yaourt, но за прошедшие годы последний уступил пальму первенства yay (одноименный пакет в archlinuxcn).
Ручная установка yay:
$ cd /tmp
$ git clone https://aur.archlinux.org/yay-bin
$ cd yay-bin
$ makepkg -siЯдру Linux, независимо от размера оперативной памяти, нужно периодически сбрасывать страницы памяти в SWAP.
Для экономии ресурса SSD SWAP можно размещать в сжатом виде в оперативной памяти (ZRAM).
Установка:
$ yay -S zram-generator-git zram-generator-defaultsВключение ZRAM:
$ sudo systemctl restart systemd-zram-setup@zram0Рекомендованные настройки SWAP для SSD:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness=100
vm.vfs_cache_pressure=10
Применяем настройки:
$ sudo sysctl --systemОчень удобная вещь для разворачивания приложений. Требует минимум настройки и система не засирается хвостами.
$ yay -S docker docker-compose
# Добавим пользователя в группу docker, чтобы использовать команду docker без sudo
$ sudo usermod -aG docker $USER
# Перегрузимся
$ rebootЮсаге:
# (Пере)собрать и запустить контейнеры
$ docker-compose up -d
# Остановить контейнеры
$ docker-compose stop
# Запустить остановленные ранее контейнеры
$ docker-compose start
# Остановить и удалить контейнеры
$ docker-compose downdocker-compose.yml:
version: '3.9'
services:
  postgres:
    container_name: postgres
    image: postgres:alpine
    env_file: .env
    networks:
      - internal
    ports:
      - '54320:5432'
    restart: unless-stopped
    volumes:
      - ./data/postgres:/var/lib/postgresql/data:rw
  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    depends_on:
      - postgres
    env_file: .env
    networks:
      - internal
    ports:
      - "5050:80"
    restart: unless-stopped
    volumes:
      - ./data/pgadmin:/var/lib/pgadmin:rw
  redis:
    container_name: redis
    image: redis:alpine
    networks:
      - internal
    ports:
      - "63790:6379"
    restart: unless-stopped
    volumes:
      - ./data/redis:/var/lib/redis:rw
networks:
  internal:.env:
POSTGRES_USER=docker
POSTGRES_PASSWORD=password
POSTGRES_DB=db
[email protected]
PGADMIN_DEFAULT_PASSWORD=adminВ pgadmin заходим через localhost:5050, в качестве имени хоста базы указываем имя сервиса, те postgres вместо традиционного localhost и порт 54320,
Snapper ‒ это менеджер снапшотов (снимков состояния файловой системы) для Btrfs. Он может их создавать/удалять по таймеру, а так же позволяет восстанавливать отдельные файлы.
$ yay -Sy snapperУстановим так же хук, который будет делать снапшоты после каждого обновления пакетов:
$ yay -S snap-pacСнапшоты делаются каждый час, если не переопределить это поведение:
$ systemctl edit snapper-timeline.timer
[Timer]
OnCalendar=<period>Настройки по-умолчанию предполагают слишком длительное хранение снапшотов, что может привести к постоянной проблеме нехватки места, если у вас SSD маленького объема.
Создаем новый шаблон файла конфигураций, чтобы не редактировать дефолтный:
$ cd /usr/share/snapper/config-templates
$ cp default config
$ micro configГде значения TIMELINE_LIMIT_<PRERIOD> указывают сколько хранить N последних снапшотов за час (HOURLY)/день (DAILY)/неделю (WEEKLY)/месяц (MONTHLY)/год (YEARLY).
Пример конфига:
...
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
...
Храним 10 последних за час и 7 ежедневных (хранится самый первый за день).
snapper -c root create-config -t config /
snapper -c home create-config -t config /homesystemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer# Смотрим номер последнего снапшота
sudo snapper -c <config> list -a
# Восстанавливаем файл
sudo snapper -c <config> undochange 0..<number> /path/to/fileЕсли не планируете пользоватся GUI, то может пригодиться...
В более сложных случаях может потребоваться восстановление системы:
$ sudo su
$ mount /dev/mapper/root /mnt
$ ls /mnt 
@ @home @.snapshots ...
$ cd /mnt
# Смотрим снапшоты
$ ls @.snaphosts
... 42 ...
# Переименовываем старый корневой сабвольюм
$ mv @ @old
# Помним, что snapshot и subvolume это одно и тоже, считай, а значит мы монтировать снапшот 
# Делаем снимок снапшота, по-сути копирем его, так как снапшоты, создаваемые snapper readonly
$ btrfs sub snap @.snaphots/42/snapshot @
# Редактируем fstab, если он содержит subvolid
# Ищем `subvol=/@` и удаляем `subvolid=N,`
$ micro @/etc/fstab
# Или же можно прописать subvolid
$ sudo btrfs sub show @ | grep 'Subvolume ID'
        Subvolume ID:           XXX
# Монтируем сабвольюм
$ mount -o remount /
# Теперь можно удалить @old
$ btrfs su de @oldЭто стандартная утилита для дистрибутива Garuda Linux (основан на Arch'е как Manjaro и пр. суррогаты). Графический менеджер для управления снапшотами и восстановления из них.
yay -S btrfs-assistant btrfsmaintenanceДля использования Btrfs Assistant не подходит плоская схема, при которой подтома со снапшотами (@snapshots, @home.snapshots и тп) монтируются в /.snapshots или /home/.snapshots. При восстановлении из снапшота, делает снапшот савольюма, а затем заменяет его на выбранный снапшот, все дочерние сабвольюмы и снапшоты перемещаются.
Все пакеты лучше ставить через стандартный пакетный менеджер, а графические приложения, не относящиеся к стандартным вашего DE — через Flatpak. AUR используем только в крайних случаях. Известные проблемы с Flatpak: VS Code (Zed прекрасно работает) из Flatpak не юзабелен, а в каком-нибудь Brave не возможно подключиться к Tor (исправили).
Графические приложения можно устанавливать через Flatpak. Приложения запускаются в изолированной среде, и они не имеют права на запись в системные каталоги хоста. Принцип работы схож с Docker. Если кратко: мы запускаем приложение в контейнере. Да, из контейнера можно запускать утилиты хоста через flatpak-spawn, но каталоги типа /usr, /bin, /etc и тп недоступны самому контейнеру для записи. Доступ к файлам осуществляется через порталы: показывается всплывающее окно для выбора файла, после чего тот монтируется в контейнер.
sudo pacman -S flatpak
# Так же нужно установить минимум два портала
sudo pacman -S xdg-desktop-portal-{kde,gtk}
flatpak install -y Krita Плюсы:
- Безопасность: приложения запускаются в контейнерах и имеют ограниченный доступ к файловой системе. Так же можно, например, ограничить доступ к сети.
 - Частичные, так называемые дельта-обновление - не нужно скачивать пакет целиком,  так как исп. 
ostree, работающий по тому же принципу, что иgit, те при обновлении скачиваются только различия между версиями. - Не нужна настройка, например, шрифтов как в Telegram и тд.
 - Зависимости идут в виде отдельных рантаймов, общих для других приложений в отличие от 
AppImage, где все-все зависимости идут с приложением. - Решает проблему с устаревшими зависимостями после обновления системы.
 
Минусы:
- Приложения запускаются дольше (не мгновенно).
 - Занимают дополнительное место за счет рантаймов. Например одновременно могу стоять две версии 
org.gnome.Platformи триorg.kde.Platform. - Нельзя доставить зависимости, например, те которые видим в выводе 
yay -Qi. Проблема со шрифтами. - Не работает интеграция с Gnome, KDE у того же Chromium.
 - Невозможно полноценно использовать IDE, установленные через 
Flatpakиз-за его ограничений. В качестве решения этой проблемы авторы советуют использоватьSdk.Extension. Например,flatpak install flathub org.freedesktop.Sdk.Extension.golangи запуск среды разработкиFLATPAK_ENABLE_SDK_EXT=golang flatpak run com.visualstudio.code. - В Telegram нельзя перетащить файл для отправки, если он где-то в 
/mnt. - Приложения в репозитории часто требуют больше прав чем им необходимо для работы.
 
Обновляет все подряд: пакеты pacman, AUR, Flatpak... образы Docker, плагины для ZSH и тд
$ yay -S topgrade
$ topgrade# Загрузочный раздел: /dev/nvme0n1p4
# EFI не удалено
efibootmgr -c -d /dev/nvme0n1 -p 4 -L "Linux Boot Manager" -l '\efi\boot\bootx64.efi'
# Удаление записи
efibootmgr -b 000X -B
# Список записей, порядок загрузки и тп
efibootmgr -v
# Смена порядка. См вывод предыдущей команды
efibootmgr -o 0002,0001,...Проблема: после установки/обновления Windows пропадает загрузочная запись Linux.
Запускаем терминал (Windows Terminal) от имени администратора (Win+X, Alt+A) и выполняем:
PS C:\Users\yourname> bcdedit /copy '{bootmgr}' /d "Arch Linux Boot"
The entry was successfully copied to {6c4580c1-e401-11ec-b643-089798e96d74}.
PS C:\Users\yourname> bcdedit /set '{6c4580c1-e401-11ec-b643-089798e96d74}' path \efi\boot\bootx64.efi
The operation completed successfully.
PS C:\Users\yourname> bcdedit /set '{fwbootmgr}' displayorder '{6c4580c1-e401-11ec-b643-089798e96d74}' /addfirst
The operation completed successfully.
PS C:\Users\yourname>Скачайте образ Windows с сайта Microsoft.
Если у вас есть флешка с Ventoi и Windows, то пропускаем запись загрузочной флешки.
Установите утилиту для создания загрузочных флешек для Windows:
$ yay -S woeusbЗаписываем образ:
$ sudo woeusb --device ~/Downloads/Windows...iso /dev/sdXТеперь нам нужно загрузиться с флешки с Windows, проделав операции по смене приоритетов...
Либо можно почитать man efibootmgr.
Грузимся с флешки, ожидаем пока закончится загрузка Windows и нажимаем Shift + F10. Откроется консоль.
В консоли выполняем следующее:
> diskpart
DISKPART> list volume
:: Смотрим, где у нас установлена Windows
:: Если вы установили, Arch Linux на другой диск, то удалите загрузочный раздел винды (но не сам раздел с Windows! см. `help`)
DISKPART> exit
:: Устанавливаем Windows EFI на загрузочный раздел
> bcdboot c:\windowsSSD не живут вечно, у них есть ресурс перезаписи, который в зависимости от типа памяти (SLC, MLC, TLC или QLC, где первая буква количтсво бит на ячейку 1-4) может составлять от 10000 до 2500 перезаписей ячеек. Но очень часто SDD умирают, даже не выработав его. К этому приводит неожиданная смерть контроллера. Смерть контроллера означает невозможность восстановлкения данных! Поэтому, если на вашем диске хранится что-то важное, что нельзя беекапить в облако, то лучше докупить диск и запихнуть его в зеркальный RAID.
# Создаем raid
# Используем flag --metadata=1.0, чтобы супер-блок располагался в конце диска
mdadm -v --create --metadata=1.0 /dev/md0 -l 1 -n 2 missing /dev/nvme1n1p1
# Создаем файловую систему на /dev/md0 и тп
# Монтируем созданный raid
mount ... /dev/md0 /mnt
# Копируем данные с раздела /dev/nvme0n1p1 помощью rsync'a
rsync -avh ... /mnt
# Добавляем его в массив
mdadm --add /dev/md0 /dev/nvme0n1p1
# Ждем пока данные синхронизируются
watch -n 1 /proc/mdstat
# Сохраняем конфиг
mdadm --verbose --detail --scan >> /etc/mdadm.confХуки /etc/mkinitcpio.conf:
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole block mdadm_udev sd-encrypt filesystems fsck)mdadm_udev
У меня используется RAID-1 > LUKS > Btrfs.
options md=0,/dev/nvme0n1p1,/dev/nvme1n1p1 rd.luks.name=f2233ed8-fbe6-4199-890a-d416c7a2a62b=root root=/dev/mapper/root rootflags=rw,subvol=@sudo mdadm --misc --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Oct 25 00:17:13 2023
        Raid Level : raid1
        Array Size : 487455744 (464.87 GiB 499.15 GB)
     Used Dev Size : 487455744 (464.87 GiB 499.15 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
     Intent Bitmap : Internal
       Update Time : Fri Oct 27 04:30:48 2023
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0
Consistency Policy : bitmap
              Name : sergey-arch:0  (local to host sergey-arch)
              UUID : 17332b2d:1685f236:6e28b36e:277f39cf
            Events : 20482
    Number   Major   Minor   RaidDevice State
       0     259        3        0      active sync   /dev/nvme1n1p1
       1     259        6        1      active sync   /dev/nvme0n1p1























Jupyter Notebook/Lab
В Юпитере работать удобнее чем в терминале. Он может рисовать графики прямо в консоли. Де-факто стандарт в мире датасасенса (потому что в курсах учат пользоваться именно им).
Установка:
Запуск:
Shift + Right Mouse Click вызов браузерного меню.
Как использовать виртуальные окружения?
Для этого нужно создать виртуальное окружение и установить в него Юпитер:
Далее мы ставим в это окружение все необходимые в работе модули.
При создании нового Notebook в списке Select Kernel выбираем Start Other Kernel myenv.
Для удаления:
Все ядра:
~ ❯ jupyter kernelspec list Available kernels: python3 /usr/share/jupyter/kernels/python3