303 lines
14 KiB
Markdown
303 lines
14 KiB
Markdown
# 1) GPT + ESP + root
|
||
parted -a optimal /dev/vda mklabel gpt
|
||
parted /dev/vda mkpart ESP fat32 1MiB 513MiB
|
||
parted /dev/vda set 1 esp on
|
||
parted -a optimal /dev/vda mkpart rootfs ext4 513MiB 100%
|
||
|
||
# 2) На всякий случай перечитать таблицу (обычно хватает одного)
|
||
partprobe /dev/vda # перечитать partition table без ребута [web:137]
|
||
# (альтернатива, если вдруг /dev/vda2 не появился)
|
||
# partx -u /dev/vda && udevadm settle
|
||
|
||
# 3) ФС
|
||
mkfs.fat -F 32 /dev/vda1
|
||
mkfs.ext4 -L gentoo-root /dev/vda2
|
||
|
||
# 4) Монтирование
|
||
mount /dev/vda2 /mnt/gentoo
|
||
mkdir -p /mnt/gentoo/boot/efi
|
||
mount /dev/vda1 /mnt/gentoo/boot/efi
|
||
cd /mnt/gentoo
|
||
|
||
# 5) stage3
|
||
|
||
Да: **сначала нужно скачать stage3**, а уже потом выполнять `tar xpvf ...` (в каталоге `/mnt/gentoo`). Команда `tar ...` просто распаковывает tarball stage3 в будущий rootfs, после этого следующий шаг — подготовить `make.conf`, смонтировать `/proc /sys /dev /run` и зайти в chroot (там уже будет `emerge`).[1][2]
|
||
|
||
## Шаг 1 — скачать stage3 (OpenRC, headless)
|
||
Ты сейчас в `/mnt/gentoo`, это правильно. Дальше:
|
||
|
||
```sh
|
||
cd /mnt/gentoo
|
||
wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/latest-stage3-amd64-openrc.txt
|
||
cat latest-stage3-amd64-openrc.txt
|
||
```
|
||
В этом файле будет имя актуального tarball’а (строка с `stage3-amd64-openrc-...tar.xz`).[1]
|
||
|
||
Скачать сам tarball (подставь имя из файла):
|
||
```sh
|
||
wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/<ИМЯ_ТАРБОЛЛА>.tar.xz
|
||
wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/<ИМЯ_ТАРБОЛЛА>.tar.xz.DIGESTS
|
||
```
|
||
|
||
## Шаг 2 — распаковать stage3
|
||
Теперь да, выполняешь:
|
||
|
||
```sh
|
||
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
|
||
```
|
||
|
||
Эта команда — стандартный способ распаковки stage3 с сохранением xattrs и владельцев.[3][1]
|
||
|
||
## Шаг 3 — базовая подготовка до chroot
|
||
1) DNS в будущую систему:
|
||
```sh
|
||
cp -L /etc/resolv.conf /mnt/gentoo/etc/
|
||
```
|
||
|
||
2) (Опционально, но обычно делают сразу) `make.conf` пока хотя бы с `MAKEOPTS`:
|
||
```sh
|
||
nano -w /mnt/gentoo/etc/portage/make.conf
|
||
# например:
|
||
# MAKEOPTS="-j6"
|
||
```
|
||
`/etc/portage/make.conf` — основной файл глобальных настроек Portage.[4]
|
||
|
||
## Шаг 4 — смонтировать псевдо-ФС и зайти в chroot
|
||
```sh
|
||
mount -t proc /proc /mnt/gentoo/proc
|
||
mount --rbind /sys /mnt/gentoo/sys
|
||
mount --make-rslave /mnt/gentoo/sys
|
||
mount --rbind /dev /mnt/gentoo/dev
|
||
mount --make-rslave /mnt/gentoo/dev
|
||
mount --bind /run /mnt/gentoo/run
|
||
mount --make-slave /mnt/gentoo/run
|
||
|
||
chroot /mnt/gentoo /bin/bash
|
||
source /etc/profile
|
||
export PS1="(chroot) ${PS1}"
|
||
```
|
||
Такой набор монтирований — типовой для корректной работы внутри chroot (установка пакетов, udev-сокеты и т.д.).[2]
|
||
|
||
Скажи, на каком шаге остановишься (скачал/распаковал stage3 или уже вошёл в chroot) — и дальше дам точный минимальный набор команд: профиль, `emerge --sync`, базовые пакеты (dhcpcd+netifrc+openssh), kernel + GRUB под UEFI.
|
||
|
||
[1](https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/)
|
||
[2](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Handbook_AMD64/Installation/Base/de.html)
|
||
[3](https://www.reddit.com/r/Gentoo/comments/z3lmdq/first_time_installing_gentoo/)
|
||
[4](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/etc/portage/make.html)
|
||
[5](https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-nomultilib-openrc/)
|
||
[6](https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-desktop-openrc/)
|
||
[7](https://mirrors.mit.edu/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64-openrc/)
|
||
[8](https://mirror.telepoint.bg/gentoo/releases/amd64/autobuilds/current-stage3-amd64-desktop-openrc/)
|
||
[9](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Handbook_AMD64/Installation/Base/ja.html)
|
||
[10](http://gentoo.osuosl.org/releases/amd64/autobuilds/)
|
||
[11](https://www.youtube.com/watch?v=HwY0IMfiiTA)
|
||
[12](http://www.mirrorservice.org/sites/distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/)
|
||
[13](https://www.reddit.com/r/linuxquestions/comments/16lublb/issue_w_gentoo_ab_halfway_through_installation/)
|
||
[14](https://www.reddit.com/r/Gentoo/comments/1acnqma/recover_from_gentoo_installation_mistake/)
|
||
[15](http://mirrors.lug.mtu.edu/gentoo/releases/amd64/autobuilds/)
|
||
[16](https://soso-cod3v.tistory.com/168)
|
||
[17](https://stephane-cheatsheets.readthedocs.io/en/latest/distros/gentoo-based/gentoo_installation/)
|
||
[18](https://mirror.kumi.systems/gentoo/releases/amd64/autobuilds/current-stage3-amd64-desktop-openrc/)
|
||
[19](https://www.reddit.com/r/linux/comments/ndvutp/tutorial_encrypted_gentoo_installation_guide/)
|
||
[20](https://www.scribd.com/document/86619356/Gentoo-Linux-AMD64-Handbook)
|
||
[21](http://ftp.riken.jp/Linux/gentoo/releases/amd64/autobuilds/)
|
||
|
||
Ты уже в chroot, значит дальше цель — чтобы система **первый раз загрузилась** и ты смог зайти по `ssh -p 2222 root@127.0.0.1`.
|
||
|
||
## Portage sync (репозиторий)
|
||
Сначала создай конфиг основного репозитория и синхронизируй дерево ebuild’ов:[1]
|
||
```sh
|
||
mkdir -p /etc/portage/repos.conf
|
||
cp /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf
|
||
emerge --sync
|
||
```
|
||
(Если `cp` ругнётся, покажи вывод `ls -la /usr/share/portage/config/` — подберём правильный путь.)
|
||
|
||
## Минимальная “голова” системы
|
||
Дальше быстрые обязательные настройки (без них можно, но потом больнее дебажить):
|
||
```sh
|
||
echo "Europe/Moscow" > /etc/timezone
|
||
emerge --config sys-libs/timezone-data
|
||
|
||
echo "gentoo-vm" > /etc/hostname
|
||
|
||
# локали (пример)
|
||
nano -w /etc/locale.gen # раскомментируй en_US.UTF-8 UTF-8 (и при желании ru_RU.UTF-8)
|
||
locale-gen
|
||
eselect locale list
|
||
eselect locale set <номер>
|
||
env-update && source /etc/profile
|
||
```
|
||
|
||
## Сеть + SSH на OpenRC (под твой SLiRP NAT)
|
||
Поставь минимальный сетевой стек и SSH:
|
||
```sh
|
||
emerge --ask net-misc/netifrc net-misc/dhcpcd net-misc/openssh
|
||
```
|
||
|
||
Настрой DHCP на интерфейсе (имя смотри так: `ip link`, обычно будет `enp0s1`/`eth0`):
|
||
```sh
|
||
IF=enp0s1 # поменяй на своё
|
||
ln -s /etc/init.d/net.lo /etc/init.d/net.${IF}
|
||
echo "config_${IF}=\"dhcp\"" >> /etc/conf.d/net
|
||
rc-update add net.${IF} default
|
||
rc-update add sshd default
|
||
```
|
||
Формат `config_<iface>="dhcp"` — это штатная схема netifrc.[2]
|
||
Если вообще ничего не прописывать, netifrc часто и так поднимает DHCP на интерфейсах без явной конфигурации, но лучше зафиксировать явно, чтобы было предсказуемо.[3]
|
||
|
||
## Ядро + GRUB (UEFI)
|
||
Тут два пути:
|
||
|
||
1) Самый быстрый для “headless и без приключений”: поставить готовое ядро (`sys-kernel/gentoo-kernel-bin`) и дальше GRUB.
|
||
|
||
2) Если хочешь кастом/zen — это отдельный длинный шаг, лучше после первого успешного SSH.
|
||
|
||
GRUB ставится по handbook примерно так (у тебя ESP смонтирован в `/boot/efi`):[4]
|
||
```sh
|
||
emerge --ask sys-boot/grub sys-boot/efibootmgr
|
||
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
|
||
|
||
emerge --ask sys-kernel/gentoo-kernel-bin
|
||
// возможно придется обновить конфиг: etc-update
|
||
|
||
grub-mkconfig -o /boot/grub/grub.cfg
|
||
```
|
||
|
||
## fstab (чтобы монтировалось после ребута)
|
||
Сгенерируй UUID и пропиши:
|
||
```sh
|
||
blkid
|
||
nano -w /etc/fstab
|
||
```
|
||
(Я вставил что то вроде этого)
|
||
```
|
||
# /etc/fstab: static file system information.
|
||
#
|
||
# See the manpage fstab(5) for more information.
|
||
#
|
||
# NOTE: The root filesystem should have a pass number of either 0 or 1.
|
||
# All other filesystems should have a pass number of 0 or greater than 1.
|
||
#
|
||
# NOTE: Even though we list ext4 as the type here, it will work with ext2/ext3
|
||
# filesystems. This just tells the kernel to use the ext4 driver.
|
||
#
|
||
# NOTE: You can use full paths to devices like /dev/sda3, but it is often
|
||
# more reliable to use filesystem labels or UUIDs. See your filesystem
|
||
# documentation for details on setting a label. To obtain the UUID, use
|
||
# the blkid(8) command.
|
||
|
||
# <fs> <mountpoint> <type> <opts> <dump> <pass>
|
||
|
||
#LABEL=boot /boot ext4 defaults 1 2
|
||
#UUID=58e72203-57d1-4497-81ad-97655bd56494 / xfs defaults 0 1
|
||
#LABEL=swap none swap sw 0 0
|
||
#/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
|
||
UUID=3733ce80-bdb7-477d-a0bf-7a70122fa071 / ext4 defaults 0 1
|
||
UUID=66FA-9048 /boot/efi vfat umask=0077 0 2
|
||
|
||
|
||
```
|
||
а потом:
|
||
```
|
||
mount -a
|
||
findmnt /boot/efi
|
||
```
|
||
|
||
Минимально:
|
||
- root (`/dev/vda2`) → `/` ext4
|
||
- ESP (`/dev/vda1`) → `/boot/efi` vfat
|
||
|
||
## Финиш: пароль, выход, ребут
|
||
```sh
|
||
useradd -m -G wheel -s /bin/bash <user>
|
||
passwd <user>
|
||
|
||
emerge --ask app-admin/sudo
|
||
visudo
|
||
|
||
```
|
||
В `visudo` раскомментируй строку (или добавь), чтобы wheel мог sudo:
|
||
`%wheel ALL=(ALL:ALL) ALL`
|
||
```
|
||
|
||
passwd root
|
||
exit
|
||
umount -l /mnt/gentoo/dev{/shm,/pts,}
|
||
cd /
|
||
umount -R /mnt/gentoo
|
||
reboot
|
||
```
|
||
|
||
Сейчас напиши вывод двух команд из chroot:
|
||
```sh
|
||
ls /sys/firmware/efi
|
||
ip link
|
||
```
|
||
По ним скажу точно: нужно ли отдельно монтировать `efivarfs`, и как именно называется твой сетевой интерфейс для `net.<iface>`.
|
||
|
||
[1](https://github.com/dudekmichal/gentoo/blob/master/readme.md)
|
||
[2](https://github.com/gentoo/netifrc/blob/master/doc/net.example.Linux.in)
|
||
[3](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Handbook_PPC/Full/Networking/zh-cn.html)
|
||
[4](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Handbook_AMD64/Installation/Bootloader/en.html)
|
||
[5](https://github.com/sergibarroso/gentoo_install)
|
||
[6](https://www.reddit.com/r/Gentoo/comments/17sztdp/how_to_speed_up_emerge_sync_synchronizing_with/)
|
||
[7](https://github.com/dudekmichal/gentoo)
|
||
[8](https://www.reddit.com/r/Gentoo/comments/9ua7lm/question_about_fully_amd64_installation/)
|
||
[9](https://blog.csdn.net/qq_40738478/article/details/129191358)
|
||
[10](https://www.reddit.com/r/Gentoo/comments/ffim09/installation_cannot_upgrade_portage_update_world/)
|
||
[11](https://gist.github.com/CDA0/4b1c2ee20cb68bdd4e72fb452fde9941)
|
||
[12](https://www.reddit.com/r/Gentoo/comments/ha2v6q/how_does_portage_and_its_config_files_work/)
|
||
[13](https://www.reddit.com/r/Gentoo/comments/1hj03zd/network_address_assigned_and_internet_connection/)
|
||
[14](https://www.reddit.com/r/Gentoo/comments/k7zpm3/grubinstall_error/)
|
||
[15](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/etc/portage/repos.conf/it.html)
|
||
[16](https://wiki.archlinux.org/title/GRUB)
|
||
[17](https://www.reddit.com/r/Gentoo/comments/x0ke6i/problem_with_portage/)
|
||
[18](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Netifrc.html)
|
||
[19](https://www.reddit.com/r/Gentoo/comments/dfqah8/grub_efi_error_handbook/)
|
||
[20](https://emirror.d0a.io/wiki/wiki.gentoo.org/wiki/Handbook_AMD64/Full/Installation.html)
|
||
|
||
# timezone
|
||
|
||
`echo "Europe/Moscow" | sudo tee /etc/timezone`[](https://www.semirocket.science/noteblog/2023/03/gentoo-how-to-change-time-zone/)-
|
||
|
||
- `sudo emerge --config sys-libs/timezone-data`
|
||
отключить hwlock:
|
||
|
||
/etc/conf.d/hwlock:
|
||
|
||
```
|
||
# Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as
|
||
# Greenwich Mean Time). If that clock is set to the local time, then
|
||
# set CLOCK to "local". Note that if you dual boot with Windows, then
|
||
# you should set it to "local".
|
||
clock="UTC"
|
||
|
||
# If you want the hwclock script to set the system time (software clock)
|
||
# to match the current hardware clock during bootup, leave this
|
||
# commented out.
|
||
# However, you can set this to "NO" if you are running a modern kernel
|
||
# and using NTP to synchronize your system clock.
|
||
clock_hctosys="NO"
|
||
|
||
# If you do not want to set the hardware clock to the current system
|
||
# time (software clock) during shutdown, set this to no.
|
||
#clock_systohc="NO"
|
||
|
||
# If you wish to pass any other arguments to hwclock during bootup,
|
||
# you may do so here. Alpha users may wish to use --arc or --srm here.
|
||
clock_args=""
|
||
|
||
```
|
||
|
||
# docker в группу (чтобы не писать sudo)
|
||
|
||
`sudo usermod -aG docker $USER`
|
||
|
||
# как я hurl качал (или keywords amd64 и ~amd64)
|
||
|
||
```bash
|
||
sudo mkdir -p /etc/portage/package.accept_keywords
|
||
echo "net-misc/hurl ~amd64" | sudo tee /etc/portage/package.accept_keywords/hurl
|
||
sudo emerge -av net-misc/hurl
|
||
```
|