Подробно останавливаться на базовой установке Gentoo я не буду, для этих целей есть рукокнига в которой все расписано от и до. Скачиваем атуальные по дате архивы stage3 и portage, монтируем заранее подготовленный для этого раздел в /mnt/gentoo и копируем туда наш stage3. Переходим в /mnt/gentoo и распаковываем stage3 командой sudo tar -xvjpf stage3-‘date’.tar.bz2. После распаковки stage нам нужно скопировать архив с portage в /mnt/gentoo/usr и перейдя в эту директорию распаковать его аналогичной командой. Будущая система распакована, зайдем в нее:
sudo mount -t proc none /mnt/gentoo/proc
sudo mount -o bind /dev/ /mnt/gentoo/dev
sudo chroot /mnt/gentoo /bin/bash
Если при выполнении последней команды вы получаете ошибки, стоит убедиться, что система из которой вы делаете chroot — 64 битная.
Выполняем
env-update
и
source /etc/profile
Открываем /etc/make.conf в котором пропишем флаги компилятора и другие опции системы portage по вкусу. Путем проб и ошибок были выбраны такие $CFLAGS
CFLAGS="-march=atom -O2 -mssse3 -mcx16 -msahf -g0 --param l1-cache-size=24
--param l1-cache-line-size=64 --param l2-cache-size=512 -pipe"
Update:
Так как какой либо производительности от Atom’a ждать не приходится, то можно попробовать собирать систему с оптимизацией по размеру. И выходной бинарник получается на 10 — 20% меньше по размеру и довольно часто все эти оптимизации лишь делают код более тормознутым на слабых машинах. К тому же тратится гораздо меньше времени на сборку. Вобщем на данный момент я собираю всю систему GCC 4.6.2 с такими флагами:
CFLAGS="-march=atom -mtune=atom -Os-g0 --param l1-cache-size=24
--param l1-cache-line-size=64 --param l2-cache-size=512 -pipe"
Замечу что если при сборке в chroot у вас не собираются какие либо пакеты, то стоит добавить флаг -mno-movbe и в дальнейшем когда система уже будет на целевой машине его можно будет убрать. Так же хочу заметить, что для сборки под архитектуру atom вам потребуется >=GCC-4.5. Если вам не хочется пока использовать компилятор не переведенный в стабильную ветку, то для сборки вместо atom нужно указать -march=core2. Теперь выберем профайл который мы будем использовать на нетбуке. Для получения списка доступных выполняем:
eselect profile list
[1] default/linux/amd64/10.0 [2] default/linux/amd64/10.0/desktop [3] default/linux/amd64/10.0/desktop/gnome [4] default/linux/amd64/10.0/desktop/kde [5] default/linux/amd64/10.0/developer [6] default/linux/amd64/10.0/no-multilib * [7] default/linux/amd64/10.0/server [8] hardened/linux/amd64 [9] hardened/linux/amd64/no-multilib [10] selinux/2007.0/amd64 [11] selinux/2007.0/amd64/hardened [12] selinux/v2refpolicy/amd64 [13] selinux/v2refpolicy/amd64/desktop [14] selinux/v2refpolicy/amd64/developer [15] selinux/v2refpolicy/amd64/hardened [16] selinux/v2refpolicy/amd64/server
Как вы видите доступно 16 различных профилей. Часть из них selinux*, часть hardened*, но на нетбуке все это нам явно без надобности. Выбираем что нибудь в диапазоне от 1 до 6, в зависимости от того какое графическое окружение, KDE или GNOME вы предполагаете использовать. Я ипользую профиль no-multilib, который дает возможность собрать pure 64bit систему, другими словами без наличия 32 битных библиотек и возможности исполнения 32 битного кода. Наличие 32 битных библиотек требуется разве что WINE и Skype, ни тем ни другим я не пользуюсь поэтому no-multilib.
Теперь перейдем к настройке ядра, пожалуй самая важная часть. Правильно собранное ядро без лишнего, ненужного на конкретном железе кода, собранное под нужный процессор сказывается на скорость работы системы. Ниже я выложу три конфига ядра. Один из них минимальный из которого выброшен Wi — Fi, веб камера. Второй полный где включен весь функционал. Модули DRI, AGP и другие которые как ни крути всегда подгружаются лучше вкомпилить прямо в ядро, а не модулями. Третий аналогичен минимальному, но с Wi-Fi. Четвертый конфиг чисто для энтузиастов. В конфиге убран весь дебаг с помощью expert mode. Этот конфиг с которым я собираю ядро для себя из разряда на «каждый день». Данное ядро собирается под atom, так что если =>GCC — 4.5, следует собирать под core2/Xeon. Также можно добавить при сборке оптимизацию по размеру. (Optimize for size)
Внимание! Во всех конфигах выключена поддержка исполнения 32 битного кода! Для включения включите IA-32 в меню Executable file format
Если Вам требуется SWAP, то его также необходимо включить перед сборкой ядра в General Setup —> Swap
Теперь функциональные клавиши (Fn+F1,F2…)
Так как в ядре есть модуль eeepc_laptop, то с клавишами особых проблем нет. Но надо добавить в строку параметров передаваемых загрузчиком ядру опции
acpi_osi=Linux и acpi_backlight=vendor
Утилитой xev можно посмотреть какие функциональные клавиши нормально определяются и какое имя им присваивается. У меня заработали все, кроме Fn+F7 которая должна отключать дисплей. Для того чтобы заработали все — установим acpid, запустим acpi_listen и нажмем нужную комбинацию. Приведу пример как сделать так чтобы при закрытии крышки нетбука он впадал в спячку (suspend to RAM). Запускаем acpi_listen и закрываем крышку, после открытия смотрим как определяется это событие. У меня закрытие крышки определилось как button/lid LID close.
Теперь создаем файл /etс/acpi/sleep с таким содержанием:
event=button/lid LID close action=/etc/acpi/sleep.sh
Сохраняем этот файл и пишем скрипт /etc/acpi/sleep.sh c таким содержанием:
#!/bin/bash sudo sh -c 'echo mem > /sys/power/state'
Сохраняем его, делаем исполняемым с помощью
sudo chmod +x /etc/acpi/sleep.sh
и теперь при закрытии крышки нетбука он будет уходить в спячку.
Не забываем, что для того чтобы демон acpid загружался при запуске нужно добавить его в автозапуск на уровень boot.
sudo rc-config add acpid boot
Следующий момент касается HDD, точнее частоты парковки головок. Головки паркуются слишком часто, за 5 дней использования судя по показаниям SMART это произошло более 15 тысяч раз. Я понимаю что скорее всего разработчиками предусмотренно такое поведение HDD и гарантированный срок работы он продержится, но лучше свести частоту парковок головок к минимуму или вообще отключить.
Делается это все с помощью hdparm и уже известной нам acpid. Пишем скрипт который будет при каждой загрузке отключать APM и выставлять нужный AAM. В Gentoo это скрипт /etc/conf.d/local.start. Откроем этот скрипт и пропишем следующее:
#!/bin/bash hdparm -B 255 /dev/sda hdparm -M 254 /dev/sda
acpid нам потребуется для того чтобы после выхода из спящего режима настройки которые мы записали выше применялись вновь.
Создаем и открываем для редактирования файл /etc/acpi/events/restore, прописываем
event=button/lid LID open action=/etc/acpi/restore.sh
закрываем, сохраняем
Создаем скрипт /etc/acpi/restore.sh с таким содержимым:
#!/bin/sh hdparm -B 255 /dev/sda hdparm -M 254 /dev/sda
На этом пока все, в дальнейшем статья будет постепенно пополняться