Стоит ли ставить Gentoo ради ускорения? Gentoo оптимизация


Стоит ли ставить Gentoo ради ускорения? / Хабр

Возможно из вас кто-то когда-то слышал: «Планирую поставить себе Gentoo, он будет лучше использовать возможности моего процессора и будет выжимать из него максимум». Чтож, давайте разберёмся…

Какие вообще бывают оптимизации под процессор
В основном под этим подразумевают использование дополнительных наборов инструкций типа: MMX, SSE, AES и AVX при компиляции приложений. Однако, если копнуть глубоко, существуют и другие оптимизации и не только для приложений. Я выделил следующие группы оптимизаций:Оптимизации под дополнительные наборы инструкций лучше всего освещены на странице: Intel 386 and AMD x86-64 GCC Options. Начиная с Pentium MMX нам стал доступен MMX, потом AMD сделала 3DNow!, потом в Pentium III появилось SSE, и пошло поехало. Intel Haswell, который порадовал нас в этом году, поддерживается: MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 и F16C. Работа с вещественными числами (FPU) тоже косвенно относится к дополнительным наборам инструкций, ибо компилятор для этого может использовать SSE. Это быстрее x87 инструкций и не блокирует MMX. Ешё немного об этом будет ниже.

Следует отметить ещё одну важную особенность. Когда вслух упоминаются аббревиатуры SSE, MMX и AES, то очень часто у людей, знакомых с этими понятиями, всплывает в голове картинка, повествующая о нелёгкой жизни Си-программистов, которые ассемблерными вставками «пилят» поддержку этих инструкций в своём софте. А на самом деле существует аж 3 способа использования этих наборов инструкций: автоматически компилятором при статическом анализе кода, вручную с помощью специальных функций компилятора и вручную ассемблерными вставками (например: How to optimize code for MMX processors). В каких именно случаях GCC автоматически использует наборы инструкций, если они разрешены, — не понятно, но в руководстве четко сказано, что такие случаи есть (будем надеяться в комментариях напишут).

Оптимизации кода при статическом анализе лучше всего освещены на странице Options That Control Optimization. Возможностей очень много, но дабы не запутаться, они сгруппированы в мета флаги: O0, O1, O2, O3, Ofast. Больше информации по этим флагам можно найти ниже в прилинкованных статьях.

Оптимизации для лучшего попадания в кеш процессора. Быстро объяснить не получится, поэтому я отсылаю читателя в другую статью: Пузырьки, кэши и предсказатели переходов. Я лишь скажу, что для анализа мест, которые можно оптимизировать программисты могут использовать Intel VTune Performance Analyzer и AMD CodeAnalyst. И, вроде как, ICC Intel C++ compiler умеет делать такие оптимизации в некоторых случаях автоматически, а как дела с этим у GCC сегодня, надеюсь знающие люди дополнят в комментариях.

Оптимизации кода на уровне ядра. Позволяют ускорять функции в Cryptographic API Framework, такие как шифрование AES, Twofish и другие, используя дополнительные наборы инструкций, такие как: SSE, AVX, AES. Эти функции могут использоваться в других модулях ядра, а также вызываться снаружи из приложений.

С теорией разобрались, перейдём к тому, как это используется.

Если у вас Ubuntu
Предположим вы сидите на Ubuntu. В зависимости от разрядности операционной системы у вас на выбор пакеты с суффиксом i386 или amd64 (пример). i386 вовсе не означает, что пакет будет работать на любом процессоре, начиная от 386, он просто обозначает, что целевое назначение пакета — 32-битная платформа x86. В свою очередь amd64 означает поддержку 64-битной платформы x86-64. Мы можем это легко проверить, если наберём в консоли:gcc -dumpmachine На 32-битной Ubuntu 12.04 LTS Server мы увидим i686-linux-gnu, а на 64-битной — мы должны увидеть x86_64-linux-gnu. Предположим у вас 32-битный Pentium 4, вам доступны MMX, SSE и SSE2, но они не использовались при генерации пакетов, так как эти же пакеты должны работать на Intel Celeron, где есть только MMX, и возможно даже на Pentium Pro, где нет даже MMX. Дополнительные наборы инструкций будут задействованы только в пакетах, которые сами на лету определяют процессор и включают более быстрый алгоритм для данного процессора. Хорошая новость состоит в том, что это происходит почти во всех мультимедиа пакетах. Также не ясно с какими оптимизациями кода собиралась 32-битная Ubuntu. Если посмотреть вывод GCC, то есть немного из -O1, и из -O2 и из -O3. Если пакеты для Ubuntu под конкретную версию принято собрать на самой системе с опциями компиляции по умолчанию, то видимо они собираются не самым оптимальным (из рациональных) способом. Ну и наконец, функции в kernel Cryptographic API используются не оптимизированные. Оптимизированные функции под дополнительные наборы инструкций присутствуют в системе только в виде модулей, и только для i586 и AES (для VIA Nano), но не подгружены по умолчанию. Также не понятно, что из 586 можно использовать для оптимизаций.

В Ubuntu 12.04 64-bit дела гораздо лучше. Во-первых: gcc по умолчанию для 64-битных систем использует расширения: MMX, SSE, SSE2, поэтому код может быть несколько оптимизирован. Во-вторых для x86-64 по умолчанию -mfpmath=sse, что ускоряет арифметику для вещественных чисел. Оптимизированные функции kernel Cryptographic API под дополнительные наборы инструкций присутствуют в системе в модулях, но не подгружены по умолчанию. По крайней мере их можно включить. Ну и наконец, gcc собирает пакеты с тем же странным набором оптимизаций, что и для Ubuntu 32-битной.

Если у вас Gentoo
То скорее всего вы читали эту страницу из руководства. А значит вы выставили себе -O2 и -march=native (или правильный процессор). Но скорее всего вы во-первых: не заходили в Cryptographic API при настройке ядра и не ускорили себе некоторые инструкции, а как минимум стоит ускорить AES. Во-вторых: вы скорее всего не выставили USE-флаги для дополнительных инструкций процессора из тех, что вам доступны: 3dnow, mmx, sse, sse2, sse3. Или выставили не все из них. А это значит, что для приложений намеренно выносящих активацию оптимизаций в USE-флаги, вы остались без дополнительного ускорения. Помимо глобальных флагов, существуют также локальные флаги, которые задействуют дополнительные инструкции для некоторых приложений. Такие как: 3dnowext, ssse3, sse4, sse4_1, avx, avx128fma, avx256 и aes-ni. Всё что у вас поддерживается лучше тоже выставить. Современный stage3 под amd64 по умолчанию выставляет: bindist, mmx, sse, sse2. К несчастью bindist отключает дополнительные инструкции в некоторых пакетах для их переносимости. Если вам нужен bindist, используйте дополнительно cpudetection, чтобы нивелировать недостатки bindist флага в некоторых приложениях.В каких же пакетах Gentoo можно получить прирост? app-arch/libzpaq app-emulation/bochs media-libs/freeverb3 (audio) media-libs/libpostproc (video) media-libs/libvpx (video VP8) media-plugins/vdr-softdevice (video) media-sound/mpg123 media-video/ffmpeg media-video/libav media-video/mplayer media-video/mplayer2 media-video/vlc net-libs/cyassl net-misc/bfgminer (bitcoin) sci-biology/raxml sci-libs/fftw sci-chemistry/gromacs sys-fs/loop-aes x11-libs/pixman

Дополнительно флаг orc, который и так выставлен по умолчанию, помогает задействовать дополнительные инструкции процессора в: media-libs/gstreamer (audio+video)

Дополнительно флаг cpudetection, который не выставлен по умолчанию, помогает задействовать дополнительные инструкции процессора на лету в: media-sound/jack-audio-connection-kit media-video/ffmpeg media-video/libav media-video/mplayer media-video/mplayer2 sci-libs/mpir

Выводы
Дополнительный материал
Материал по ICC

Добавочка: Пользователь kekekeks поделился рецептом как можно пересобрать некоторые пакеты для Ubuntu с оптимизацией.

habr.com

Инсталляция дистрибутива Gentoo Linux

Сегодня будем развенчивать миф о сложности установки Gentoo. Почему установка “по-русски”? Потому что настраивать станем русскую локаль, раскладку и временную зону. Статья получилась довольно объёмной, для тех, кто не знает, как скоротать долгий вечер).

Предлагается вооружиться знаниями об архитектуре своего процессора, перейти на страницу get gentoo, выбрать эту самую архитектуру и после стольких утомительных мышкодвижений скачать и записать на диск (или usb-flash) нужный образ:

stages → current iso → install-$ARCH-minimal-*.iso.

Загрузитесь с СD-диска.

Грузимся с параметрами по умолчанию.

Настройка интернет-соединения:

автор использует модемное соединение, данные передаются автоматически при помощи DHCP.

если кроме интерфейса lo больше ничего нет, значит делаем следующее:

# dhcpcd eth0 (где ваш сетевой интерфейс - eth0)

после чего повторяем команду /sbin/ifconfig

теперь у нас появились данные интерфейса eth0.

Для настройки adsl-соединения:

# pppoe-setup # net-setup eth0 (для обычных или беспроводных сетей) # ping ya.ru - пингуем яндекс

чтобы прервать пинги:

Ctrl+C

Также для настройки обычного или беспроводного соединения можно использовать команду net-setup eth0, где eth0 — имя сетевого интерфейса. Интернет настроили, идём дальше

Создание разделов диска

Для этого воспользуемся cfdisk:

перед тем,как создавать разделы,сядьте и подумайте какие,какого размера и с какой файловой системой.

Лучше записать то, что вы себе насочиняли. Для домашнего использования можно обойтись стандартными каталогами /boot, / , swap.

Непосредственно создание разделов:

где sda - SCSI-диск; hda - IDE-диск. Выбирайте что нужно вам.

Назначение файловой системы:

# mke2fs /dev/sda1 - создание `ext2` на разделе `/dev/sda1` # mke2fs -j /dev/sda3 - создание `ext3` на разделе `/dev/sda3` # mkswap /dev/sda2 - создание раздела подкачки на `/dev/sda2` # swapon /dev/sda2 - и его активация # mkfs.ext4 - создание `ext4`, если не желаете использовать `ext3`

Назначение точек монтирования:

# mount /dev/sda3 /mnt/gentoo - монтируем корень # mkdir /mnt/gentoo/boot - раздел под загрузчик # mount /dev/sda1 /mnt/gentoo/boot - монтирование раздела загрузчика

Архив стадии, дерево портежей

В качестве источника загрузки автором было использовано зеркало mirror.yandex.ru Внимательно следите за тем,чтобы загрузить подходящий скачанному вами образу архив. В примере использован amd64.

# cd /mnt/gentoo # links http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/current-iso/

Выберите файл stage3*.tar.bz и нажмите enter. Начнётся загрузка архива, это 161 Мб, так что пока можно попить кофейку.

Загрузили? Распаковываем:

# tar xvjpf stage3-*.tar.bz

Теперь сделаем снимок дерева портежей

# links http://mirror.yandex.ru/gentoo-distfiles/snapshots/

выбираем внизу portage-latest.tar.bz2

Начнётся загрузка.

распаковываем (из корневого каталога):

# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

Настройка компиляции ядра

Настройки хранятся в файле mnt/gentoo/etc/portage/make.conf. Его и открываем любимым редактором (joe, nano, vi?) Здесь используются переменные и значения. Пример:

переменная - CHOST, её значение - x86_64-pc-linux-gnu - указывает на архитектуру процессора CFLAGS="-march=k8 -pipe -O2" - где

"-march=k8" - название целевой архитектуры, k8 прописывается для amd64, -О2 - классс оптимизации.

Допустимые значения:

Выбор зеркал, DNS, chroot

Действия в примере производятся из каталога /

Выбор зеркала загрузки

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

Выбор зеркала rsync:

# mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf

Из предложенного списка выберите зеркала России.

Нелишним будет скопировать информацию о DNS

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Монтируем /proc, sys & /dev:

# mount -t proc none /mnt/gentoo/proc # mount -o bind /dev /mnt/gentoo/dev # mount -t sysfs none /mnt/gentoo/sys

Переходим в новую среду с помощью chroot:

# chroot /mnt/gentoo /bin/bash # env-update # source /etc/profile # export PS1="(chroot) $PS1"

Прочие премудрости

Обновите дерево портежей:

# mkdir /usr/portage # emerge --sync

это может занять какое-то время, не пугайтесь

# emerge portage - если выдаёт сообщение о новой версии портежей

Выбор профиля:

# eselect profile list Available profile symlink targets: [1] default/linux/amd64/10.0 * [2] default/linux/amd64/10.0/desktop [3] default/linux/amd64/10.0/server # eselect profile set 3

Думаю, приведённые действия не нуждаются в пояснении, всё ясно из названий профилей. Нужно лишь выбрать необходимый вам, исходя из ваших задач.

USE-флаги

Служат для включения/отключения поддержки необязательных функций при компиляции программ. Вам не нужен X-сервер? Допишите значение "-X". Не нужна поддержка qt? Значит "-qt". И наоборот включите поддержку unicode: "unicode". Посмотреть допустимые значения:

# less /usr/portage/profiles/use.desc

Значения дописываются в /etc/portage/make.conf в строку USE

# nano -w /etc/portage/make.conf

Например:

Настройка кодировки:

# nano -w /etc/locale.gen

вы увидите список закомментированных строк с кодировками, вот сверху или же ниже его впишите:

en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8

сохраните изменения и выйдите: Ctrl+O, Ctrl+Q

Настройка времени:

# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Теперь наше локальное время идёт по Кремлёвским курантам)) Можете скопировать любое место вашей дислокации из /usr/share/zoneinfo

Ядро

Скачаем исходники ядра

# USE="-doc symlink" emerge gentoo-sources

Установка ядра

Способ 1 - всё и сразу

# emerge genkernel # genkernel all

В результате получим ядро с поддержкой разного ненужного хлама. Плюс этого способа - простота. Примечание: можно подправить /etc/genkernel.conf, включив в нём параметры:

OLDCONFIG="yes" MENUCONFIG="yes" CLEAN="no" MRPROPER="no"

В таком случае вы сможете собрать своё ядро, а genkernel сделает всё остальное. После сборки можете просто проверить название созданного ядра и initrd, а затем обратиться к дальнейшему пункту о сборке программ:

# ls /boot/kernel* /boot/initramfs*

Способ 2 - только то, что нужно

# emerge pcutils (с её помощью вы сможете посмотреть аппаратную часть своего ПК) # cd /usr/src/linux (переход в каталог с исходниками) # make menuconfig (вызов меню с настройками)

Здесь всё строго индивидуально. Используете usb-мышь или клавиатуру? Проверьте включена ли их поддержка. Хотите, чтобы система понимала NTFS? Проверьте включена ли её поддержка. Настроек хватит на всё: тип процессора, видео, звук, поддержка файловых систем, девайсов устройств, поддерживаемых кодировок. Просто пройдитесь по пунктам меню и поразбирайтесь,что вам нужно,а что нет. Если вы испытываете затруднения с этим, можете ознакомиться со следующей заметкой, а затем продолжить.

Настроили? Теперь ядро нужно скомпилировать и установить:

# make && make modules_install - для тех, кто занимался ручной сборкой

И скопировать ядро в /boot:

# cp arch/x86_64/boot/bzImage /boot/

Пример:

# cp arch/x86_64/boot/bzImage /boot/2.6.37-gentoo-r4

Если вы собрали ядро с initramfs, следует всё же установить genkernel и скомандовать:

# genkernel --install initramfs

Сборка программ, конфигурирование модулей, настройка загрузчика

# emerge udev (автоматическое распознавание устройств) syslog-ng (служба журналирования) vixie-cron (что такое cron, думаю, знают все) dhcpcd (автоматическое получение IP-адреса, если у вас это дело статично, можете не ставить)

Теперь добавляем эти вещи в автозагрузку:

# rc-update add udev boot # rc-update add syslog-ng default # rc-update add vixie-cron default # rc-update add dhcpcd default

Примечание:

Если вы владелец беспроводного соединения, лучше заранее озаботиться о простом способе подключения к сети после первой перезагрузки. Например, установить wicd с флагом ncurses: это позволит провести настройку с помощью вызова wicd-curses. Также не забывайте заглянуть в содержимое /etc/resolv.conf, которое может быть перезаписано dhcpcd.

Проверяем наши устройства:

Должно получиться примерно так:

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts. /dev/sda1 /boot ext2 noatime 1 2 /dev/sda2 / ext4 noatime 0 1 /dev/sda5 none swap defaults 0 0 /dev/sda6 /home ext4 noatime 0 0 tmpfs /var/tmp tmpfs size=4G,noatime 0 0 tmpfs /var/log tmpfs size=10M 0 0 debugfs /sys/kernel/debug debugfs defaults 0 0 #/dev/cdrom /mnt/cdrom auto noauto,ro 0 0

Обратите внимание: нужно убрать параметр noauto напротив /boot (в данном примере /boot расположен на /sda1). Вообще, boot и swap-разделы создавать необязательно. Монтирование tmpfs и debugfs по вкусу и потребностям.

Имя хоста:

# nano -w /etc/conf.d/hostname

Укажите здесь имя своего ПК

Сеть:

# nano -w /etc/conf.d/net

дописываем:

# /etc/conf.d/net # config_eth0="dhcp" # для получения динамического IP-адреса # если адрес статичен,то впишите вместо dhcp свою информацию. Например: config_eth0="192.168.0.2 netmask 255.255.255.0" # IP-адрес и адрес сети routes_eth0="default via 192.168.0.1" # роутер dns_servers_eth0="192.168.0.1 8.8.8.8" # DNS-адреса

Теперь следует указать gentoo на существующий интерфейс. Для этого создайте символьную ссылку на net.eth0:

# cd /etc/init.d # ln -s net.lo net.eth0

Добавление сетевого интерфейса в автозагрузку:

# rc-update add net.eth0 default

Создание пароля для суперпользователя:

впишите пароль для учётной записи root

Примечание: можете также ознакомиться с настройками файла /etc/rc.conf (редактор по умолчанию, графическая среда и прочее)

Настройка раскладки клавиатуры:

# /etc/conf.d/keymaps KEYMAP="ru"

Настройка часов:

# /etc/conf.d/clock CLOCK="local" TIMEZONE="Europe/Moscow"

Установка загрузчика grub2:

# nano -w /etc/portage/make.conf GRUB_PLATFORMS="pc" # emerge -av grub sysboot/os-prober # grub2-install /dev/sda # grub2-mkconfig -o /boot/grub/grub.cfg

По состоянию на 2015 год в gentoo предлагается установка grub2 по-умолчанию, хотя вы всегда можете выбрать любой другой загрузчик: grub-legacy, lilo.

Финиш

# exit # cd # umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo (в общем последовательно отмонтируйте всё, что смонтировали в `/mnt`) # reboot

Перезагрузка, загрузка ПК с винчестера и вас встречают приглашением входа в систему. Поздравляю, вы победили!

Локализация системы

Перезагрузившись, мы обнаружим прескверную вещь: кириллица отображается квадратиками. Что ж, в locale.gen нужные настройки внесены, продолжим квест по русификации системы.

# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts kbd

В файле /etc/env.d/02locale:

LC_ALL="" LANG="ru_RU.UTF-8"

В /etc/conf.d/keymaps:

keymap="ruwin_alt_sh-UTF-8" windowkeys="NO" extended_keymaps="" dumpkeys_charset="" fix_euro="NO"

В /etc/conf.d/font:

font="cyr-sun16" translation=""

После чего прописать font в автозагрузку:

# rc-update add font boot

Можно также установить различные шрифты и поэкспериментировать с ними. После пересборки/установки шрифтов желательно выполнить:

⤧  Следующая запись Создание темы wordpress

www.unix-lab.org

Разрушители легенд — Gentoo Linux / Хабр

Дочка Убунту прибежала к Дебиану и, весело смеясь, поцеловала его в лоб: "С днём рождения, папа!". Затем она окинула радостным взглядом сидящих за столом гостей и спросила своим звонким голосом: — Папа, а где Gentoo, разве он ещё не пришёл? — Нет, он ещё только собирается.

Среди прочих Linux дистрибутивов Gentoo выделяется тем, что его окружает множество мифов, светлой и темной окраски. Я его использую более 10 лет в качестве домашней и офисной рабочей станции и хочу с вами разоблачить несколько мифов и создать парочку новых.

Также хотелось бы рассказать о достоинствах и недостатках дистрибутива, дабы помочь сомневающимся и беженцам с systemd принять верное решение. Пользуясь случаем также хочу здесь разместить несколько полезных советов, которые помогут избежать многочасовых поисков в интернетах и повторной компиляции монструозных пакетов.

Миф №1 — прирост производительности

Gentoo Linux дает прирост производительности за счет того, что все программы компилируются под конкретное пользовательское железо. На этапе зарождения и становления дистрибутива этот тезис звучал с лютой настойчивостью.

Это на самом деле не совсем миф, но вы скорее всего не заметите прироста производительности, если не ставите целью доказать это статистически, вооружившись Phoronix Test Suite или чем-то подобным. Возможно исключение для FireFox, собранного с профилированием, USE="pgo".

На чем основан этот миф? Действительно узкий круг вычислительных программ можно ускорить при компиляции под определенную платформу, задавая компилятору включение инструкций SIMD, AESNI, или AVX. Бинарные дистрибутивы из-за чрезмерной заботы о совместимости со старой архитектурой базой зачастую приносят подобные оптимизации в жертву. Вернее будет сказать, что так было раньше, а сейчас это не играет большой роли.

Определенно, не за это адепты ценят Gentoo.

Миф №2 — обновления съедают много времени

Технически это верно, таки да, иногда программы обновляются долго, но обходные пути очень хорошо проторены, что и делает этот тезис мифом. Вот мои рекордсмены.

(5:515)$ sudo qlop -t libreoffice firefox qtwebengine libreoffice: 15028 seconds average for 20 merges firefox: 3127 seconds average for 32 merges qtwebengine: 8884 seconds average for 5 merges

Во-первых никто не мешает долгоиграющие обновления запускать ночью. Во-вторых в любой момент задание emerge и компиляцию исходников можно поставить на паузу (Ctrl+Z), возобновив позже в фоновом режиме (bg) или явно (fg). В-третьих можно задать автоматическое обновление через небольной скрипт, например такой.

# Part 1 layman -S emerge --sync eix-update # Part 2 emerge -avuND --with-bdeps=y --complete-graph=y --backtrack=30 --keep-going --verbose-conflicts --exclude "gentoo-sources firefox libreoffice chromium glibc perl python gcc" world smart-live-rebuild -- -av --with-bdeps=y --complete-graph=y emerge -av --exclude "gentoo-sources firefox libreoffice chromium glibc perl python gcc" @preserved-rebuild eclean distfiles

Миф №3 — в Gentoo самые свежие версии программ

Конечно, если сравнивать с Debian Linux, то в целом это так, однако и тут бывают исключения. Тот же Debian раньше стал использовать Grub 2 в стабильной ветке и Perl какое-то время был более новой версии, нежели в Gentoo. Если же сравнивать стабильные ветки менее консервативных дистрибутивов с таковыми в Gentoo, то результат может быть каким угодно. Все зависит от кучи обстоятельств, насколько данный пакет обеспечен мейнтейнером и волонтерами. Например QEMU обновляется почти одновременно со стабильной веткой Github, а MATE — застрял в Gentoo на версии 1.12.2 из-за того, что у него мало разработчиков.

(5:499)$ eix -ce qemu;eix -ce mate [I] app-emulation/qemu ([email protected]): QEMU + Kernel-based Virtual Machine userland tools [N] mate-base/mate (1.12-r1): Meta ebuild for MATE, a traditional desktop environment

+1 — необычайная гибкость настроек

Поговорим теперь немного о достоинствах Gentoo Linux. Гибкость и возможность настроить очень многие аспекты ОС под себя это то, чем блещет дистрибутив. Вот всего лишь несколько таких примеров.

+2 — скользящие релизы

Для меня это одно из основных преимуществ дистрибутива. Из-за того, что вы невнимательно читали RSS ленту вашего дистрибутива вы не окажетесь в ситуации, когда вам на голову свалился новый инит, файловая система или принцип работы сетевых интерфейсов.

Все важные изменения доносят до пользователей заблаговременно через механизм рассылки новостей. Прочитать последние актуальные новости дистрибутива можно командой eselect news read.

(5:501)$ sudo eselect news read No news is good news.

+3 — хорошая документация

Это действительно так. Установку ОС значительно облегчает подробнейшее руководство, но есть также крайне полезные вики и форум.

Туда же входят упомянутые рассылки новостей и сообщения elog в специальных файлах /var/log/portage/elog.

± emerge и portage

Основная система управления пакетами portage и штатное средство управления пакетами emerge являются очень мощным и функциональным в руках опытного и внимательного к докам пользователя. Именно благодаря системе portage возможны тонкие и гибкие настройки операционной систему и пользовательского ПО (см. выше в +1). Даже беглое описание возможностей emerge/portage заслуживает отдельного поста, поэтому ограничусь общим описанием.

Из-за чего могут возникать такие ситуации? По самым разным причинам, изменения в лицензировании продукта, необходимость замаскировать, или наоборот размаскировать пакет, изредка ляпы разработчиков. Тут наблюдается обратная зависимость от частоты обновлений, поэтому рекомендуется регулярно и по возможности часто обновлять систему, чтобы накопленная энтропия в древе портов не порождала цепной реакции.

-1 — начальная установка занимает много времени

Полная ерунда, вот установка с помощью однострочника.

wget goo.gl/5Y2Gj -O install.sh && sh install.sh

А если серьезно, то действительно весь процесс займет времени намного больше, чем при установки бинарных дистрибутивов, таких как Дебиан, или Убунту. Однако трудности более чем преодолимы, ввиду следующих обстоятельств.

  1. Качественная документация, о чем говорилось выше.
  2. SystemRescueCd — дистрибутив, созданный с целью восстановления работоспособности системы после аварии, основан на Gentoo. SystemRescueCd очень полезен в качестве установщика, позже на заключительном этапе вам пригодится образ ядра загрузочного LiveCD образа, если возникнут трудности с настройкой и сборкой ядра.
  3. Средство автоматизированной сборки ядра genkernel позволяет безболезненно пройти самый запутанный и неформализуемый процесс конфигурации и сборки ядра. Другие утилиты из набора portage-utils, eix, eselect и другие позволят хорошо ориентироваться в порядке и зависимостях установленных пакетов и избежать состояний блокировки.

Маленькие хитрости

Если по каким-то причинам компиляция пакета прервалась (выключился свет, завис компьютер и т. д.), но технически может быть возобновлена, можно продолжить процесс с этого самого места. Это особенно ценно для LibreOffice, Chromium или qt-webengine, которые собираются не один час.

  1. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild compile
  2. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild install
  3. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild qmerge

Смонтируйте /var/tmp/portage и /usr/portage на SSD, а если у вас немерено оперативной памяти, то можно и на tmpfs, это даст заметный прирост скорости работы emerge.

Можно сделать бинарный бэкапы системных пакетов на всякий пожарный случай.

quickpkg --include-config y <установленная программа>

Использованные материалы и полезные ссылки

habr.com

Простой способ собрать Gentoo Linux из Arch · Neg blog

19 Apr 2016

Лично меня Gentoo Linux привлекает из-за его возможностей для безопасности, а именно его ответвление Hardened Gentoo. Оно существует уже достаточно давно и в целом стабильно. Когда-то Gentoo получил своё имя от самого быстрого пингвина. В те далекие времена в ходу была x86 архитектура и процессоры в массе своей довольно сильно отличались от того что понималось под i686(sse, новые оптимизации и так далее). Конечно, целевые оптимизации имеют место и в настоящее время, но былого прироста, как правило, уже не бывает.

Хотя в любом правиле есть исключения и в тех случаях, когда производительность может сэкономить деньги это может быть полезно. Например если используется большой кластер для распределенной компиляции/тестирования/моделирования, а тем более алгоритмического трейдинга, где низкая латентность очень важна, даже пятипроцентный прирост не помешает. В действительности использование более крутого компилятора, например Intel C++ или последних версий GCC с использованием всяких -Ofast, link time optimization и других экстремальных методов может дать даже больший прирост, 15% и больше.

Впрочем большинство юзеров Gentoo, в том числе я, считают что gentoo уже давно не про оптимизации, а про USE-флаги и всякие тонкие кастомизации. Например из того же арча avahi не выкинуть, даже если оно мне не нравится. На базе генты, например, довольно удобно строить свой целевой дистрибутив.

Для начала подготовим место где это будем собирать. Например у меня для этого сейчас используется ~/src/gentoo

Так что набираем:

mkdir -p ~/src/gentoo ; cd !$

Что ж, начнем с добычи дистрибутива. В данном случае нам пока что понадобится только stage3. Это подготовленный образ системы. Когда-то ещё поддерживалась сборка gentoo из stage1 и stage2, но сейчас этот способ оставили для совсем уж задротов и в хэндбуке он не описан. Связано это скорее всего со сложностью поддержки, особенностями при сборке компиляторов и тп. В общем идем по ссылке

w3m https://www.gentoo.org/downloads/mirrors/

Я рекомендую для России зеркала yandex, потому что они довольно быстрые(~100 Mbit)

Далее шагаем в /gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64-hardened/. Это Hardened multilib ветка для amd64 архитектуры. Любители странного могут попробовать варианты с uClibc, но я точно помню, что под этой либой многое не собирается. Может рассмотрим этот вариант как-нибудь в другой раз, пока что я просто покажу как делать bootstrap.

Извлекаем архив

sudo tar xf stage3-amd64-hardened-20160414.tar.bz2

Сейчас схема немного отличается от той, что написана в хэндбуке. Обычно там предлагается сделать chroot способом типа такого

mount /dev/sdX /mnt/gentoo mkdir -p /mnt/gentoo/boot/efi mount /dev/sdY /mnt/gentoo/boot/efi mount --rbind /dev /mnt/gentoo/dev mount --rbind /sys /mnt/gentoo/sys mount -t proc none /mnt/gentoo/proc cp /etc/resolv.conf /mnt/gentoo/etc/ chroot /mnt/gentoo env-update source /etc/profile

Как видите довольно многословно :)

Вместо этого попробуем сделать это с помощью systemd-nspawn:

sudo systemd-nspawn -M gentoo_hardened -D $(pwd)

Если всё было сделано правильно, то должно получиться что-то вроде

Spawning container gentoo_hardened on /home/user/src/gentoo. Press ^] three times within 1s to kill container.

Плюс такого подхода в том, что нет никакого захламления основной системы точками монтирования и проч, а также является более мощным чем chroot. В нем есть некоторые ограничения, которые в основном направлены на то чтобы нельзя было сломать host систему: нельзя менять часы, сетевые интерфейсы, есть ограничения на запись в /sys, /proc/sys и тп. Короче это упрощенная реализация контейнеров, которая как раз хорошо подходит для этой цели.

Далее сделаем TERM=linux; export $TERM для корректной обработки esc-последовательностей. И вообще обновим переменные окружения.

export TERM=linux env-update && source /etc/profilecd /etc/portage < make.conf cat

Если не работает dns, а сеть есть это можно исправить вот так:

systemctl enable --now systemd-networkd systemd-resolved ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

,набрав это в консоли родительской системы.

Делаем правки по вкусу.

Далее получаем portage.

emerge --sync

Далее выбираем нужный профиль с помощью eselect profile list:

gentoo_hardened portage # eselect profile list Available profile symlink targets: [1] default/linux/amd64/13.0 [2] default/linux/amd64/13.0/selinux [3] default/linux/amd64/13.0/desktop [4] default/linux/amd64/13.0/desktop/gnome [5] default/linux/amd64/13.0/desktop/gnome/systemd [6] default/linux/amd64/13.0/desktop/kde [7] default/linux/amd64/13.0/desktop/kde/systemd [8] default/linux/amd64/13.0/desktop/plasma [9] default/linux/amd64/13.0/desktop/plasma/systemd [10] default/linux/amd64/13.0/developer [11] default/linux/amd64/13.0/no-multilib [12] default/linux/amd64/13.0/systemd [13] default/linux/amd64/13.0/x32 [14] hardened/linux/amd64 * [15] hardened/linux/amd64/selinux [16] hardened/linux/amd64/no-multilib [17] hardened/linux/amd64/no-multilib/selinux [18] hardened/linux/amd64/x32 [19] hardened/linux/musl/amd64 [20] hardened/linux/musl/amd64/x32 [21] default/linux/uclibc/amd64 [22] hardened/linux/uclibc/amd64

Поскольку я планирую дальше использовать systemd, то вариант с hardened/linux/amd64/selinux не подходит, а nomultilib системы я не использую. У альтернативных libc всё ещё довольно много проблем с совместимостью. Из необходимых нужно добавить только use-флаг systemd в make.conf.

В данный момент я рекомендую модифицировать только use-флаги, а опции оптимизации пока что не трогать. Итак:

gentoo_hardened portage # cat make.conf # These settings were set by the catalyst build script that automatically # built this stage. # Please consult /usr/share/portage/config/make.conf.example for a more # detailed example. CFLAGS="-O2 -pipe" CXXFLAGS="${CFLAGS}" # WARNING: Changing your CHOST is not something that should be done lightly. # Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing. CHOST="x86_64-pc-linux-gnu" # These are the USE flags that were used in addition to what is provided by the # profile used for building. MAKEOPTS="-j8" USE="bindist mmx sse sse2 systemd cairo acpi alsa cairo cscope dbus ffmpeg fftw flac gimp iconv imagemagick imap imlib latex lua mp3 mp4 ncurses pcre pdf pulseaudio python ruby udev udisks unicode upnp upnp-av v4l xft xinetd zsh-completion icu policykit ssh threads fontforge png jpeg" PORTDIR="/usr/portage" DISTDIR="${PORTDIR}/distfiles" PKGDIR="${PORTDIR}/packages"

Собираем систему с новыми флагами.

emerge -avuND @world

Я добавил MAKEOPTS=”-j8” для многопоточной сборки в make.conf. Даже на 4790k это может занять довольно продолжительное время.

Перед сборкой из-за множества новых флагов скорее всего сработает autounmask. Что ж, расмаскируем нужное, после чего нужно просто обновить конфиг с помощью dispatch-conf.

Теперь пересоберем всё с -march=native.

gentoo_hardened portage # grep CFLAGS make.conf CFLAGS="-march=native -O2 -pipe" CXXFLAGS="${CFLAGS}"

В данном случае binutils-config и gcc-config нам не нужен, потому что система новая. Поскольку архитектуру мы тоже не трогали, то fix_libtool_files.sh тоже не нужен.

Поправим locale-gen:

env-update emerge --ask binutils gcc glibc

Пересборку binutils gcc glibc рекомендуется выполнять дважды. Далее пересобираем libtool и мир:

emerge --ask libtool emerge -e world

В теории пересобирать мир не обязательно, но в данном случае желательно, потому что система пустая. Точно необходимо пересобирать python, portage-utils и пакеты, которые зависят от perl, которых на самом деле много. Словом лучше не рисковать и пересобрать всё.

Чтобы попасть в собранную систему достаточно воспользоваться:

sudo systemd-nspawn -bD `pwd`

neg-serg.github.io

Установка Gentoo Linux - пошаговая инструкция

Операционная система Linux известна во всем мире. Чаще всего неопытные пользователи используют дистрибутив Ubuntu, т. к. именно он прост и бесплатен. Впрочем, хотя другие дистрибутивы тоже бесплатные, они пользуются меньшей популярностью. Достаточно сложной можно назвать установку Gentoo. Но с нашей инструкцией наверняка все получится.

Что такое Gentoo Linux?

Это дистрибутив, который известен благодаря широким возможностям, комплексности, возможности настройки. Но стоит отметить, что он не для всех, и при работе придется активно включать мозги, ведь без специализированных знаний не получится воспользоваться полным функционалом этой ОС. Часто придется обращаться к разного рода инструкциям, но это уже после. Важно помнить, что установка пакетов в Gentoo осуществляется из источников при помощи специального инструмента PORTAGE. Это сложнее, но зато пользователь может сам выбирать, какие пакеты и функции устанавливать.

В зависимости от объема сборки, установка может занять очень мало времени (пару минут), а может длиться днями.

Преимущества и недостатки

Считается, что именно Gentoo Linux является самым быстрым дистрибутивом. Но везде и всегда есть определенные недостатки. "Гента" (или "Дженту") относится к дистрибутивам Source-based Linux, отчего растет скорость работы. Но часто сэкономленное время приходится тратить на длительную установку (читай: компиляцию) пакетов. Одна из ключевых особенностей "Дженту" - это оптимизация под аппаратное обеспечение. Это достигается благодаря USE-флагам (о них будет информация ниже) оптимизации и сборкам программ из исходников, подключению/отключению разных модулей.

Ключевым плюсом дистрибутива является возможность сделать из него что угодно. Благодаря Portage, Gentoo может стать обычным сервером или рабочей станцией. Второй плюс - гибкость применения. Данный дистрибутив является мультиплатформенным и работает с любыми архитектурами процессоров. Система уже была успешно портирована на следующие архитектуры:

  1. X86.
  2. X64.
  3. ARM.
  4. PowerPc970.
  5. PowerPC.
  6. Dec Alpha.
  7. IBM/390.
  8. 68K.
  9. Sparc.
  10. PA-RISC.
  11. MIPS.
  12. SuperH.
  13. PowerPC G5.

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

В качестве недостатка укажем процесс установки Gentoo. Новичкам, которые ранее не имели опыта использования этого дистрибутива, будет сложно. Но благодаря инструкции все получится.

Как установить Gentoo? Инструкция

Для начала на компьютере должен быть установлен дистрибутив Ubuntu. Вам понадобятся права суперпользователя, поэтому убедитесь, что они есть. Также необходимо подключение к интернету.

Самый первый шаг - это установка в Gentoo chroot. Сделать это можно двумя способами:

  1. В командной строке прописать: sudo apt-get install dchroot debootstrap.
  2. С помощью Synaptic установить пакеты debootstrap и dchroot. Это нужно для того, чтобы ОС Linux думала, что ее "родной" каталог отличается от обычного.

Теперь нам нужно перераспределить разделы диска либо создать новые, если есть свободное место. Но работать с разделами нужно аккуратно, ведь есть риск потерять все данные. На многих форумах пишут, что предпочтительнее иметь много разных разделов. Как минимум нужен будет основной раздел (/), а также разделы /boot и /var. Хотя есть еще /swap (используется для подкачки) и домашний /home.

После создания новых разделов форматируем их. Для разделов /boot, /home, основной (/), /var нужно использовать файловую ext3 или reiser2.

Теперь создаем папки /mnt/gentoo. Для каждого созданного нами раздела необходима своя папка.

Монтируем сюда новые разделы. Для этого в командной строке прописываем:

  1. sudo mount /dev/sda5 /mnt/gentoo.
  2. sudo mount /dev/sda6 /mnt/gentoo/home.

Разделы sda5 и sda6 будут содержать корневой и домашний каталоги.

Обязательно проверьте, правильно ли настроена дата. Если нет, то с помощью команды и синтаксиса можно установить правильную дату: date MMDDhhmmYYYY.

Теперь открываем браузер и переходим на сайт загрузки дистрибутива. Там ищем подходящее зеркало для вашего местоположения.

Из директории releases/ia64/2008.0/stages загружаем tar-архив stage3. Теперь перемещаем архив в папку Gentoo. Делаем это с помощью команды: mv stage3*.bz2* /mnt/gentoo.

Переходим в данный каталог (cd /mnt/gentoo) и проверяем архив при помощи md5. Пишем в командной строке: md5sum -c stage3*.md5. Так вы сможете проверить, не поврежден ли архив и все ли с ним в порядке. Если вы не получите ответа ОК, то придется качать его повторно.

Переходим к следующему шагу установки и настройки Gentoo. Нужно извлечь файлы из архива. Используйте команду: sudo tar xvjpf stage3*.bz2 и ждите завершения.

Настройка Gentoo

Теперь у нас есть в разделе Gentoo основные программы. В обязательном порядке нам понадобится Portage - специальный инструмент для управления пакетами. Благодаря ему мы получим контроль над установленными программами. Для этого снова идем на сайт загрузки. В разделе snapshots ищем последний по дате добавления Portage. Качаем его и перемещаем в папку /mnt/gentoo. Удобнее всего просто прописать команду: tar xvjf /mnt/gentoo/portage-.tar.bz2 -C /mnt/gentoo/usr.

Что такое Portage?

Пару слов следует сказать об этом инструменте. Portage - это система, с помощью которой можно управлять пакетами в дистрибутиве. Она призвана упростить процедуру установки программ и исходных кодов. С ее помощью можно удалять пакеты, обновлять их, проводить синхронизацию по протоколу rsync. Как только Portage загружает файлы, система собирает программу, используя загруженные исходники, и оптимизирует ее.

На этом этапе устанавливаем compile flags. Открываем make.conf, который находится в каталоге /gentoo/etc. Используем обычный текстовый редактор. В документе make.conf.example описана инструкция с переменными make. Хорошо ознакомьтесь с ней. Используйте указанные переменные и конфигурационный файл для установки.

Нам следует убедиться, что настройки были перенесены из дистрибутива Ubuntu без изменений. Главное - это dns-настройка (sudo cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf) и система proc (sudo mount -t proc none /mnt/gentoo/proc).

Если с настройками все в порядке, переходим к chroot. Чтобы сделать его, нужно:

  1. Поменять корневой каталог. В командной строке пишем: sudo chroot /mnt/gentoo /bin/bash
  2. Обновить среду и дать понять терминалу, где он располагается. В командной строке: /usr/sbin/env-update.
  3. Поместить это в память: source /etc/profile.

С этого момента вы находитесь внутри системы Gentoo.

Компиляция ядра

Самый важный этап - это компиляция ядра - части системы, которая определяет, когда и какой программе давать доступ. Без ядра ни одна операционная система не работает. Также устанавливаем пакеты с rsync-сервера. Вводим для этого команду: emerge --sync. Для ясности предположим, что устанавливаться будет ядро версии 2.6. На этом этапе нужно объявить флаги USE, которые дают понять компилятору, какие опции и характеристики применять. Важно указывать правильные флаги, иначе результат может быть не вполне ожидаемым.

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

Чтобы понять, какие USE-флаги нужно выбирать, обязательно смотрите документацию Gentoo.

После выбора флагов открываем make.conf в каталоге /etc/ и вводим их.

Установка часового пояса

Следующий этап - установка часового пояса. Все они есть в каталоге /usr/share/zoneinfo. Переходим сюда, вводим команду ls и видим список доступных. Нужный нам часовой пояс копируем в /etc/localtime. Используем для этого команду: # cp /usr/share/zoneinfo/GMT /etc/localtime.

После настройки часового пояса можно проводить загрузку и компиляцию ядра. Вводим команду: # emerge gentoo-sources. Теперь самый сложный шаг - настройка ядра таким образом, чтобы оно имело поддержку нужных нам пакетов. Если ядро будет установлено неправильно, то нужные функции могут быть недоступными.

Запускаем:

Так мы попадаем в настройки ядра. Выбираем все нужные для загрузки системы драйверы. Нужно проверить, чтобы все они встраивались в ядро, иначе система банально не сможет загрузиться. Не забывайте включить поддержку вашей файловой системы. Выбирайте по возможности все нужные сетевые драйверы: беспроводной и локальной сети, а также тип и семейство процессора.

Теперь для начала компиляции вводим: make && make modules_install. Процесс займет некоторое время. Затем вводим: make -j2 && make modules_install. Образ ядра копируем в папку /boot.

Последнее - настройка модулей ядер. Чтобы найти все доступные модули, запустите команду: find /lib/modules/(kernel version)/ -type f -iname '*.o' -or -iname '*.ko'. Добавляем из списка в папку /etc/modules.autoload.d/kernel-2.6 те, которые загружаются автоматически. На этом этапе установка Gentoo завершена. Вы можете приступать к работе с ОС.

Советы по установке KDE Gentoo

В процессе установки будут возникать проблемы. По-другому просто не может быть. Обязательно обращайтесь на форум по Gentoo для решения своих задач. В любом случае придерживайтесь данной инструкции.

Часто возникают споры о том, как установить Gentoo на UEFI. Важно, чтобы был создан раздел EFI. Он должен быть вариантом файловой системы FAT. В спецификации UEFI написано, что UEFI-firmware работает с FAT12, 16 и 32, однако рекомендуется применять систему FAT32.

Также в tar-архиве может отсутствовать группа и пользователь portage. При использовании schroot на хост-системе их нужно создать вручную. В этом случае файлы в каталоге /gentoo/etc и пароль будут перезаписаны (изменить их можно напрямую).

fb.ru

Готовим свой Linux на базе Gentoo / Хабр

Многие любят Gentoo за ее универсальность. Используя портежи, можно сделать инструмент под любые задачи. И пускай вас не смущает то, что секретарь никогда не будет компилировать Firefox — Боже упаси ей дать возможность ставить софт! Что может быть лучше дистрибутива, установив который вам больше ничего не понадобится с ним делать! Представьте себе — 5-10 минут времени и вы получаете систему с необходимым набором софта, собранного, настроенного и оптимизированного по вашим предпочтениям.

В этой статье я опишу процесс создания своей версии дистрибутива на основе Gentoo при помощи утилит Calculate 2.2. На выходе вы получите гибридный ISO диск для записи на CD/DVD или USB-Flash, полностью совместимый с Gentoo, поддерживающий установку на USB-HDD, USB-Flash, HDD с поддержкой LVM и Raid, файловой системой ext4, ext3, ext2, reiserfs, btrfs, xfs, jfs, nilfs2 или fat32.

Статья в первую очередь адресована всем любителям Gentoo, системным администраторам, преподавателям компьютерных классов школ и вузов, а также всем любителям Linux. Все операции выполняются с правами пользователя root из консоли.

1. То что нам понадобится
Разумеется, у вас уже должен быть установлен Gentoo, либо любой Gentoo-based дистрибутив и настроен доступ к сети интернет. Все операции я выполнял из Calculate Linux Desktop 11.9 KDE 64 бит.

Для начала установите пакеты calculate-assemble и calculate-builder. В Gentoo для этого понадобится подключить оверлей Calculate:

emerge layman layman -a calculate emerge calculate-assemble calculate-builder

Теперь определитесь с тем, какую систему вы хотите собрать. Перед вами выбор базовых образов:

  1. Gentoo Stage3 — прожиточный минимум для начала сборки системы;
  2. Calculate Scratch Server (CSS) — по сути тот же Gentoo Stage3 с ядром, драйверами, загрузчиком, портежами и утилитами Calculate.
  3. Calculate Linux Scratch (CLS) — CSS + Xorg + wireless.
  4. Calculate Linux Desktop с рабочим столом KDE, Gnome или XFCE (CLD, CLDG, CLDX) либо Calculate Directory Server (CDS).

В зависимости от задачи, загрузите последний Stage-архив Gentoo или Stage-образ Calculate и поместите в директории /var/calculate/remote/stages и /var/calculate/linux соответственно:

cd /var/calculate/remote/stages wget mirror.yandex.ru/gentoo-distfiles/releases/x86/current-stage3/stage3-i686-20111018.tar.bz2

или

cd /var/calculate/linux wget mirror.cnet.kz/calculate/CLDX/stages/i686/cldx-20111024-i686.iso

Stage образ Calculate Linux включает дерево портежей. По сути это одно из основных отличий образа Calculate от Gentoo Stage4. Собирая систему из Gentoo Stage, вам также понадобится загрузить портежи в директорию /var/calculate/remote/snapshots:

cd /var/calculate/remote/snapshots wget mirror.yandex.ru/gentoo-distfiles/snapshots/portage-20111024.tar.bz2

Обратите внимание, версии фалов постоянно обновляются. В этой статье я остановлю свой выбор на CLDX 32 бит по следующим причинам:

2. Подготовим систему к сборке
Для подготовки системы к сборке служит утилита cl-assemble. Вы можете воспользоваться любым из доступных профилей. В профилях Calculate Linux флаги подобраны с учётом используемого рабочего стола. CLD оптимизирован с учётом использования Qt/KDE, CLDG — Gtk/Gnome, XFCE — Gtk. Профиль CLDX идеально подойдет, если вы не хотите использовать ни KDE, ни Gnome.

Если в качестве профиля указать «CLDX», программа попросит более точно ввести его название:

Вам также понадобится указать раздел для установки. Это может быть либо раздел жесткого диска (10-15 Гб), либо директория. В случае использования директории, будет тратиться дополнительное время на удаление старых файлов. По умолчанию утилита использует Gentoo Stage3 образ и свежие портежи:

Укажем, что мы хотим взять 32-битный образ CLDX, свежую версию которого можно скачать отсюда mirror.cnet.kz/calculate/CLDX/stages/i686. Для этого понадобится правильно указать профиль и, в случае если мы работаем в 64-битной системе, указать, что мы хотим использовать архитектуру i686:

cl-assemble -p desktop/CLDX/x86/binary -d /dev/sda2 --source=CLDX --march=i686

На моей машине вся подготовка заняла менее 10 минут:

3. Обновим систему
Для сборки системы служит утилита cl-make. Обратите внимание на несколько параметров. Если вы хотите собрать систему со Stage3 — используйте опцию сборки системы "-m" (или "--make"), если из образа Calculate — опцию обновления системы "-u", (или "--update"). Обратите внимание на опцию "-V" (или "--withvideo") для копирования проприетарных видеодрайверов. Копирование без установки пресекает нарушение лицензии GPL, при этом у вас остаётся выбор проприетарного видеодрайвера, который будет инсталлирован в систему во время процесса загрузки.

cl-make -u -V

Выполним обновление:

В приведенном примере я не указывал собираемый профиль. Его следует вводить в случае, если вы ставите на сборку несколько систем одновременно. Например, 32 и 64 битную версии. В этом случае профиль можно ввести как "-p amd64" и "-p x86". Путем сравнения собираемых версий, программа попытается определить нужный профиль.

В моем случае потребовалось обновить около 40 пакетов.

Свои действия утилиты Calculate отписывают в файл /etc/calculate/assemble.env:

Некоторые значения, например rsync-сервер портежей, доступные разделы, можно прописать в переменных утилит. Пример с реального сервера сборки:

После указания доступных разделов, передавать параметр раздела сборки уже не обязательно.

Я успел написать этот текст пока система обновляется. Мне попались под обновление сразу gtk с python, лучше бы я взял сегодняшний образ. Несмотря на то, что я выбрал бинарный профиль, компиляция идет из исходников. Пойду налью себе кофе :)

4. Внесем изменения
Наконец добрались до самого интересного. Что мы можем изменить:

Как вы могли заметить, образ развернулся в директорию /mnt/calculate-desktop-CLDX-x86-binary/. Используйте этот путь для внесения изменений. На скриншотах видно, что с развернутой системой производится некоторая настройка. Собственно все шаблоны настройки можно посмотреть в директории /usr/share/calculate/templates/assemble/. Важно вносить изменения так, чтобы не вызывать конфликт настроек. Где-то можно создать свои шаблоны изменений, где-то использовать альтернативные файлы. Рассмотрим теперь подробней.

4.1. Флаги сборки
Управление параметрами сборки пакетов осуществляется через USE-флаги. Урезая зависимости, вы можете добиться нескольких преимуществ:

Давайте посмотрим на содержимое переменной USE. Для этого в собираемой системе нужно выполнить следующую команду:

linux32 chroot /mnt/calculate-desktop-CLDX-x86-binary /bin/bash -c "emerge --info"

Обратите внимание, я использовал вызов chroot через утилиту linux32, т.к. я выполняю сборку 32-битной системы из-под 64-битной. В противном случае в утилите linux32 нет необходимости.

Флагов будет великое множество. Более подробно о них можно узнать, почитав следующие описания: общие — /usr/portage/profiles/use.desc и индивидуальные — /usr/portage/profiles/use.local.desc.

Для внесения изменений в флаги применительно ко всем пакетам сразу используется файл make.conf. В процессе сборки содержимое файла /etc/make.conf будет переписываться, поэтому для внесения изменений, мы рекомендуем использовать альтернативный путь — /etc/portage/make.conf.

В качестве примера, давайте исключим поддержку адресации ipv6 во всех пакетах, для этого добавьте в файл /mnt/calculate-desktop-CLDX-x86-binary/etc/portage/make.conf следующую строчку:

USE="-ipv6"

Посмотрим что получится. В этот раз запустим обновление с флагом "-U", вместо "-u". Это позволит сэкономить время на синхронизацию портежей. Выполним 'cl-make -U -V':

Примечание. Так как при обновлении пакетов был пересобран Xorg сервер, в конце программа выполнит пересборку его модулей. Если вы будете запускать несколько сборок подряд, анализируя файл emerge.log, программа будет каждый раз пересобирать драйвера Xorg-сервера. Чтобы этого не происходило, вы можете удалить файл var/log/emerge.log в директории собираемой системы. Во время запаковки системы в образ, этот файл будет в любом случае удален.

4.2. Флаги и маски пакетов
Для изменения флагов и масок используются следующие пути: etc/portage/package.use, etc/portage/package.keywords, etc/portage/package.mask, etc/portage/package.unmask. Менеджер пакетов emerge 2.2 умеет размаскировывать зависимости.

Рассмотрим размаскировку пакетов, на примере браузера Firefox. Для начала сменим корневой каталог:

linux32 chroot /mnt/calculate-desktop-CLDX-x86-binary env-update && source /etc/profile

Определим правильное название пакета firefox и узнаем список доступных версий:

eix firefox * www-client/firefox Available versions: *3.6.12 3.6.20 ~3.6.21 ~3.6.22 ~7.0.1-r1

Стабильная версия пакета 3.6.20. Размаскируем версию 7.0.1-r1:

Для обновления настроек используем утилиту dispatch-conf вместо etc-update:

Утилита обновит маски и USE-флаги. В обоих случаях нажмите «u» для принятия изменений.

Здесь же вы можете проверить и выписать названия других пакетов, необходимых для сборки. В конце, чтобы проверить все зависимости, выполните:

emerge -p пакет1 пакет2 ..

4.3. Добавление пакетов
Все устанавливаемые пакеты, за исключением зависимостей, прописываются в файле 'world'. Если вы ставите пакет, он, вместе с зависимыми библиотеками, устанавливается в систему. Если какие-либо библиотеки в последствии пакету уже не понадобятся, команда 'emerge --depclean' их удалит. Поэтому важно, чтобы все пакеты (без зависимостей), которые вы установили дополнительно, были прописаны в файле 'world'. Удалить их можно опять же командой 'emerge --unmerge' с указанием пакета(ов) или вручную, отредактировав файл и выполнив 'emerge --depclean'.

Для построения дерева зависимостей утилиты Calculate используют мета-пакеты, в основе которых лежит app-misc/calculate-meta. Посредством USE-флагов строятся всё дерево зависимостей. Так как в процессе сборки вы могли устанавливать для проверки софт, файл var/lib/portage/world перед запаковкой будет содержать только один этот мета-пакет.

Для того, чтобы добавить свои пакеты в дистрибутив, в портежах есть замечательный инструмент — сеты. При помощи сетов вы сможете подготовить свои тематические подборки программ. Сеты поддерживают вложения, что тоже очень удобно. Вы можете отредактировать свой список пакетов, воспользоваться сетом custom, находящемся в фале /etc/portage/sets/custom@, вписав в него строчку:

www-client/firefox

Либо создать новый сет с другим именем, например 'web', вписав в него пакет, а в файле 'custom' указать ссылку на него:

@web

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

Во время обновления системы программы из сета будут установлены, т.к. сет прописан в своем world-файле, находящемся в /var/lib/portage/world_sets.

4.4. Удаление пакетов
Если очистить файл world и выполнить 'emerge --depclean', мы получим Stage3-образ. Т.е. прожиточный минимум всё же имеется и называется он 'system'. Обновить его можно командой 'emerge system', либо используя сет — 'emerge system'. Мета-пакет calculate-meta строит зависимости исходя из выбранного профиля. Используя USE-флаги calculate_nowireless, calculate_nonetwork, calculate_noxfce и т.п., можно исключить часть зависимостей. Полный список флагов можно посмотреть в файле /var/lib/layman/calculate/profiles/desc/calculate.desc. Для примера, давайте отключим поддержку беспроводных устройств. Для этого отредактируете файл /etc/portage/make.conf, вписав в него:

CALCULATE="nowireless"

5. Сохраним изменения
Мы добавили браузер firefox, удалили поддержку беспроводных устройств, давайте теперь обновим образ:

cl-make -U -V

Пакет firefox будет установлен, а лишние зависимости удалены:

5. Создадим новый образ
Для создания образа используйте утилиту cl-image:

cl-image --live iso

Опция "--live" позволит выиграть несколько секунд при загрузке с LiveCD или USB-Flash. Используйте эту опцию, если вы используете свежий Stage-образ Calculate Linux.

6. Завершение сборки
В случае необходимости, либо по завершению установки можно прервать сборку выполнив:

cl-make --break

7. Итог
Для эксперимента я выбрал дистрибутив Calculate Linux Desktop XFCE и воспользовался бинарным профилем CLDX. Все дальнейшие обновления системы я буду выполнять с учётом своих USE-флагов, командой 'emerge -uDNa world'. В случае, если флаги будут полностью совпадать, пакет будет установлен из бинарного репозитория, если будут различия — пакет соберется на моей машине.

Я получил образ с необходимым мне набором программного обеспечения. Не все из описанных возможностей я задействовал. Например в дистрибутиве можно подготовить шаблоны настройки рабочего стола пользователя (см. habrahabr.ru/blogs/linux/129658).

В следующей статье, если будет достаточный интерес, я опишу как можно получить тот же результат более наглядно и без использования жесткого диска ;-)

habr.com

Обзор Gentoo Linux - Дмитрий Ушаков

Я долго не писал, потому-что тема, о которой пойдет речь в этой статье требует много времени. Gentoo довольно известный дистрибутив среди красноглазых пользователей. Почему? Пользуясь Gentoo, вы становитесь повелителем системы, которая как влажная глина готова принять любую форму, которую вы хотите, с любым функционалом, который вам нужен. Нужно только разбираться в ней. Вы собираете из исходников нужный вам софт включая или отключая зависимости от других пакетов с помощью USE флагов и тратите много времени на компиляцию программ. Поэтому gentoo-шники знают, что такое время. Во время обзора мы пропустим описание процедуры установки. Во-первых она много раз описана, а обзор такие системы получают не очень часто, во вторых — это тянет на текст размером на эту статью, в третьих ввиду отсутствия установщика, опыт и порядок установки у каждого может быть свой.

Portage

В первую очередь Gentoo известен тем, что это дистрибутив из исходников. Это даёт некоторые преимущества: вы можете изменять функционал пакета, избегать лишних зависимостей, оптимизировать компилируемый код, при этом жертвуете временем на установку ПО. Работает это так: читаются файлы из директории /etc/portage — make.conf и package.(use/license/accept_keyword), затем portage обращается в директорию /usr/portage, где присутствуют инструкции установки ПО.

/usr/portage — это дерево портежей, там находятся ebuild файлы, где находятся описание пакета и инструкции его сборки.make.conf содержит настройки для сборки пакетов, например:CFLAGS — флаги компилятора CMAKEOPTS — флаги утилиты makeCXXFLAGS — флаги компилятора C++USE — флаги, изменяющие параметры сборки и зависимости пакетов. В моём случае эта переменная выглядит так:USE="bindist mmx sse sse2 qt4 qt3support opengl kde dbus policykit networkmanager"PORTDIR — путь к дереву портажей.DISTDIR — путь к папке, куда скачиваются исходники.PKGDIR — путь к папке, куда скачиваются бинарные файлы.LINGUAS — флаги, указывающие, какие языки должны поддерживаться скомпилированным ПО.GENTOO_MIRRORS — зеркала.SYNC — зеркала для синхронизации.

В make.conf могут быть флаги, предназначенные для конкретных пакетов, например:INPUT_DEVICES — для указания устанавливаемых драйверов устройств ввода.VIDEO_CARDS — для указания устанавливаемых драйверов видеокарт.

Синтаксис флагов, влияющих на конфигурацию сборки таков: через пробел перечисляются флаги. Если перед именем флага стоит минус, то его следует отключить, если нет, то его следует включить.

А что делать, если нужно поменять USE флаги у конкретного пакета? Для этого есть файл package.use, в котором, в каждой строчке указывается, как должны изменяться USE флаги у конкретного пакета. Выглядит строка так:app-foo/bar flag1 flag2 -flag3На этом примере мы у пакета app-foo/bar включили флаги flag1, flag2 и отключили flag3.Аналогично устроены файлы package.license и package.accept_keyword.

Сколько времени займет установка Gentoo?

Вы потратите на это около суток. Если у вас компьютер гораздо мощнее моего, то полсуток. Опустим то время, которое вы потратите на то, чтобы разобраться с системой и настроить все подряд. В случае с Gentoo тут уместна шутка: «В linux вы можете настроить абсолютно все, и вы будете настраивать абсолютно все». В качестве приблизительного времени затраченного на установку системы можно взять время на пересборку мира и по оптимистическим прикидкам добавить два часа. А сколько времени займёт пересборка мира? На моей машине с Intel Celeron T3000 с двумя ядрами на частоте 1.8 GHz я с помощью утилиты time измерил время двух пересборок времени. Во время пересборки я не пользовался компьютером и завершил работу X-сервера и дисплейного менеджера, чтобы на время сборки не влияли процессы из окружающей среды. Пересборка мира происходила в чистой консоли.Система пересобиралась с миром в таком составе(без зависимостей):app-admin/sudoapp-benchmarks/sysbenchkde-base/kde-l10nkde-base/kdebase-metakde-base/kdegraphics-metakde-base/kdemultimedia-metakde-misc/plasma-nmnet-misc/dhcpcdnet-misc/networkmanagersys-boot/grubsys-fs/ntfs3gsys-kernel/genkernelsys-kernel/gentoo-sourceswww-client/firefoxwww-plugins/adobe-flashx11-base/xorg-driversx11-base/xorg-serverВремя пересборки мира с флагом -O2: 16 часов 54 минуты 30 секунд.Время пересборки мира с флагом -O2: 17 часов 36 минут 47.7 секунд.Итого, по самым оптимистическим прогнозам на моей машине у вас на это уйдет около 19 часов.

Сравнительные тесты производительности

Возможно, вы хотите поставить Gentoo ради увеличения производительности. В этом случае не стоит ждать чуда, Gentoo следует ставить для того, чтобы в нем поиграться, а не ради объективного прироста скорости. Для того, чтобы оценить производительность Gentoo, я воспользовался синтетическим тестом sysbench, доступным, как в Gentoo, так и в Archlinux. В тестировании участвуют Archlinux и Gentoo в двух эпостасиях, один собран с флагом -O2, другой с флагом -O3. Оба собраны под мою архитектуру процессора. В Archlinux, по умолчанию, пакеты собраны с флагом оптимизации -O2. Надо сказать, что -O3 нигде не используют, потому что это дает нестабильный код и в системе могут возникать из-за этого косяки.Обе системы тестировались по одинаковому сценарию:sysbench --num-threads=3 --test=cpu --max-requests=100000 runsysbench --num-threads=3 --test=memory runsysbench --num-threads=3 --test=threads --max-requests=1000000 runsysbench --num-threads=3 --test=mutex runТесты во всех системах, так же как и пересборка мира происходили в условиях голой консоли, чтобы исключить разницу в средах рабочего стола и их работу.Результаты тестирования такие:

Archlinux

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing CPU performance benchmark

Threads started!Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:total time: 70.6054stotal number of events: 100000total time taken by event execution: 211.6264per-request statistics:min: 1.40msavg: 2.12msmax: 18.09msapprox. 95 percentile: 8.08ms

Threads fairness:events (avg/stddev): 33333.3333/199.64execution time (avg/stddev): 70.5421/0.01

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing memory operations speed testMemory block size: 1K

Memory transfer size: 102400M

Memory operations type: writeMemory scope type: globalThreads started!Done.

Operations performed: 104857600 (320179.60 ops/sec)

102400.00 MB transferred (312.68 MB/sec)

Test execution summary:total time: 327.4962stotal number of events: 104857600total time taken by event execution: 736.6757per-request statistics:min: 0.00msavg: 0.01msmax: 20.04msapprox. 95 percentile: 0.00ms

Threads fairness:events (avg/stddev): 34952533.3333/392593.85execution time (avg/stddev): 245.5586/0.10

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing thread subsystem performance testThread yields per test: 1000 Locks used: 8Threads started!Done.

Test execution summary:total time: 309.9045stotal number of events: 1000000total time taken by event execution: 928.5172per-request statistics:min: 0.49msavg: 0.93msmax: 7.81msapprox. 95 percentile: 1.62ms

Threads fairness:events (avg/stddev): 333333.3333/8782.25execution time (avg/stddev): 309.5057/0.01

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing mutex performance testThreads started!Done.

Test execution summary:total time: 0.0328stotal number of events: 3total time taken by event execution: 0.0843per-request statistics:min: 25.38msavg: 28.11msmax: 30.21msapprox. 95 percentile: 10000000.00ms

Threads fairness:events (avg/stddev): 1.0000/0.00execution time (avg/stddev): 0.0281/0.00

Gentoo -O2

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing CPU performance benchmark

Threads started!Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:total time: 71.6212stotal number of events: 100000total time taken by event execution: 214.7179per-request statistics:min: 1.43msavg: 2.15msmax: 31.44msapprox. 95 percentile: 11.43ms

Threads fairness:events (avg/stddev): 33333.3333/305.08execution time (avg/stddev): 71.5726/0.01

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing memory operations speed testMemory block size: 1K

Memory transfer size: 102400M

Memory operations type: writeMemory scope type: globalThreads started!Done.

Operations performed: 104857600 (319716.03 ops/sec)

102400.00 MB transferred (312.22 MB/sec)

Test execution summary:total time: 327.9710stotal number of events: 104857600total time taken by event execution: 738.3507per-request statistics:min: 0.00msavg: 0.01msmax: 30.02msapprox. 95 percentile: 0.00ms

Threads fairness:events (avg/stddev): 34952533.3333/51842.16execution time (avg/stddev): 246.1169/0.26

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing thread subsystem performance testThread yields per test: 1000 Locks used: 8Threads started!Done.

Test execution summary:total time: 245.3740stotal number of events: 1000000total time taken by event execution: 734.9378per-request statistics:min: 0.41msavg: 0.73msmax: 20.89msapprox. 95 percentile: 1.20ms

Threads fairness:events (avg/stddev): 333333.3333/3919.56execution time (avg/stddev): 244.9793/0.00

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing mutex performance testThreads started!Done.

Test execution summary:total time: 0.0349stotal number of events: 3total time taken by event execution: 0.0931per-request statistics:min: 27.87msavg: 31.05msmax: 34.65msapprox. 95 percentile: 10000000.00ms

Threads fairness:events (avg/stddev): 1.0000/0.00execution time (avg/stddev): 0.0310/0.00

Gentoo -O3

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing CPU performance benchmark

Threads started!Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:total time: 70.9476stotal number of events: 100000total time taken by event execution: 212.6414per-request statistics:min: 1.42msavg: 2.13msmax: 31.43msapprox. 95 percentile: 11.42ms

Threads fairness:events (avg/stddev): 33333.3333/357.73execution time (avg/stddev): 70.8805/0.01

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing memory operations speed testMemory block size: 1K

Memory transfer size: 102400M

Memory operations type: writeMemory scope type: globalThreads started!Done.

Operations performed: 104857600 (320861.15 ops/sec)

102400.00 MB transferred (313.34 MB/sec)

Test execution summary:total time: 326.8005stotal number of events: 104857600total time taken by event execution: 733.6188per-request statistics:min: 0.00msavg: 0.01msmax: 30.02msapprox. 95 percentile: 0.00ms

Threads fairness:events (avg/stddev): 34952533.3333/159953.84execution time (avg/stddev): 244.5396/0.32

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing thread subsystem performance testThread yields per test: 1000 Locks used: 8Threads started!Done.

Test execution summary:total time: 248.2071stotal number of events: 1000000total time taken by event execution: 743.4171per-request statistics:min: 0.41msavg: 0.74msmax: 18.89msapprox. 95 percentile: 1.24ms

Threads fairness:events (avg/stddev): 333333.3333/31662.96execution time (avg/stddev): 247.8057/0.03

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:Number of threads: 3

Doing mutex performance testThreads started!Done.

Test execution summary:total time: 0.0295stotal number of events: 3total time taken by event execution: 0.0690per-request statistics:min: 21.19msavg: 23.01msmax: 25.39msapprox. 95 percentile: 10000000.00ms

Threads fairness:events (avg/stddev): 1.0000/0.00execution time (avg/stddev): 0.0230/0.00

Для репрезентативности приведём сравнительные тесты в таблице:
Системы Archlinux Gentoo -O2 Gentoo -O3
Время на CPU тесте 70.6054s 71.6212s 70.9476s
Время на тесте памяти 327.4962s 327.9710s 326.8005s
Время на тесте многопоточности 309.9045s 245.3740s 248.2071s
Среднее время запроса на mutex тесте 28.11ms 31.05ms 23.01ms
Время, затраченное на пересборку мира _ 1014m30.079s 1056m47.770s

Во первых, обратим внимание, что на тестах процессора и памяти, код, оптимизированный для этого процессора не дал значительных успехов. Во вторых, очень заметно преимущество Gentoo перед Arch в тесте многопоточности. Этот синтетический тест показывает прирост производительности в 26%, это означает, что в реальных многопоточных приложениях вы можете получить не более четверти производительности. В четвертых, вам нужно потратить всего 17 часов, на то чтобы скомпилировать систему с такой производительностью. Что больше вы потратите своего и машинного времени на пересборки мира, или сэкономите машинное время на решение задачи после сборки системы — решайте сами.

Особенности Gentoo

Если вы решили поставить эту систему на свой компьютер, привыкайте к некоторым особенностям системы. Вам следует ждать, что:

Не то, чтобы я сильно придирался, просто я хотел бы предупредить, что если вам компьютер нужен не для того, чтобы играться с ОС, а для того, чтобы работать, Gentoo, скорее всего, — это не ваш выбор. Если вы вдохновившись этой статьей поставите Gentoo и будите плеваться, я вас предупредил. Но взамен этих неудобств он дает некоторые плюшки:

Итоги

Итак. Поставив Gentoo вы получаете систему, которая несоизмеримо долго компилируется, её сложно поддерживать и легко случайно сломать, систему, благодаря которой вы узнаете что такое время и набьете себе шишек на лбу об подводные грабли. В замен вы получаете возможность отключать не нужные зависимости и небольшой прирост в скорости. Вопрос: нужна вам такая система? Да, нужна. Это замечательный полигон, для тренировки ваших способностей работы с linux системой. Это хороший опыт поломок и ремонтов ОС и незаменимый инструмент для выпрямления рук. Но и наконец, потому что Gentoo — это круто.

dm-ushakov.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта