LinuxForum.Fans
Тема

Gentoo Tips & Tricks

Автор: Lupo_Alberto 23 сообщений 24503 просмотров 📌 закреплена
20.07.2010 06:10 #61091

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

text

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

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

text

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 несложную функцию

text

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

получаем:

text

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.
...
23.07.2010 09:51 #62081

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

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

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

30.07.2010 19:58 #63807

Следующий совет относится не только к Gentoo.
Включение в ядре опций CONFIG_IKCONFIG=y и CONFIG_IKCONFIG_PROC=y позволяет не только сохранить содержимое конфигурационного файла ядра в нём самом, но и получить к нему доступ в «режиме реального времени» посредством /proc/config.gz. Для доступа к данному файлу очень удобно использовать команду zgrep или её расширенный вариант zegrep.
Так, к примеру, можно увидеть только включённые в загруженном ядре опции, относящиеся к ACPI и Power Menagment:
[console]
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
[/console]
Включение опции CONFIG_IKCONFIG=y даёт ещё один «бонус» — позволяет узнать конфигурацию незагруженного в данный момент ядра. Для этого служит скрипт /usr/src/linux/scripts/extract-ikconfig, которому следует передать в качестве аргумента образ ядра.

06.09.2010 01:07 #76274

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

Пытаясь настроить отображение температуры жёсткого диска в conky, узнал вспомнил, что данные о жёстком диске моего ноутбука не содержатся в базе утилиты app-admin/hddtemp.
С помощью команды
[console]
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)
[/console]
узнал необходимые для пополнения базы данных значения и занёс их в свою собственную базу данных :)
[console]
mkdir -p /usr/local/share/hddtemp/
echo -e '"HTS541080G9SA00"\t194 C\t"Hitachi Travelstar 5K100 series"' > /usr/local/share/hddtemp/hdd_$(hostname).db
[/console]
Решение использовать собственный файл с данными вызвано тем фактом, что на ноутбуке жёсткий диск единственный и изменений не предвидится, а штатные базы данных переписываются при каждом обновлении app-admin/hddtemp.
Чтобы hddtemp при запуске пользовался созданной базой, внёс небольшие изменения в её файл конфигурации:
[console]
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"
[/console]

08.09.2010 17:46 #77127

В пакете app-portage/eix есть очень удобная утилита eix-remote, позволяющая получать и обновлять кэш оверлеев app-portage/layman. К сожалению, последних месяца полтора-два она перестала работать, выдавая
[console]
eix-remote update
* Fetching eix-caches.tbz2
--2010-09-08 13:57:04-- http://dev.gentooexperimental.org/eix_cache/eix-caches.tbz2
Распознаётся dev.gentooexperimental.org... сбой: Имя или служба не известны.
wget: unable to resolve host address «dev.gentooexperimental.org»
* could not fetch http://dev.gentooexperimental.org/eix_cache/eix-caches.tbz2
[/console]
Совет sergtat'а на русскоязычном форуме Gentoo позволил если не решить, то обойти эту проблему. Команду обновления кэша следует запускать так
[console]
eix-remote -a http://91.191.147.225/eix_cache/eix-caches.tbz2 update
[/console]
либо предварительно выполнив
[console]
echo 'EIX_REMOTE_OPTS="-a http://91.191.147.225/eix_cache/eix-caches.tbz2\"' >> /etc/eixrc
[/console]
использовать команду «по-старинке»:
[console]
eix-remote update
[/console]

24.11.2010 10:19 #101623

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

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

text

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

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

text

emerge -K sys-devel/gcc
18.12.2010 23:02 · отредактировано #108626

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

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

text
cp /etc/xdg/menus/gnome-applications.menu /etc/xdg/menus/applications.menu 
19.06.2011 23:22 #171394

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

30.06.2011 13:10 #173666

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

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

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

text
content-disposition = on
12.08.2011 10:06 #183925

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

09.09.2011 15:16 #191072

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

09.09.2011 21:15 #191157

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

30.10.2011 19:41 #201842

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

text

.............
 *     /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 , либо собрать бинарный пакет без установки и посмотреть его содержимое
[console]tar -jtf /var/spool/packages/app-office/libreoffice-3.4.3.2-r1.tbz2[/console]

14.12.2011 03:51 · отредактировано #213823

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

text

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

27.03.2012 02:35 · отредактировано #241053

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

text
#!/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: естесственно, не забыть после этого прогнать

text
revdep-rebuild -i -- -avD
28.03.2012 18:08 #241595

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

text
# 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 -----

29.03.2012 02:20 · отредактировано #241792

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

10.04.2012 03:39 #244938

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

text
#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 пишем так

text
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

Войдите или зарегистрируйтесь, чтобы ответить.