Тема: Gentoo Tips & Tricks

Предлагаю в этой теме (согласен, название темы не отличается оригинальностью) сохранять «трюки и маленькие хитрости», связанные с 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

Re: Gentoo Tips & Tricks

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

3

Re: Gentoo Tips & Tricks

Macumazan пишет

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

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

4

Re: Gentoo Tips & Tricks

Следующий совет относится не только к 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

Re: Gentoo Tips & Tricks

По мотивам темы «hddtemp  температура 0 С»

Пытаясь настроить отображение температуры жёсткого диска в 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

Re: Gentoo Tips & Tricks

В пакете 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

Re: Gentoo Tips & Tricks

Периодически сталкиваюсь с пользователями, по той или иной причине удалившими важный системный пакет — 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)

Re: Gentoo Tips & Tricks

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

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

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

9

Re: Gentoo Tips & Tricks

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

10

Re: Gentoo Tips & Tricks

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

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

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

content-disposition = on

11

Re: Gentoo Tips & Tricks

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

12

Re: Gentoo Tips & Tricks

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

Re: Gentoo Tips & Tricks

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

14

Re: Gentoo Tips & Tricks

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

15

Re: Gentoo Tips & Tricks

Довольно редкий тип коллизии на примере установки 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 02:52:43 отредактировано zenon)

Re: Gentoo Tips & Tricks

Дабы не забыть. Полчаса втыкал почему у меня лишнее стартует... вспомнил куда запихнул.  :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 06:51:03 отредактировано megabaks)

Re: Gentoo Tips & Tricks

велосипед, который едет :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

Re: Gentoo Tips & Tricks

Более читабельные 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 01:22:44 отредактировано Dr House)

Re: Gentoo Tips & Tricks

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

20

Re: Gentoo Tips & Tricks

задать версию 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

Re: Gentoo Tips & Tricks

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

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

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

22

Re: Gentoo Tips & Tricks

скорее о 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% написанного.