Предлагаю в этой теме (согласен, название темы не отличается оригинальностью) сохранять «трюки и маленькие хитрости», связанные с Gentoo и родственными ему дистрибутивами. Уверен, что каждый «гентушник» имеет в запасе, как собственные наработки — алиасы и функции оболочек, скрипты, необычное применение «обычных» команд и т. д., так и советы, найденные в Интернете.
На авторство не претендую, привожу в качестве примера:
1. Всем известно, что после обновления xorg-server'а требуют пересборки драйвера устройств ввода и видеокарты. Я, к примеру, делаю это так:

emerge -1 $(qlist -I -C x11-drivers/)

2. В логе (/var/log/emerge.log) дата и время записываются в формате UNIX — «количество секунд, прошедших с полуночи 1 января 1970 года без учета високосных секунд» и не очень понятном для человека:

tail -n5 /var/log/emerge.log
1279478929:  === (1 of 1) Post-Build Cleaning (app-doc/pms-3::/usr/portage/app-doc/pms/pms-3.ebuild)
1279478929:  ::: completed emerge (1 of 1) app-doc/pms-3 to /
1279478929:  *** Finished. Cleaning up...
1279478930:  *** exiting successfully.
1279478931:  *** terminating.

Добавив в ~/.zshrc несложную функцию

lemerge () { cat /var/log/emerge.log | awk -F: '{print strftime("%c", $1),$2}' | less }

получаем:

lemerge
...
Вск 18 Июл 2010 21:48:49   === (1 of 1) Updating world file (app-doc/pms-3)
Вск 18 Июл 2010 21:48:49   === (1 of 1) Post-Build Cleaning (app-doc/pms-3
Вск 18 Июл 2010 21:48:49   
Вск 18 Июл 2010 21:48:49   *** Finished. Cleaning up...
Вск 18 Июл 2010 21:48:50   *** exiting successfully.
Вск 18 Июл 2010 21:48:51   *** terminating.
...
Был, был и весь вышел...

2

Заметно увеличивается скорость установки при журналировании методом journal_data_writeback на ext3/4. Теперь, при установке, всегда ставлю этот параметр, а после уже возвращаю в journal_data_ordered.

3

Macumazan пишет:

Заметно увеличивается скорость установки при журналировании методом journal_data_writeback на ext3/4. Теперь, при установке, всегда ставлю этот параметр, а после уже возвращаю в journal_data_ordered.

Возможно, этот топик будут читать люди, впервые увидевшие Linux, и Gentoo в частности, поэтому, чтобы ваш совет принёс реальную пользу, распишите более подробно, т. е.
1. Создаём файловую систему со следующими опциями...
2. Монтируем полученный раздел командой mount с опциями...
3. После установки настраиваем /etc/fstab следующим образом...

Был, был и весь вышел...

4

Следующий совет относится не только к Gentoo.
Включение в ядре опций CONFIG_IKCONFIG=y и CONFIG_IKCONFIG_PROC=y позволяет не только сохранить содержимое конфигурационного файла ядра в нём самом, но и получить к нему доступ в «режиме реального времени» посредством /proc/config.gz. Для доступа к данному файлу очень удобно использовать команду zgrep или её расширенный вариант zegrep.
Так, к примеру, можно увидеть только включённые в загруженном ядре опции, относящиеся к ACPI и Power Menagment:

 Консоль:

zegrep 'ACPI|PM_' /proc/config.gz | grep -v '^#'
CONFIG_PM_SLEEP=y
CONFIG_PM_STD_PARTITION="/dev/sda2"
CONFIG_PM_OPS=y
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_PROCFS=y
CONFIG_ACPI_PROCFS_POWER=y
CONFIG_ACPI_SYSFS_POWER=y
CONFIG_ACPI_PROC_EVENT=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_BLACKLIST_YEAR=2000
CONFIG_X86_PM_TIMER=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_PNPACPI=y
CONFIG_ATA_ACPI=y

Включение опции CONFIG_IKCONFIG=y даёт ещё один «бонус» — позволяет узнать конфигурацию незагруженного в данный момент ядра. Для этого служит скрипт /usr/src/linux/scripts/extract-ikconfig, которому следует передать в качестве аргумента образ ядра.

Был, был и весь вышел...

5

По мотивам темы «http://linuxforum.ru/viewtopic.php?id=6360»

Пытаясь настроить отображение температуры жёсткого диска в conkyузнал вспомнил, что данные о жёстком диске моего ноутбука не содержатся в базе утилиты app-admin/hddtemp.
С помощью команды

 Консоль:

smartctl -a /dev/sda | egrep 'Device Mode|Model Family|Temperature'
Model Family:     Hitachi Travelstar 5K100 series
Device Model:     HTS541080G9SA00
194 Temperature_Celsius     0x0002   110   110   000    Old_age   Always       -       50 (Lifetime Min/Max 14/63)

узнал необходимые для пополнения базы данных значения и занёс их в свою собственную базу данных ab
 Консоль:

mkdir -p /usr/local/share/hddtemp/
echo -e '"HTS541080G9SA00"\t194 C\t"Hitachi Travelstar 5K100 series"' > /usr/local/share/hddtemp/hdd_$(hostname).db

Решение использовать собственный файл с данными вызвано тем фактом, что на ноутбуке жёсткий диск единственный и изменений не предвидится, а штатные базы данных переписываются при каждом обновлении app-admin/hddtemp.
Чтобы hddtemp при запуске пользовался созданной базой, внёс небольшие изменения в её файл конфигурации:
 Консоль:

egrep -v '^#|^$' /etc/conf.d/hddtemp
HDDTEMP_EXEC=/usr/sbin/hddtemp
HDDTEMP_OPTS="-l 127.0.0.1  -f /usr/local/share/hddtemp/hdd_gentoo-laptop.db"
HDDTEMP_DRIVES="/dev/sda"

Был, был и весь вышел...

6

В пакете app-portage/eix есть очень удобная утилита eix-remote, позволяющая получать и обновлять кэш оверлеев app-portage/layman. К сожалению, последних месяца полтора-два она перестала работать, выдавая

 Консоль:

eix-remote update
* Fetching eix-caches.tbz2
--2010-09-08 13:57:04--  http://dev.gentooexperimental.org/eix_c … aches.tbz2
Распознаётся dev.gentooexperimental.org... сбой: Имя или служба не известны.
wget: unable to resolve host address «dev.gentooexperimental.org»
* could not fetch http://dev.gentooexperimental.org/eix_c … aches.tbz2

Совет sergtat'а на русскоязычном форуме Gentoo позволил если не решить, то обойти эту проблему. Команду обновления кэша следует запускать так
 Консоль:

либо предварительно выполнив
 Консоль:

echo 'EIX_REMOTE_OPTS="-a http://91.191.147.225/eix_cache/eix-caches.tbz2"' >> /etc/eixrc

использовать команду «по-старинке»:
 Консоль:

eix-remote update

Был, был и весь вышел...

7

Периодически сталкиваюсь с пользователями, по той или иной причине удалившими важный системный пакет — gcc, glibc, python и т.д., в связи с чем не имеющими возможности провести восстановление системы штатными средствами.
Помочь им может http://tinderbox.dev.gentoo.org/ — репозиторий бинарных пакетов для Gentoo.
Порядок действий примерно такой:

1. Находим бинарный пакет нужной, или максимально близкой, версии под требуемую архитектуру.
2. Загружаем в локальный каталог бинарных пакетов (по-умолчанию /usr/portage/packages).

cd /usr/portage/packages
wget http://tinderbox.dev.gentoo.org/default-linux/x86/sys-devel/gcc-4.4.4-r2.tbz2

3. Устанавливаем

emerge -K sys-devel/gcc
Был, был и весь вышел...

8 (18.12.2010 23:03:47 отредактировано neocrust)

Если после минимальной установки Gnome, не работает меню «Приложения»

Выполните следующую команду в терминале (из-под рута):

cp /etc/xdg/menus/gnome-applications.menu /etc/xdg/menus/applications.menu 

9

Всякий пользователь Gentoo рано или поздно сталкивается с ситуацией, когда система «жалуется» на отсутствующий файл. Часто название этого файла совершенно не «говорит» о том, какому пакету он может принадлежать.
Для решения подобных проблем до последнего времени я пользовался PFL Query 2 — сервисом поиска файлов из неустановленных пакетов.
Сегодня совершенно случайно я узнал о программе командной строки для этого сервиса — app-portage/pfl

Был, был и весь вышел...

10

Чтобы уменьшить объем скачиваемых исходников при обновлении, ставится приложение app-portage/getdelta, затем в файл /etc/make.conf добавляется строка:

FETCHCOMMAND="/usr/bin/getdelta.sh \"\${URI}\" -O \"\${DISTDIR}/\${FILE}\""

А чтобы wget (приложение которое скачивает исходники/дельты) нормально работало (с недавних пор почему-то перестало), в файл /etc/wgetrc добавляется строка:

content-disposition = on
...встречаются два *nix'оида: 1'ый - Вендекапец!.. 2'ой - Воистину вендекапец!..

11

Наконец-то нашёл готовые конфигурации ядер под любые архитектуры:
http://kernel-seeds.org/

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

12

newzenon пишет:

Наконец-то нашёл готовые конфигурации ядер под любые архитектуры:
http://kernel-seeds.org/

и зеркала

Mirror: http://62.3.120.141/~pappy/
Mirror 2: http://kernel-seeds.bloodnoc.org/
Mirror 3: http://kernel-seeds.audiodef.com/
Mirror 4: http://www.elilabs.com/~pappy/

13

Macumazan, тестировал? И если да то на каком железе?

14

На писюке. Конфиги требуют более тщательного внимания к себе, чем доводка результата  после make defconfig.

15

Довольно редкий тип коллизии на примере установки libreoffice 3.4.
Пакет был успешно собран но не установился по причине  отсутствия свободного места на диске. Все дальнейшие попытки его поставить вываливались с ошибкой

.............
 *     /usr/lib64/libreoffice/basis3.4/share/config/wizard/web/styles/violet.css
 *     /usr/lib64/libreoffice/basis3.4/share/config/wizard/web/styles/water.css
 *     /usr/lib64/libreoffice/program/services.rdb
 * 
 * Searching all installed packages for file collisions...
 * 
 * Press Ctrl-C to Stop
 * 
 * None of the installed packages claim the file(s).
 * 
 * Package 'app-office/libreoffice-3.4.3.2-r1' NOT merged due to file
 * collisions. If necessary, refer to your elog messages for the whole
 * content of the above message.
!!! When you file a bug report, please include the following information:
GENTOO_VM=sun-jdk-1.6  CLASSPATH="" JAVA_HOME="/opt/sun-jdk-1.6.0.26"
JAVACFLAGS="-source 1.6 -target 1.6" COMPILER=""
and of course, the output of emerge --info

Причиной этого послужило то, что в системе остались только те файлы после первой установки пакета, которые успели записаться на диск. Но т.к. пакет в итоге не установился, то portage начинает сигналить о коллизиях.
Решение очевидно - грохнуть те файлы, которые остались после первой  неудачной попытки установки пакета. Вычислить их можно либо на сайте http://www.portagefilelist.de/site/start , либо собрать бинарный пакет без установки и посмотреть его содержимое

 Консоль:
tar -jtf /var/spool/packages/app-office/libreoffice-3.4.3.2-r1.tbz2

16 (14.12.2011 03:52:43 отредактировано zenon)

Дабы не забыть. Полчаса втыкал почему у меня лишнее стартует... вспомнил куда запихнул.  :lol:
Автостарт скриптов, вообще чего либо при загрузке.

cat /etc/local.d/README
This directory should contain programs or scripts which are to be run
when the local service is started or stopped.

If a file in this directory is executable and it has a .start extension,
it will be run when the local service is started. If a file is
executable and it has a .stop extension, it will be run when the local
service is stopped.

All files are processed in lexical order.

Закинуть скрипт в каталог /etc/local.d/ и сделать исполняемым, название файла должно быть с расширением .start, например myscript.start

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

17 (30.03.2012 07:51:03 отредактировано megabaks)

велосипед, который едет :3
откат glibc

#!/bin/bash

[[ ${1} == "" ]] && echo -e "Usage: bash ${0} [VERSION] [ARCH] \nexample: bash ${0} 2.14.1-r2 32" && exit 1
[[ ${2} == "" ]] && echo -e "Usage: bash ${0} [VERSION] [ARCH] \nexample: bash ${0} 2.14.1-r2 32" && exit 1

AVAILABLE=`emerge -p glibc | awk '/sys-libs\/glibc/ {print $4}'`
[[ "${AVAILABLE/sys-libs\/glibc-/}" > "${1}" ]] && echo -e "you need mask:\n>sys-libs/glibc-${1}" && exit 1

##### find and define some stuff
export "$(emerge --info | grep 'PORTDIR=' | tr -d \")"
export "$(emerge --info | grep 'PORTAGE_TMPDIR=' | tr -d \")"
export "$(emerge --info | grep 'CFLAGS=' | tr -d \")"
export "$(emerge --info | grep 'CXXFLAGS=' | tr -d \")"
export "$(emerge --info | grep 'LDFLAGS=' | tr -d \")"

DIR="${PORTAGE_TMPDIR}/portage/sys-libs/glibc-${1}/image"

##### binary package for subj
quickpkg sys-libs/glibc

##### you need to make portage think that it has not installed glibc yet
rm -Rf /var/db/pkg/sys-libs/glibc-*

##### compile target glibc
ebuild ${PORTDIR}/sys-libs/glibc/glibc-${1}.ebuild install || exit 1

##### fix environment
case ${2} in
32 ) export LDFLAGS="-L${DIR}/lib -L${DIR}/usr/lib $LDFLAGS";;
64 ) export LDFLAGS="-L${DIR}/lib64 -L${DIR}/usr/lib64 -L${DIR}/lib32 -L${DIR}/usr/lib32 $LDFLAGS";;
esac

export CXXFLAGS="-I${DIR}/usr/include $CXXFLAGS"
export CFLAGS="-I${DIR}/usr/include $CFLAGS"

##### let's go
ALL_TARGETS="$(emerge -pve system | awk '/ebuild/ {print $4}' | grep -v libc | grep -v 'dev-lang/python' )"
for target in ${ALL_TARGETS};do
  export TARGETS+=" =${target}"
done

emerge -avO1 --keep-going=y ${TARGETS}

##### we need rebuild current python
VER="$(python -V 2>&1 | awk '{print $2}')"
CURRENT_PYTHON="$(ls -1 /var/db/pkg/dev-lang/ | grep python-${VER}*)"

ebuild ${PORTDIR}/dev-lang/python/${CURRENT_PYTHON}.ebuild clean configure

sed -e "s|BASECFLAGS=|BASECFLAGS= -I${DIR}/usr/include |" \
    -i ${PORTAGE_TMPDIR}/portage/dev-lang/${CURRENT_PYTHON}/work/Python-${VER}/Makefile

ebuild ${PORTDIR}/dev-lang/python/${CURRENT_PYTHON}.ebuild merge

##### unset previously defined vars
unset LDFLAGS CXXFLAGS CFLAGS 

##### workaround for glib/pkgconfig
FFI_VER="$(ls -1 /var/db/pkg/dev-libs/ | grep libffi)"

case ${2} in
32 ) export LIBFFI_LIBS="-L/usr/lib -lffi" && export LIBFFI_CFLAGS="-I/usr/lib/${FFI_VER}/include";;
64 ) export LIBFFI_LIBS="-L/usr/lib64 -L/usr/lib32/ -lffi" && export LIBFFI_CFLAGS="-I/usr/lib64/${FFI_VER}/include -I/usr/lib32/${FFI_VER}/include";;
esac

##### rebuild system
emerge -aveD --keep-going=y system
emerge -aveD --keep-going=y world

enjoy
P.S. пока готово на половину - надо кое-что поправить для glib/pkgconfig после установки отката в корень
UPD: готово
UPD: естесственно, не забыть после этого прогнать

revdep-rebuild -i -- -avD

18

Более читабельные ebuild changelogs

# items=(`emerge -uNDp --color=n --columns world | grep '^\[ebuild' | awk '{print $4}'`) ; for item in $items; do equery changes $item; echo -e "-----\n\n" ; done
*expat-2.1.0_beta3 (11 Mar 2012)

  11 Mar 2012; Samuli Suominen <ssuominen@gentoo.org>
  +expat-2.1.0_beta3.ebuild:
  Version bump.

  10 Mar 2012; Samuli Suominen <ssuominen@gentoo.org> expat-2.1.0_beta2.ebuild,
  +files/expat-2.1.0_beta2-move_setContext_call.patch:
  Move call to setContext right after the setting of salt wrt #407555 using
  upstream patch. Thanks to Marien Zwart for bisecting the issue.
-----


*pciutils-3.1.9-r1 (31 Jan 2012)

  31 Jan 2012; Mike Frysinger <vapier@gentoo.org> +pciutils-3.1.9-r1.ebuild,
  metadata.xml:
  Split logic between supporting a compressed db (USE=zlib) and using one
  (USE=compress-db) #360849 #397591 and some others.
-----


*libtasn1-2.12 (19 Mar 2012)

  19 Mar 2012; Tim Harder <radhermit@gentoo.org> +libtasn1-2.12.ebuild:
  Version bump.

  18 Mar 2012; Raúl Porcel <armin76@gentoo.org> libtasn1-2.11.ebuild:
  alpha/ia64/m68k/s390/sh/sparc stable wrt #404653

  06 Mar 2012; Brent Baude <ranger@gentoo.org> libtasn1-2.11.ebuild:
  Marking libtasn1-2.11 ppc64 for bug 404653

  05 Mar 2012; Markus Meier <maekke@gentoo.org> libtasn1-2.11.ebuild:
  arm stable, bug #404653

  05 Mar 2012; Jeff Horelick <jdhore@gentoo.org> libtasn1-2.11.ebuild:
  marked x86 per bug 404653

  23 Feb 2012; Brent Baude <ranger@gentoo.org> libtasn1-2.11.ebuild:
  Marking libtasn1-2.11 ppc for bug 404653

  22 Feb 2012; Jeroen Roovers <jer@gentoo.org> libtasn1-2.11.ebuild:
  Stable for HPPA (bug #404653).

  22 Feb 2012; Agostino Sarubbo <ago@gentoo.org> libtasn1-2.11.ebuild:
  Stable for amd64, wrt bug #404653
-----


*sqlite-3.7.10 (18 Jan 2012)

  18 Jan 2012; Markos Chandras <hwoarang@gentoo.org> +sqlite-3.7.10.ebuild:
  Version bump. Ebuild by Arfrever
-----

19 (29.03.2012 02:22:44 отредактировано Dr House)

megabaks
Спасибо. Забрал твой glibc-downgrader.

Gentoo Linux amd64 kernel 3.10.17 KDE 4.10.5 / Intel Dualcore E6500 2.93Ghz / 4 GB Ram / NV GT 630 2048mb GDDR3
Полет нормальный!

20

задать версию gcc для отдельного пакета, не затрагивая остальные пакеты/систему
в /etc/portage/bashrc

#COMPILERS
if [ -f ${ROOT}/etc/portage/package.compilers ]; then
  while read target ver; do
   if [ "${target}" = "${CATEGORY}/${PN}" ]; then
    MY_GCC="$(find /usr/$MACHTYPE/gcc-bin/ -name "$ver*")"
    export ROOTPATH="${MY_GCC}:${ROOTPATH}"
    export PATH="${MY_GCC}:${PATH}"
    export LIBRARY_PATH="$(gcc-config -L):${LIBRARY_PATH}"
   fi
  done < ${ROOT}/etc/portage/package.compilers
fi

в /etc/portage/package.compilers пишем так

dev-util/nvidia-cuda-sdk 4.4
dev-util/nvidia-texture-tools 4.4
games-strategy/0ad 4.5
media-gfx/blender-cycles 4.4
media-libs/freeimage 4.4
media-libs/ilmbase 4.5
sys-boot/grub 4.4

т.е. "пакет ветка"
очень удобно для капризного до версии gcc софта, например, для любого использующего cuda

21

мелочь, но пусть будет...
с некоторых пор логин-менеджер в консоли стал очищать лог загрузки... мне это не понравилось... [про безопасность молчим]
Чтобы исправить эту досадную мелочь надо в /etc/inittab добавить один параметр:

c1:12345:respawn:/sbin/agetty 38400 tty1 linux --noclear

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

95% процентов проблем находятся между клавиатурой и стулом.

22

скорее о vim заметка, но всё же... часто пригождается при неполадках при сборке старых/брошенных исходников для создания багрепортов с патчами или просто создания патчей в свою копилку
ситуация: у нас есть старые исходники на с(++) и такой же старый ебилд; при сборки есть небольшие проблемы (типа лишние const'ы или лишние упоминания namespace'ов); Мы знаем, как это исправить, и знаем, как заставить vim изменять файлы, а не только пищать и всё портить.

 Консоль:
sudo -s # далее всё от root'а
cd /var/tmp/portage/category/app-ver/work/app-ver_build # директорию можно подспотреть в конце высера make
vim

далее используемые команды vim:
 Консоль:
:set patchmode=.orig - смысл этой заметки - заставляем vim сохранять оригиналы редактируемых файлов c расширением orig.
:make - запускаем make, ждём пока он сломается
:cn и :cp - переходим на следующую ошибку, исправляем, когда поправим все ошибки повторяем с предыдущего шага. не забываем делать :w

все ошибки исправлены, всё собралось - просто выходим по :q
 Консоль:
cd /var/tmp/portage/category/app-ver/work/ # выходим каталогом выше. ! сборка и исходники обычно находятся в отдельных каталогах
find . -iname *.orig # проверяем список изменённых файлов, смотрим нет ли какой-нить гадости в исходниках с тем же расширением
find . -iname *.orig |while read I; do diff -u $I ${I%.orig} ;done >>/tmp/app_fix.patch  # собственно создаём патч
cat /tmp/app_fix.patch # проверяем, что получилось
ebuild /usr/portage/category/app/app-ver.ebuild merge # заканчиваем установку

далее патч прикрепляем к багрепорту/к самопальному ебилду в отдельном оверлее/или в /etc/portage/patches (на) ну или просто кладём в копилку

заметка рассчитана на то, что читающий при помощи манов и :help'а сможет понять как минимум 90% написанного.

95% процентов проблем находятся между клавиатурой и стулом.

23

Иногда при пере сборке, сборка может на определенном пакете зависнуть и ни куда не двигаться.
В таком случае может потребоваться пропустить сборку данного пакета и продолжить сборку остальных.
Для этого обычно сначала сборка прекращается  Ctrl+C. Далее правится файл /var/cache/edb/mtimedb, из него удаляется бажный пакет, пример:

                       [
                                "ebuild",
                                "/",
                                "net-mail/mailutils-3.4-r2",
                                "merge"
                        ],

И сборка продолжается снова:

 Консоль:
# emerge --resume

Особенно это может потребоваться при пере сборке всех пакетов:
 Консоль:
# emerge -e @world

когда уже половина или большая часть собрана, а собирать все по новой не хочется.
После уже можно решать проблему со сборкой бажного пакета.