home

IT Runs

text

Биологические особенности

Наука все еще не знает, откуда у меня растут руки. Несколько дней тому назад я приобрел аж за 80 деревянных добровольца на избиение DVD-приводами. Этот доброволец, видимо, был так напуган проиходящим, что решил попросту отказаться от взаимодействия с моим… уж не знаю, чего касается данная проблема.

Суть в том, что различные герой этих событий — болванка DVD+RW — всеми силами отказывась определяться в арклинуксе и федоре как записываемый носитель. Дебиан, который уже более двух суток сам себя компилирует, спрашивать было почти бесполезно. Я на тот момент не додумал создать нового пользователя, впустить его в группу cdrom и пытаться нарезать лазерную пластинку от его имени.

У этой истории необычайно позитивный конец. Решив, что болванка недееспособна, я на нее забил болт. Единственным способом поставить нормально жующую карты от ATI систему было использование 4-хгигабайтную мамину флешку и без того изнасилованную пару десятков раз ISO-шниками разных дистрибутивов. Мною уважаемые федора и русский ее ремикс версии 12 решили обломать меня, не приняв в браться драйвер radeon, несмотря на то, что эти братья-близнецы (или сестры-) всегда лучше всех воспринимали мои железки на Asus M51ta04. Проприетарное чудо от ATI уже совсем не выручает — отстает по версиям. Убунту, эдакая хрень, повела себя совсем некорректно. Она единственная отказывалась залиться образом на флешку простейшим способом:

dd if=somedistro.iso of=/dev/sdb

В связи с выросшим геморроем, я пыталсяосилить заливку убунты на флешку разными утилитами, предназначенными для таких вещей. Я качал их исходники и устанавливал. В дебиане версия python оказалась маловатой, а в арклинуксе таких пакетов в репозиториях не предусмотрено. Зато усвоил вот что. Когда скачиваешь тарболл (нечто.tar.gz), распаковываешь и видишь setyp.py, ставить нужно так:

# python setup.py —install (я еще набрал что-то вроде —buildpkg, но разницы не увидел)

Все эти твари не могла записать на флешку. Им все время хотелось ее отформаотировать, но сами они кнопокчу свою притемнили и все гуёвое удобство таким образом зажали. Впрочем, позднее я понял, что дело в том, что у меня в арклинуксе не стояла утилита mkfs.vfat. Поставил dosfstools — заработало. Но что в арклинуксе, что в дебиане, несмотря на всю вфатность, вывод систем был однозначен:

fdisk -l
<…>
Device Boot Start End Blocks Id System
/dev/sdb1p1 * 1 692 708608 83 Linux

Явный намек на то, что кто-то из нас что-то не понимает. Я спросил fsck. Он сказал, что все же был FAT32, после чего я все же решил, что мои усилия наподобие

mkfs.vfat -F 32 /dev/sdb1
mkfs -t vfat -F 32 /dev/sdb1
mkfs.vfat -I /dev/sdb1
mkfs.vfat -a /dev/sdb1

не прошли даром. И не прошли.

Произошло нечто странное. Наверное, если бы не большой логотип AMD на сайте OpenSUSE, я бы так и не скачал и не попробовал поставить этот дистро в очередной раз. Мы с ним никогда не дружили, хотя и пытались. Я зарузился в LiveCD. Причем, гномовский, потому что рассчитывл пользоваться XFCE, и мусор от qуtюрье мне особо не нужен. Я от балды запустил brasero, почти что просто так, чтобы убедиться в обреченности. И о чудо! mini.iso вселился в главного героя! После чего я вспомнил чьи-то слова о том, что OpenSUSE отличается стабильностью и аккуратностью (особенно в натсройке KDE). Но раньше с ним у меня сплошняком были какие-то проблемы.

Xubuntu выкачено и поставлено. Вот уже и запущено. Это и есть тот самый хэппи-энд, он подоспел к концу написания поста. Если и здесь появятся проблемы, то я знаю, к кому обратиться.

P.S.: я настроен на позитивное восприятие своего строения :)

text

Apt-build, и пусть все пересоберется!

Сейчас мой домашний комп ревет. Впрочем, он всегда ревел, но вот уже двое суток он ревет по-особенному, не выключаясь, из-за чего мне сложно уснуть по ночам. Ниже приведу репост о причине такого поведения моего компа с мелкими косметическими изменениями отсюда: http://p-n-z-8-8.livejournal.com/40334.html

Apt-build — мощный инструмент Debian, позволяющий в духе FreeBSD (ну, или Gentoo например) одной командой устанавливать пакеты из исходных текстов (вместо унылого ./configure — make — sudo make install), пересобирать уже установленные пакеты с оптимизацией под используемую архитектуру а также, при наличии желания, пересобрать систему целиком. Ставится сие добро самым обычным образом:

sudo apt-get install apt-build

В процессе установки будет задано несколько вопросов:

  1. Каталог, в который будут качаться исходники и где будут собираться пакеты. По умолчанию это /var/cache/apt-build/build
  2. Локальный репозиторий, в который сохраняются собранные пакеты. По умолчанию /var/cache/apt-build/repository
  3. Уровень оптимизации. Лёгкая, средняя, усиленная (CFLAGS −01, −02, −03). По умолчанию предлагается −02
  4. Прочие параметры для компиляции. Их в общем случаем можно оставить без изменения.
  5. Затем будет предложено добавить строку

    deb file:/var/cache/apt-build/repository apt-build main

    в /etc/apt/sources.list Не стоит от этого отказываться. Более того, строка должна быть первой в списке репозиториев (критично!).
  6. Тип используемого процессора. Думаю, с этим всё понятно.

На этом конфигурирование apt-build закончено. Если в чём-то неуверены, можно просмотреть настройки в файле /etc/apt/apt-build.conf

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O2
mtune = -mtune=k8
options = “-pipe -fomit-frame-pointer”
make_options = “-j4”


И либо изменить вручную, либо запустить конфигурирование повторно, используя команду:

sudo dpkg-reconfigure apt-build

Далее устанавливаем всё необходимое для сборки (на всякий случай, вдруг чего-либо недостаёт):

sudo apt-get install libc6-dev g++ gcc

Кроме этого не помешает установить и запустить pbuilder (он может пригодится в ряде случаев, о чём apt-build скажет сам):

sudo apt-get install pbuilder && /usr/lib/pbuilder/pbuilder-satisfydepends

Несколько операций с apt-build требуют root-полномочий. Именно root, а не sudoers. Например, при попытке построить индекс пакетов можно наблюдать такую картину:

sudo dpkg —get-selections | awk ’{if ($2 == «install») print $1}’ > /etc/apt/apt-build.list
bash: /etc/apt/apt-build.list: Permission denied

Поэтому тем пользователям Ubuntu, у которых отключена учётная запись root (а по-умолчанию она отключена) рекомендуется включить её и задать пароль. Всё это можно сделать одной командой:

sudo passwd root
Введите новый пароль UNIX:

После этого логинимся под root:

su
Пароль:

И строим индекс пакетов:

# dpkg —get-selections | awk ’{if ($2 == «install») print $1}’ > /etc/apt/apt-build.list

Использование apt-build в общем и целом идентично использованию apt-get:

apt-build [options] [command]

Commands:
update — Update package lists
upgrade — Perform an upgrade
install — Build and install new packages
source — Download and extract source in build directory
build-source — Download, extract and build source package
update-source — Update all sources and rebuild them
remove — Remove packages
build-repository — Rebuild the repository
clean-sources — Clean up all object files in source directories
clean-build — Erase downloaded packages and temporary build files
clean-repository — Erase downloaded packages and temporary build files
world — Rebuild and reinstall all packages on your system
info — Build-related package information

Поэтому первым делом нужно обновиться:

sudo apt-build update && sudo apt-build upgrade

Само собой, в /etc/apt/sources.list должны быть подключены репозитории с исходными текстами (те, которые «deb-src http://и т.д.»). В Ubuntu они уже присутствуют и их необходимо лишь раскомментировать. В Debian нужно прописать репозитории:

deb-src http://security.debian.org/ etch/updates main contrib
deb-src http://mirror.yandex.ru/debian stable main
deb-src http://mirror.yandex.ru/debian/ lenny main
deb-src http://mirror.yandex.ru/debian lenny main non-free contrib
deb-src http://mirror.yandex.ru/debian-security etch/updates main non-free contrib

В 99,9% случаев основные команды apt-build требуют дополнительных опций:

Options:
—reinstall — Re-build and install already installed package
—rebuild — Rebuild package
—remove-builddep — Remove build-dependencies installed by apt-build
—nowrapper — Do not use gcc/g++ wrapper
—purge — Use purge instead of remove
—noupdate — Do not run ’apt-get update’ before package installation
—build-command — Use to build package
—patch — Apply patch s before the build
—patch-strip — Striplevel for the patch files
—yes -y — Assume yes
—version -v — Show version and exit
—force-yes — Force yes
—source — Do not download source (sources are extracted already)
—build-only — Do not install any of build dependencies
—build-dir — Specify build dir
—repository-dir — Specify the repository directory
—target-release — Distribution to fetch packages from
—sources-list — Specify sources.list file
—apt-get — Specify an alternative apt-get application to use
—apt-cache — Specify an alternative apt-cache application to use
—config — Specify an alternative configuration file

Например, чтобы переустановить из исходников уже установленный пакет, нам понадобится следующая директива:

sudo apt-build —rebuild —reinstall —force-yes —yes install mc
—-—> Installing build dependencies (for mc) <—-—
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
(Вывод опущен)
—-—> Building mc <—-—
dpkg-buildpackage: установка CFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CPPFLAGS в значение по умолчанию:
dpkg-buildpackage: установка LDFLAGS в значение по умолчанию: -Wl,-Bsymbolic-functions
dpkg-buildpackage: установка FFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CXXFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: пакет исходных текстов mc
dpkg-buildpackage: версия исходных текстов 2:4.6.2~git20080311-2
dpkg-buildpackage: исходные тексты изменены root
dpkg-buildpackage: архитектура хоста i386
debian/rules clean
(И т.д.)

В процессе установки/пересборки apt-build сам скачивает нужные ему для компиляции пакеты, поэтому не удивляемся, увидев нечто подобное этому:

—-—> Installing build dependencies (for kdesdk) <—-—
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
НОВЫЕ пакеты, которые будут установлены:
automoc binutils-dev cdbs cmake fdupes hspell kdelibs5-dev kdepimlibs5-dev kdesdk-scripts libacl1-dev libapr1-dev libaprutil1-dev
libasound2-dev libattr1-dev libboost-date-time-dev libboost-date-time1.34.1 libboost-dev libboost-doc libboost-filesystem-dev
libboost-filesystem1.34.1 libboost-graph-dev libboost-graph1.34.1 libboost-iostreams-dev libboost-program-options-dev
libboost-program-options1.34.1 libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-serialization1.34.1
libboost-signals-dev libboost-signals1.34.1 libboost-test-dev libboost-test1.34.1 libboost-thread-dev libboost-thread1.34.1
libboost-wave-dev libboost-wave1.34.1 libbz2-dev libcups2-dev libdb4.6-dev libgif-dev libgpgme11-dev libicu-dev libilmbase-dev
libjasper-dev libkeyutils-dev libldap2-dev libmysqlclient15-dev libopenexr-dev libphonon-dev libplasma-dev libpth-dev libsasl2-dev
libsoprano-dev libsqlite3-dev libstreamanalyzer-dev libstreams-dev libsvn-dev libtiff4-dev libtiffxx0c2 libxslt1-dev python-dev
python2.5-dev quilt uuid-dev

В конце установки/пересборки apt-build напомнит, что нужно удалить пакеты, использовавшиеся для сборки, для их удаления нужно использовать

apt-get autoremove

Для установки пакета:

sudo apt-build install —yes —force-yes gpicview

Вообще, ключи «—yes —force-yes» — это то, что нужно использовать постоянно.
Для того, чтобы собранные нами пакеты не были заменены обычными версиями при первом же обновлении, необходимо их «заморозить».
Для этого существует два способа. Первый из них описан в документации к apt-build и заключается в внесении в файл /etc/apt/preferences сведений о «замороженных» пакетах в таком формате:

Package: * (обязательно в формате «имя-версия»)
Pin: release o=apt-build
Pin-Priority: 990

Второй способ — специально для любителей «экстрима». Особенно пригодится для тех пакетов, пересобирать которые мы не планируем ещё долго.

  1. С помощью apt-build source качаем исходники нужного пакета
  2. Перемещаемся в каталог с исходниками
  3. Набираем:
    # dch -i
  4. Меняем версию на бОльшую.
  5. Сохраняемся
  6. Собираем/ставим пакет
  7. После этого «морозим» версию:
    sudo aptitude hold gpicview

Теперь самое интересное: apt-build позволяет целиком пересобрать систему:

apt-build world

Однако ньюанс заключается в том, что во-первых, не всё ПО, установленное на машине является свободным, и во-вторых, даже будучи свободным, для того или иного пакета могут отсутствовать прописанные в /etc/apt/sources.list репозитории с исходниками. В этом случае весь процесс пересборки остановится на таком пакете. Чтобы этого не случилось, нужно отредактировать файл /etc/apt/apt-build.list, исключив из него проприетарное ПО и ПО с отсутствующими в пределах досягаемости apt-build репозиториями исходных текстов. Ну а после этого запускать apt-build world и ждать. Долго и мучительно. Как отфильтровать пакеты без исходников? Признаться, не знаю. На момент написания этих строк у меня уже более полутора суток пересобирается система. Каждый раз, когда процесс пересборки ругается на отсутствие исходников, я удаляю строку с именем этого пакета в apt-build.list, а также все вышележащие строки, чтобы не пересобирать тучу программ заново.

По окончании процесса перезагружаемся и делаем:

apt-build upgrade

Затем стоит почистит соответствующие каталоги от исходников и собранных пакетов, т. к. при постоянном использовании apt-build они отъедают значительный объём дискового пространства:

sudo apt-build clean-sources && apt-build clean-repository

Apt-build на мой взгляд является полезной и интересной утилитой.

В качестве заключения опишу несколько важных моментов, связанных с её использованием.

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

Минусы: Компиляция занимает гораздо больше времени, нежели чем обычная установка через apt-get install. Тоже самое можно сказать и о пересборке, поэтому следует запастись терпением.

Система, собранная из исходных кодов требует гораздо больше внимания. Тем более, изначально для этого не предназначенная (такая как Ubuntu).
Обычное обновление системы через apt-get upgrade порушит все наши труды по сборке и оптимизации. Поэтому во-первых не забудьте о «заморозке» пакетов и, во-вторых, следует выработать собственный график оптимизации системы (например, через некоторое время после очередного релиза).

Возможные проблемы: Несмотря на то, что по идее apt-build сам скачивает и устанавливает всё необходимое для компиляции, иногда при сборке можно увидеть ошибку, связанную с неудовлетворёнными зависимостями. В общем и целом удаётся просто установить нужное через apt-build install. В «сложных» случаях пригодится команда:

apt-get build-dep package_name

Также в некоторых случаях apt-build по неизвестным мне причинам отказывается видеть в /etc/apt/sources.list строчку с собственным локальным репозиторием, вследствие чего отказывается устанавливать только что собранный пакет. Что интересно, если в случае с пересборкой уже установленного пакета запустить

apt-get update && apt-get upgrade

— свежесобранный пакет будет предложен к обновлению. Как раз из локального репозитория. Это все проблемы, с которыми я столкнулся в процессе использования apt-build.

И в заключение самое главное: если кто-то надумает попробовать apt-build — помните: ВСЕ ДЕЙСТВИЯ ВЫ ПРОИЗВОДИТЕ НА ВАШ СТРАХ И РИСК :-) Но на мой взгляд, оно того стоит. Главное — понимать что ты делаешь.