Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
17.96 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

UNIXOID

 

w Click

 

 

 

 

 

m

ЕВГЕНИЙ ЗОБНИН ZOBNIN@GMAIL.COM

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

Танцысбубном инапильником

Все, чтотыхотелзнатьосборкеизисходников

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Раноилипоздновсемысталкиваемсяснеобходимостьюсборкисофтаизисходников. Причинтомуогромноемножество, апроблем, сопровождающихэтотпроцесс, ещебольше. Чтовыбрать— архивtar.gz илиCVS-срез? Какнакладыватьпатчи? Чтоделать, есливисходниках нетскриптаconfigure? Какпоборотьошибкикомпиляции? Каксоздать дистрибутивныйпакетизаставитьпрограммуработать? Ответынаэти имногиедругиевопросытынайдешьвэтойстатье.

ПОЛУЧЕНИЕ ИСХОДНЫХ ТЕКСТОВ ПРИМЕНЕНИЕ ПАТЧЕЙ ПОДГОТОВКА К СБОРКЕ КОНФИГ УРИРОВАНИЕ И СБОРКА ПРОБЛЕМЫ КОМПИЛЯЦИИ ПРОБЛЕМЫ КОМПИЛЯЦИИ В BSD УСТАНОВКА ПРОБЛЕМЫ ЗАПУСКА

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

проглотитьеесразуилииспользоватькак справочник: разделынезависятодинот другого.

ПОЛУЧЕНИЕ ИСХОДНЫХТЕКСТОВ

Получить исходные тексты приложения можно несколькими способами. Самый простой и наименее трудозатратный — скачать архив tar.gz или tar.bz2 (или даже tar.lzma) с официального сайта разработчиков. В этом случае достаточно распаковать полученный файл с помощью одной из приведенных ниже команд и перейти к следующему разделу статьи.

$ tar xvzf имя.архива.tar.gz

или

$ tar xvjf имя.архива.tar.bz2

Примечание: есливтвоей*nix-системеутилита tar неподдерживаетфлаг‘-j’, тозадействуй конструкцию: «bunzip2 < имя.архива.tar.bz2 | tar xvf -».

Однакоэтоневсегдабудетсамымудачным выбором. Командыразработчиковнекоторых проектовдопускаюточеньдлительныеперерывымеждувыпускамирелизовсвоихдетищ (вплотьдонесколькихлет!), продолжая втихуюработатьнадпроектом. Причемэто совсемдажененамекнаогромноеколичествобагов, которыепрограммистычинятднями иночами— простонеобходимыйобъемфункциональностиещененакопился.

Выходизситуациикроетсявтом, чтобыпобродитьпосайтуразработчиковинайтиссылку наежемесячные/еженедельные/ежедневныеснапшоты. Еслиженичегоподобногона горизонтеневиднеется, тогдабегомвсвятую святых— VCS-репозиторийисходныхтекстов проекта.

ИспользованиерепозиторияVCS (системы контроляверсий, ккоимможноотнестиCVS,

Subversion, Git, Hg имножестводругихпродуктов) вкачествеисточника«свежатинки» несетвсебемассуполезнейшихпобочных эффектов. Тутивозможностьвсегдабыть«на остриеатаки», когдатысобираешьпрограмму, последнееизменениевкоторуювнесли 15 минутназад, ибыстроеобновление(VCS выкачиваюттолькоизменившиесяфайлыво времяобновления), ичувствопричастности

кчему-товажному, вконцеконцов. Ноесть

иотрицательныймомент— нестабильность хранящегосявVCS кода, которым, правда, можнопренебречь: вбольшихисерьезных проектахэкспериментальныеиособонеустойчивыенововведенияобычнопроизводят вотдельныхветках, аужепослевносятв основнойкод.

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

CVS ужемалогдеиспользуется, ноимеет местобыть:

$ sudo apt-get install cvs

$ cvs -z3 -d:pserver:anonymous@ cvs.bochs.sf.net:/cvsroot/bochs checkout bochs

090

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Subversion используетсявпроектах, раз-

мещенныхнаsf.net иcode.google.com:

$ sudo apt-get install subversion $ svn checkout http://inferno-ds.

googlecode.com/svn/trunk/ inferno- ds-read-only

Git особолюбимаLinux-разработчиками,

используетсянаkernel.org иgithub.com:

$ sudo apt-get install git-core $ git clone git://github.com/ russel/scons.git

Mercurial code.google.com имножество других, болеемелких, хостингов:

$ sudo apt-get install mercurial $ hg clone https://inferno-os. googlecode.com/hg/ inferno-os

ПРИМЕНЕНИЕ ПАТЧЕЙ

Исходныетексты— этоещеневсе. Иногда возникаетнеобходимостьвналожениихитрых патчейнаприложениясцельюрасширить ихфункционалилиисправитьбаг(выпуск неофициальныхпатчей, временноустраняющихсложноуловимыебагивкоде— частая практикавсредеOpen Source). Чтоделать? Всепросто. Первое: следуетубедиться, что патчсоздандлятойверсиипрограммы, исходникамикоторойтызавладел— небольшиерасхождениявверсияхдопустимы, но нерекомендуемы. Второе: просмотретьпатч, возможновнемсодержитсябэкдор. Третье: проверить, гладколинакладываетсяпатч, и накладываетсялионвообще:

$ cd исходники_программы

$ patch --dry-run -p1 < /ïóòü/ê/ïàò- ÷ó.patch

ЕсливсеОК, можнозапуститьпроцедуру модификации:

$ patch -p1 < /путь/к/патчу.patch

Патчимогутраспространятьсявсжатомвиде (срасширением.gz или.bz2). Вэтомслучае процедураналожениябудетвыглядетьтак:

$ gzip -cd ïàò÷.gz | patch -p0

или

$ bzip2 -cd ïàò÷.bz2 | patch -p0

Небойсяэкспериментировать, потомучто изменения, созданныепатчем, всегдаможно отменить, запустивкомандуpatch сфлагом‘-R’.

ПОДГОТОВКАКСБОРКЕ

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

использованию. Во-первых, тебепонадобится собственносамкомпилятор, содержащийся впакетахgcc-* илитомуподобных. Во-вто- рых, компоновщикиархиваторбиблиотек

изпакетаbinutils. В-третьих, заголовочные файлыстандартнойбиблиотекиязыкаСи— пакетlibc-dev, и, конечноже, утилитаmake. Во многихдистрибутивахвсеэтоможнополучить черезустановкуспециальногомета-пакета. ПримердляUbuntu:

$ sudo apt-get install buildessential

ФайлREADME, содержащийсявкорнеархива, обязателенкпрочтению. Какправило, внем описанывсенеобходимыеприложению зависимости, атакжерекомендациипосборке иответынавопросы. INSTALL тожеможнопроглядеть, нообычноонявляетсястандартной копиейодноименногофайла, поставляемого снаборомутилитautotools, инепредставляет интереса.

КОНФИГУРИРОВАНИЕ ИСБОРКА

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

Традиционновкачестветакойсистемы использовалсяпокрытыйсединойMakefile, в которомбылиописаныправилакомпиляции

иустановкиприложения. Однакопростота егосинтаксисавынуждалапрограммистов выполнятьдвойнуюработу(написаниесамого приложения, плюснаписаниебольшого Makefile, которыйучитывалвсеособенности низлежащейОС, самостоятельнонаходил библиотекиит.д.) Поэтомуврамкахпроекта GNU былразработаннаборутилитautotools, которыеавтоматизировали95% этойработы

игенерировалиготовыйкиспользованию

Makefile. Позднееautotools, написанныенаsh

иperl, разрослисьисталинастольконеудобны, чтобылиразработаныальтернативные системысборки, наиболеепопулярныиз которыхscons иcmake.

Кчемуэтоя? Ктому, чтоотиспользуемой системысборкинапрямуюзависитто, какие командыпридетсявыполнятьпользователю, чтобы, имеяисходныетекстыприложения, получитьегобинарник. Например, всистемах, основанныхнаMakefile (которыелегко идентифицироватьпоналичиюодноименного файлавкорнеархивасисходниками), для сборкииспользуетсяпривычнаякоманда make, аконфигурация(путиустановки, набор включаемыхвприложениекомпонентов, флагикомпилятораит.д.) обычноуказывается прямовсамомMakefile (хотяможетнаходиться

ивотдельномфайле).

Налицонесовпадение версийпатчаипрограммы

Популярнаясистемасборкиautotools, идентифицируемаяпоналичиюскриптаconfigure, болеедружелюбнакпользователюипозволяетуказыватьвсеопциикомпиляциичерез аргументыкоманднойстроки:

$ ./configure --prefix=/usr/local --without-debug --without-gtk --with-qt --enable-mmx

Где'--prefix' означаетпутьустановкиприло-

жения, флаги'--with-что-то-там' и'--without-

что-то-там' позволяютвключитьилиотключить добавляемыевприложениекомпоненты, а флагитипа'--enable-вот-это' используются дляуказаниянаиспользованиеспециального кода. Скриптоценитпригодностьоперационнойсистемыдлясборкииустановкиприложенияисгенерируетстандартный(ноочень большой) Makefile, адлякомпиляцииприложенияостанетсянабратьзаветнуюкомандуmake. ЕслижениMakefile, ниconfigure вархивене наблюдается— значит, программаиспользуетоднуизальтернативныхсистемсборки: scons (файлSConstruct вкорне) илиcmake (CMakeLists.txt). Впервомслучаенеобходимо установитьсамscons:

$ sudo apt-get install scons

Изапуститьпроцесскомпиляции:

$ scons PREFIX=/usr/local $ sudo scons

ОпцииобычноописанывфайлеREADME ипередаютсяутилитеscons вкачествеаргументов. Сборкаспомощьюcmake напоминаетиспользованиеautotools стойлишьразницей, чтовместозапуска./configure необходимо набиратькомандуcmake. Всяпоследовательностькомандвыглядитпримернотак(cmake требуетуказаниякаталогасборки, поэтомумы указываемточку):

$ sudo apt-get install cmake

$ cmake . $ make

Опциипередаютсянаманерscons итакже обычноописанывREADME илиINSTALL.

ПРОБЛЕМЫКОМПИЛЯЦИИ

Проблемысосборкойприложениямогут возникнутькакнаэтапеконфигурирования

XÀÊÅÐ 10 /130/ 09

091

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

UNIXOID

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Пакетbuild-essential, содержа-

Получаемисходныйкодпроектаиз «Стрипаем» бинарники

щийвсе, чтонужнодлясборкииз

репозиторияSubversion

исходников

 

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

Checking for qt4... no

Вэтомслучаедостаточноустановитьтребуемыйпакет(иегозаголовочныефайлы, которые содержатсявпакетах*-dev) спомощьюпакетногоменеджераивновьзапуститьпроцесс конфигурирования.

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

Checking for unistd.h... no

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

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

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

1.сошибкойтого, ктосоставлялправиладля системысборки;

2.установкойзависимостивнестандартный каталог(например, еслионатожебыласобрана изисходников).

Решение: указатьпутипоискачерезпеременные компилятораилинковщикапередзапуском сборщика:

 

чтопытаютсяиспользоватьпривычнуюкоман-

 

$ export CFLAGS="$CFLAGS -I/usr/

дуmake длясборкиприложенияиполучают

local/include -I/opt/include -I/

горуошибоконеправильномсинтаксисе

usr/mysoft/include"

мэйкфайла. Связаноэтостем, чтоBSD-систе-

$ export LDFLAGS="$LDFLAGS -L/usr/

мыиспользуютсобственнуюверсиюmake, не

local/lib -L/opt/lib -L/usr/mysoft/

унаследовавшуювесьворохнововведений,

lib"

сделанныхвGNU Make. Поэтомуследует

 

устанавливатьgmake черезсистемупортови

 

Встречаютсяисовсемхардкорныеслучаи,

собиратьприложениесегопомощью(gmake

когдазависимостьнужнойверсииустановлена

&& gmake install).

вместесовсемизаголовочнымифайламивка-

Втораязагвоздка: путипоискабиблиотеки

талоги, расположенныепоправильнымпутям,

заголовочныхфайлов, безявногоуказанияко-

аконфигураторвсеравноотказываетсяихна-

торыхвоFreeBSD простоневозможнособрать

ходить. Придетсялезтьвсамскриптconfigure

стороннийсофт.

икомментироватьвсеместа, гдепроизводится

Третьяпроблемазачастуюостанавливает

поискзависимости. Обычнопослетакоговме-

дажесамыхнастойчивых. Имяей— несов-

шательстваконфигураторсборщикаотраба-

местимостьзаголовочныхфайловисистем-

тываетбезошибок, ипрограммаблагополучно

ныхбиблиотек, аистокивсобственномпути

собирается.

BSD иотказеотиспользованиякомпонентов

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

GNU насистемномуровне. FreeBSD (почти)

жения, которыенемогутбытьсобраныновым

совместимасостандартомPOSIX, иправильно

компилятором(какэтодонедавнеговремени

написанныеприложениясобираютсядлянее

былосэмуляторомqemu). Поэтому, еслиты

безвсякихпроблем, ностоитпрограммисту

встретилупоминаниеочем-топодобномв

задействоватькакие-тоLinux-специфичные

README, простоустановирекомендованную

системныевызовыилимакрокомандывсвоем

авторомверсиюкомпилятораиукажипутьк

приложении— все, тупик. Сборкаостанавли-

немучерезпеременнуюCC передзапуском

вается, изаставитьеепродолжитьсябывает

сборщика:

оченьиоченьсложно. Вотсписокпроблем,

 

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

$ sudo apt-get install gcc-3.4

FreeBSD вовремясборкиприложения, ориен-

$ export CC='which gcc-3.4'

тированногонаLinux-системы:

$ ./configure --prefix=/usr/local

1. Руганькомпиляторананеобъявленные

 

функции. Взаголовочныхфайлах(*.h) ядраи

ПРОБЛЕМЫ

библиотекиязыкаСимеждуLinux иFreeBSD

КОМПИЛЯЦИИВBSD

естьотличие, — некоторыефункции/системные

Вдовесокковсемуперечисленномуполь-

вызовымогутбытьобъявленывразныхместах.

зователиFreeBSD получаютмассудругих

Зачастуюследуетлишьнабрать«man имя_

проблем, корникоторыхрастутизспецифики

функции» втерминалеFreeBSD ипосмотреть,

самойоперационнойсистемы. Ведь, несмотря

ккакомузаголовочномуфайлуонаотносится.

наналичиесистемыпортов, котораякакраз

Еслихидерневключенвфайл, обруганный

исозданадлятого, чтобыавтоматизировать

компилятором, значит, проблемарешитсяза

процесссборкистороннегософта, необходи-

счетдобавлениястроки«#include <заголо-

мость«ручноговмешательства» возникает

вочныйфайл.h>» висходник. Еслижеискомая

достаточночасто. Портынекоторыхпрограмм

функциявообщеотсутствуетвсистеме, то

совсемнеобновляются, другиепомечены

остаетсянайтиеекоднапросторахинтернетаи

флагомBROKEN, ановыйсофтможетпройти

скопироватьпрямовисходник.

оченьдолгийпутьпередвключениемвофици-

2. Руганьнаотсутствующиемакроопределения

альноедерево. Вотиприходитсявыкачивать

(посоглашениюихименапишутсязаглавны-

исходникиисамостоятельнокомпилировать

мибуквами). Кореньпроблемы, опятьже, в

программу, спотыкаясьпопутиомножество

различиизаголовочныхфайлов, Linux-вари-

повсюдуразбросанныхкамней.

антыкоторыхсодержатмножествоподручных

Частоновичкивходятвступорпростооттого,

макроопределений, аихможетинебытьв

092

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поройпричинуошибкинайтинелегко, — дажеобычный/bin/ls делаетмножество неудачныхпопытокоткрытияфайлов

заголовочныхфайлахFreeBSD. Решение: найтикодмакро- определениявинтернетеилиLinux-хидерахивставитьего прямовисходникприложения.

3. Руганьнафункции, которыеявляютсясистемнымивызовами(проверяетсяспомощьюобращенияковторойсекции man-страницвLinux). Вбольшинствеслучаевэтотупик.

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

УСТАНОВКА

Послесборкиприложениенеобходимоустановить. Вподавляющембольшинствеслучаевэтаоперациявыполняется спомощьюпростойкоманды«make install» (или«scons install»), котораякопируеткомпонентыприложениянасвои местаиустанавливаетправадоступа. Воттолькоудалить приложениепослезачастуюможнотолькоспомощью ручногозатиранияегофайлов(можетпомочьтакжекоманда «make uninstall», выполненнаяизкорняисходников, ноона наличествуетдалеконевсегда). Поэтомулучшеприбегнутьк специализированнымсредствамдлясозданиянастоящего дистрибутивногопакета. Наиболеепростоеиэффективное изних— утилитаcheckinstall (http://checkinstall.izto.org),

предназначеннаядлясозданияпакетоввмоментустановки программыизисходников. Ееуникальностьвудивительнойпростотеиспользования. Все, чтонужносделатьдля созданияпакетаиустановкиеговсистему— набратьоднуиз приведенныхнижекомандвместо«make install»:

#checkinstall -R // RPM-пакет

#checkinstall -D // Deb-пакет

#checkinstall -S // Slackware

Послетогокакустановкаприложениябудетзавершена, выполникомандуstrip длябинарниковибиблиотекприложениясцельюуменьшитьихобъем. Ужеустановленные приложенияможно«стрипнуть» спомощьюдвухкоманд:

#find / | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip- unneeded

#find / | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip- unneeded

ПРОБЛЕМЫЗАПУСКА

Сгордостьюзавыполненнуюработутынабираешьвтерминалезаветнуюкомандуи— бац! — программазавершается, неуспевначатьвыполняться. Wtf? Повсейвидимости, где-то впроцессеинициализациипрограммавстретилаошибкуи завершилась. Хорошобылобыувидетьхотькакое-тодиагнос- тическоесообщение, нодалеконевсепрограммистыстоль

Scons честносообщает, чтонужнопрограммедлякор-

ректнойсборки

заботливы. Чтоделать? Первое: перечитатьREADME. Возможно, внекоторыхсистемахилипристеченииопределенных обстоятельствсофтинанеработает, очемавторужезнает. Второе: проверить, какиекомпонентыпрограммаустановила всистему, идоступнылионией. Например, онаможетиспользоватьодинизподкаталоговкаталога/var дляхранениясвоих временныхфайлов, аонпочему-тонебылсозданилиполучил неправильныеправадоступа. Третье: запуститьпрограммус флагом'--help'ипроверить, поддерживаетлионадебагрежимсвыводомдиагностическихсообщенийнаэкран. Еслиэтотак— включитьего. Наверняканаэкранепоявится сообщениеобошибкеи, возможно, дажеописаниеспособов устранения. Четвертое: еслиэтосервер, которыйведетлоги— проверитьихнаналичиедиагностическихсообщений.

Еслиженичегонепомогло, задействуйтяжелуюартиллерию. Влюбой*nix-системеестьтрассировщиксистемныхвызо- вов, предназначенныйдляотслеживаниявсехсисколлов, произведенныхприложением, ипроверкиихвозвращаемого значения. ВLinux онзоветсяstrace, авоFreeBSD — truss (хотя черезсистемупортовдоступениstrace). Простозапустипрограммуподегоуправлением, итыувидишьвсеееобращения коперационнойсистемеврежимереальноговремени:

WARNING

info

BSD-версия командыpatch не поддерживаетфлаг

‘--dry-run’.

Осторожнеесрасширениямиtgz иtbz! Такиеархивымогут содержатьнеисходныйтекстпрограммы, абинарныйпакет дляустановки

вBSD-системе.

$ strace софтина

Выводлучшесмотретьсконца,постепеннопролистываявсе вызовыcloseвпоискахпоследовательностивызововopen. Затемнеобходимопроверить,какиеизпоследнихвызововopen вернулиотрицательныйстатус(-1),ипросмотреть,кчемупроис- ходилообращение.В95%случаевошибкасвязанасотсутствием(илинедоступностивследствиенеправильныхправдоступа) какого-либофайлаиликаталога.Трассировщикпокажетвсе обращениякфайлам,инайтинедоступногобудетнесложно.

ФЛАГИОПТИМИЗАЦИИ

Игрысфлагамиоптимизации— однаизосновныхпричин крахаилинеправильнойработысамостоятельнособранных приложений. Следуетпонимать, чтолюбаяоптимизация вышеуровня'-O1' (илипросто'-O') потенциальноопасна. Флаг'-O2', хотьинестрашендлябольшинстваприложений, запростоубиваетнизкоуровневыйкодсассемблерными вставками, а'-O3', активирующийагрессивныйрежим, идущийпротивстандартов, легкоотправляетвкоркукаждое второеприложение. Обостальныхфлагахиговоритьнестоит, онипредназначеныдлявесьмаузкогокругаприложений, поэтомумыбыпорекомендовалиостановитьсянаследующих опцияхоптимизациииберечьсвоинервыинервыдругих:

O базоваяоптимизация. Значительноувеличивает скоростьисполненияпрограммы.

O2 стандартныйуровеньоптимизации. Посравнению

с'-O' несущественноувеличиваеткакразмербинарника, такискоростьисполненияпрограммы.

Os оптимизацияуровня'-O2' всовокупностисфлагами, уменьшающимиразмер.

•fomit-frame-pointerуказываемкомпиляторунесохранять указательнакадрстека(такмыизбегаемвременныхзатратнаего сохранениеивосстановление).Использованиеэтогофлагаможетблаготворноповлиятьнаскоростьисполненияпрограммы.z

INFO

info

Системапортов

Gentoo, ArchLinux или FreeBSD — отличный источникинформацииотом, как правильнособрать программусучетом всехзависимостей.

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

каталогах, используй ldconfig(8). ПримердляOpenBSD: «ldconfig /usr/local/ lib /usr/X11R6/lib».

XÀÊÅÐ 10 /130/ 09

093

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

UNIXOID

 

w Click

 

 

 

 

 

m

ЮРИЙ «ADEPT» ВИДИНЕЕВ ADEPTG@GMAIL.COM

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

Собери вдорогуТукса

КаквыжатьмаксимумизLinux нанетбуке

Есливеритьстатистике, каждыйпятыйпроданный

в2009 годуноутбук— нетбук. Иэтонеудивительно

присравнительноневысокойстоимостиониобладаютпрактическивсемивозможностями«больших братьев», ноприэтомимеюткомпактныйразмери малыйвес. Отом, какреализоватьвсевозможности

нетбуковспомощьюLinux, яирасскажувэтойстатье.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Чащевсегонетбукиспользуютневкачествеосновногорабочегоинструмента(хотяявстречалитакихуникумов),

авкачествемобильногодополнения кдесктопуилибольшомуноуту. Притакомраскладевоглавуугластавитсявремяавтономной работы. Ксожалению, достаточнопрожорливые (еслисравниватьссемействомARM) процессор ичипсет, атакжемаленькийразмербатареи делаютсвоедело— максимальноевремя автономнойработынепревышает8 часовпри использованиибатареиповышеннойемкости, а всреднемдлястандартнойбатареисоставляет 3-5 часов.

Новремяавтономнойработыдостаточносильно зависитотвариантовиспользованияиоптимизацииОС. ПравильнымтюнингомОСможно добиться10-50% приростаэтогопоказателя.

ЗНАКОМСТВО СПОДОПЫТНЫМ

Вкачествеподопытноговыступалпрошедший огонь, водуинеоднутысячукилометровAcer Aspire One AOA110 схарактеристиками:

Экран 8,9" 1024 x 600

CPU Intel Atom N270 1.6 ГГц Чипсет Intel 945GSE

ОЗУ 512 Мб Накопитель 8 Гб SSD

Ñåòü 10/100 Ìáèò/ñ Ethernet,

802.11b/g

Камера 0,3 Мп, 2 кардридера 3-х элементная 2200 мАч батарея

ВместостандартногодистрибутиваLinpus Linux Lite, неустраивающегоменяпоряду причин(основнаяпретензия: малоидовольностароеПОврепозитории), яустановилна неготестовуюверсиюUbuntu 9.10 Netbook Remix (кмоментувыходастатьивпечатьуже долженвыйтирелиз). Вкачествефайловой системыидлякорня, идля/home явыбрал ext4. Swap-разделнесоздавализ-заопасений заздоровьеSSD. Несмотрянато, чтоUbuntu Netbook Remix изначальнозаточенподнетбуки, имеетсяещедостаточноместдляприложениянапильника.

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

1.Длятестированияврежимевеб-серфинга былнаписаннебольшойbash-скрипт, который вбесконечномциклесинтерваломв30 секунд открываетвFirefox 3.5 несколькосайтов(google. com, xakep.ru, linux.com) изакрываетбраузер.

ИнтернетвовремятестараздаетсяпоWi-Fi.

2.Притестированииврежимепросмотравидео mplayer постояннопроигрываетзнаменитый мультфильм«Big Buck Bunny» (1280x720, ogg).

Громкостьвыставленана80%.

Такжеспомощьюbootchart япротестировал времязагрузки.

Передпроведениемкаких-либооптимизаций былиполученырезультаты:

Время загрузки: 17 секунд

Âрежиме веб-серфинга: 163 минуты

Âрежиме просмотра видео: 118 минут

КТОВИНОВАТИЧТОДЕЛАТЬ?

Основнымсредствомдляконтроляэнергопотреблениясистемывцеломипроцессора вчастностиявляетсязамечательнаяутилита

PowerTOP, написаннаявнедрахкомпанииIntel. СпомощьюPowerTOP можнополучитьследующуюинформацию:

1.Сколькоивкакомрежимеработаетпроцессор. Чемдольшепроцессорработаетврежиме C3 илиC4, темменьшеэнергиионпотребляет.

2.Количествопробужденийвсекунду. Ясно, что чемменьшеэточисло— темлучше.

3.Текущееэнергопотреблениеиориентировочноевремяработыотбатареи.

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

5.Подсказки, описывающиеконкретныедействия, направленныенауменьшениеэнергопотребления.

PowerTOP естьврепозиторииUbuntu иустанавливаетсякакобычно:

094

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

$ sudo apt-get install powertop

Программунадозапускатьсправамиroot’а, желательноприотключенномадаптерепитания (тогдаможнобудетувидетьтекущееэнергопотреблениеивремядополногоразрядабатареи). Изскриншотоввидно, чтодажепридефолтныхнастройкахсистемавсостояниипокоя потребляетвсего8,3 Вт, апроцессорпочти80% временипроводитвсостоянииC3.

ВСЕНЕНУЖНОЕНАСЛОМ…

Первое, чтонеобходимосделать— этоотключитьвсе, чтовданныймоментнеиспользуется. Тоестьубратьненужныеслужбы, отключить сетевыеинтерфейсы, есливнихнетнеобходимости, отказатьсяотCompiz (есливключен), уменьшитьяркостьподсветкиLCD доминимальнокомфортногоуровняит.д. Проанализировавзапускаемыепристарте системыслужбы, яубралbluetooth (внетбуке нетвстроенного), cups (ниразунеподключалк немупринтер), avahi-daemon, saned иatd:

$ cd /etc/rc2.d/

$ sudo rm S25bluetooth S50avahidaemon S50cups S50saned S89atd

Зауправлениеяркостьюподсветкиотвечает

gnome-power-manager. Поумолчаниюпри работеотсетияркостьвыставляетсяв100%. Приработеотбатареи— на50% уменьшается. Личномневполнехватаети30%, поэтомуя настроилуменьшениеяркостиприработеот батареина70%:

$ gconftool-2 --set /apps/ gnome-power-manager/backlight/ brightness_dim_battery --type string 70

Splash screen мнетожененужен— толькосъедаетдрагоценныетакты, даскрываетполезную информацию. Заодноможноубратьподдержку IPv6, еслитаковаянетребуется. Отключение/ включениеsplash screen иIPv6 осуществляется засчетпередачиядруопределенныхпараметровпризагрузке. Дефолтныепараметры прописанывфайле/etc/default/grub, встроке

GRUB_CMDLINE_LINUX_DEFAULT. Яубрализ этойстрокипараметрыquiet иsplash, добавил параметрipv6.disable=1. Чтобыэтипараметры применилисьдлявсехядер, установленныхв системе, надодатькоманду:

$ sudo update-grub

Ещеодинспособуменьшитьпотреблениеэнергии— выгрузитьнеиспользуемыемодулиядра.

PowerTOP: успех!

Большевсегонаэнергииможносэкономить, выгрузивмодули, отвечающиезаработуweb- камерыиUSB-подсистемы:

$ sudo rmmod usb_storage uvcvideo videodev v4l1_compat

Дляавтоматизациизагрузки/выгрузкимодулей можнонаписатьскриптизапускатьегопри необходимостилибодобавитьэтотскриптв ACPI-скрипты.

ПОЕХАЛИ!

Примонтированиифайловыхсистемтожеесть возможностьотключить«лишние» фичи, что положительноскажетсянабыстродействиии временижизниSSD. Например, относительно безопасноможноотключитьзаписьвремени последнегодоступакфайлу(опциямонтированияnoatime). Приналичииисправнойбатареи можноувеличитьвремямеждусбросами буферовнадиск(спомощьюопциимонтированияcommit) иотключитьбарьер(barrier=0). Спомощьюопцииdata=writeback можновключитьсамыйбыстрыйрежимжурналирования (будетвестисьжурналтолькодляметаданных). Правда, уменясистемаотказываласьгрузиться, еслиэтотрежимустановлендлякорня. Пришлосьоставитьтолькодля/home. При полностьюотключенномжурналесистематоже грузитьсянезахотела. Витоге, моймодифицированный/etc/fstab сталвыглядетьследующим образом:

$ sudo nano /etc/fstab

UUID=31faf447-f5e3-40bd-9970-

16f703ee130b /

ext4

noatime,commit=100,barrier=0 0 1

UUID=baf24048-4209-4c8a-849c- d54de626846f /home ext4 noa time,commit=100,barrier=0,data=wri teback0 2

Процессор Intel Atom, как и большинство процессоров Intel, поддерживает техноло-

гию Enhanced Intel Speedstep Technology,

позволяющую изменять частоту процессора в зависимости от нагрузки, что неплохо экономит энергию. Ядро Linux, в свою очередь, поддерживает несколько схем изменения частоты процессора. Узнать, какие схемы

XÀÊÅÐ 10 /130/ 09

095

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

UNIXOID

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

PowerTOP: дооптимизаций

доступны на данном ядре, можно через sysfs:

$ cat /sys/devices/system/cpu/ cpu0/cpufreq/scaling_available_ governors

Ядро2.6.31 поддерживаетсхемы: conservative, ondemand, userspace, powersave иperformance. Powersave иperformance простодержатчастоту процессоранаминимальномимаксимальном уровнесоответственно(минимальнуюимаксимальнуючастотуможноузнатьиз/sys/devices/ system/cpu/cpu0/cpufreq/cpuinfo_min_freq и/ sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_ max_freq, значениевКГц). Userspace позволяет вручнуюустанавливатьнужнуючастотупроцес-

сора. Conservative иondemand подстраивают частотуподтекущуюнагрузку(разницамежду ними— вразличныхалгоритмахподсчета необходимойчастоты). Intel рекомендуетиспользоватьondemand. Посмотреть, какаясхема используетсявданныймомент, можнотак:

$ cat /sys/devices/system/cpu/cpu0/ cpufreq/scaling_governor

ВUbuntu ondemand используетсяпоумолчанию. Принеобходимостиизменисхемуна ondemand:

$ echo ondemand | sudo tee /sys/ devices/system/cpu/cpu0/cpufreq/ scaling_governor

Есливналичииимеетсянесколькопроцессорныхядер(пустьдажевиртуальных), тоondemand надопрописатьдлякаждогоизних.

Усхемыondemand естьнескольконастраиваемыхпараметров:

1.up_threshold — порогзагрузкипроцессора, прикоторомонпереходитнабольшуючастоту. В Ubuntu поумолчанию— 95%, поэтомувизмененииненуждается.

2.sampling_rate — какчастопроверяется

текущаязагрузкапроцессора. Поумолчанию— 100 развсекунду. Изменимзначениена1 разв секунду(указываетсявмикросекундах):

$ echo 1000000 | sudo tee /sys/ devices/system/cpu/cpu0/cpufreq/ sampling_rate

Посколькуsysfs — виртуальнаяфайловаясистема, товсевнесенныеизмененияпропадутпри перезагрузке. Поэтомудобавимв/etc/rc.local следующиекоманды:

$ sudo nano /etc/rc.local

echo ondemand > /sys/devices/system/ cpu/cpu0/cpufreq/scaling_governor echo ondemand > /sys/devices/system/ cpu/cpu1/cpufreq/scaling_governor echo 1000000 > /sys/devices/system/ cpu/cpu0/cpufreq/sampling_rate echo 1000000 > /sys/devices/system/ cpu/cpu1/cpufreq/sampling_rate

Дляувеличенияпроизводительностиможно сменитьпланировщикввода/вывода. ИспользуемыйпоумолчаниюCFQ создавалсядляработы сHDD; онизменяетпоследовательностьзаписи данныхсцельюупорядочитьдвижениеголовки подиску. ДляSSD такиеухищренияненужны, поэтому, чтобынетратитьвпустуюпроцессорное время, лучшесменитьCFQ наnoop. Дляэтого надокпараметрам, передаваемымядрупри загрузке, добавитьelevator=noop.

SSD имеет ограниченное число циклов записи; логи и временные файлы лучше вынести в ОЗУ. Для этого добавим в /etc/ fstab строчки:

$ sudo nano /etc/fstab

tmpfs

/var/logtmpfs

defaults0

0

 

 

 

tmpfs

/tmp

 

tmpfs

defaults

0

0

tmpfs

/var/tmptmpfs

defaults0

0

 

 

 

 

 

 

 

Ясно, чтовсесодержимоеэтихпапокпосле перезагрузкипропадет, аневсепрограммыумеюткорректнообрабатыватьситуацию, когдаих любимыйкаталогв/var/log отсутствует. Поэтому придетсявоссоздаватьструктурукаталоговв/ var/log прикаждойзагрузке. Дляэтогосоздадим в/etc/init.d скриптlogdirs:

$ sudo nano /etc/init.d/logdirs

for dir in apparmor apt bootchart ConsoleKit cups dist-upgrade fsck gdm news installer samba unattendedupgrades ;

do

if [ ! -e /var/log/$dir ] ;

then

mkdir /var/log/$dir

fi

done

Сделаемскриптисполняемымипропишемв автозапуск:

$ sudo chmod +x /etc/init.d/logdirs $ sudo ln -s /etc/init.d/logdirs / etc/rc2.d/S05logdirs

Опятьже, дляпродленияжизниSSD запишемв/ etc/sysctl.conf следующиезначения:

$ sudo nano /etc/sysctl.conf

#Устанавливает период между сбросами измененных данных из ОЗУ на диск в 15 сек. (по умолчанию 5 сек.) vm.dirty_writeback_centisecs=1500

#Включает laptop-mode

vm.laptop_mode=5

ВключениефункцииUSB autosuspend позволяетсэкономитьещенемногоэнергии. Однако пользоватьсяэтойфункциейнадоосторожно, таккактеоретическионаможетполомать подключенныйпринтерилисканер(пруфлинк: www.nabble.com/USB-Problems-with-Ubuntu-- -workaround-td12123128.html). Правда, ошибку ужеисправили(дляядер> 2.6.22), носаматакая возможностьнастораживает. PowerTOP советуетвключатьUSB autosuspend черезпередачу ядрупараметраusbcore.autosuspend=1. Для новыхядерметоднесработает, поэтомупридетсявключатьчерезsysfs. Дляэтоговфайл/etc/ rc.local добавимзаписи:

$ sudo nano /etc/rc.local

#Включаем автоматическое управление питанием

for i in `ls /sys/bus/usb/devices/*/ power/level` ; do echo "auto" > $i ; done

#Управление питанием включится, как только устройство освободится (немедленно, через 0 сек.)

for i in `ls /sys/bus/usb/devices/*/ power/autosuspend` ; do echo "0" > $i ; done

#Заодно выключим функцию Wake-on-

096

XÀÊÅÐ 10 /130/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

Видео-тест

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

DVD

dvd

Наприлагаемом кжурналудискеты найдешьпримеры конфигурационных файловискрипты длятестирования.

ИнтерфейсUbuntu Netbook Remix

Lan на сетевом интерфейсе ethtool -s eth0 wol d

Сменатаймера, отсчитывающеготикиядра, состандартного 8254 насовременныйиболееточныйhpet должнаускорить загрузкусистемыиположительносказатьсяналатентности. Дляэтогонадокпараметрам, передаваемымядрупри загрузке, добавитьclocksource=hpet.

Теоретическивключениережимапараллельнойзагрузки должносущественноускоритьзагрузкусистемынамногоядерныхпроцессорах. Intel Atom N270 — «псевдо-двухъ- ядерный» (одноядерный, сHyper-Threading), такчтоможно ожидатьнебольшогоускорения. Длявключениярежима параллельнойзагрузкинадовфайле/etc/init.d/rc изменить строчкуCONCURRENCY=none наCONCURRENCY=shell.

ЯДЕРНЫЕВОЙНЫ

Сростомпопулярностинетбуковсталиодинзадругим появлятьсяпроекты, которыепредоставляютсборкиядра Linux (илидажецелыедистрибутивы) подконкретнуюмодель илисемейство. Большевсеготакихпроектов, конечноже, направленонаподдержкуAsus Eee PC, ноидляAcer Aspire ихнемало. Мнеудалосьобнаружить3 активноразвивающихсяпроекта(игораздобольшезаброшенных):

1.www.kuki.me — легкийдистрибутивнабазеUbuntu, поддерживающийтольколинейкунетбуковотAcer. Можно скачатьотдельноядро(последняяверсия: 2.6.31-rc3).

2.array.org/ubuntu — сборкиядрадляUbuntu. Сначала проектподдерживалтолькосборкидляAsus Eee, нопотом быливыпущеныверсии, поддерживающиеширокийспектр нетбуков. Последняяверсияядра: 2.6.28.

3.www.aspireonekernel.com — сборкиядрадляUbuntu.

ПоддерживаетсятолькоAcer Aspire One. Последняяверсия ядра: 2.6.29.

Установкаядрасkuki.me тривиальна— скачиваемdeb-па- кет, которыйпотомустанавливаем. Системасэтимядром

XÀÊÅÐ 10 /130/ 09

Наглядныерезультаты

грузитсяощутимобыстрее(помнениюbootchart — за11 секунд). Энергопотреблениенескольковыше, чемсдефолтным ядром(8,5 Втпротив8,3 Втвсостоянии«покоя»). Присборке этогоядраневключилиопциюCONFIG_TIMER_STATS, поэтомуPowerTOP неможетотобразитькомпонентысистемы, вызывающиенаибольшееколичествопробужденийв секунду. Кромебыстройзагрузки, ядронеприятноудивило короткими, пустьинечастымифризамисистемы. Установитьядросarray.org тоженесложно— достаточно подключитьихрепозиторий. Поданнымbootchart система грузитсяещебыстрее— всегоза10 секунд. Энергопотреблениетоженизкое— всего7,6 Вт. Ноэтотприятныйфактобусловленнеприятнымобстоятельством: изкоробкинеработает Wi-Fi. Впрочем, егонесложнонастроить.

Уaspireonekernel.com нетсвоегорепозитория, иядропросто скачиваетсяиустанавливается. Системасэтимядром грузитсяза11 секундипотребляет8,3 Вт. Ксожалению, CONFIG_TIMER_STATS тожеотключенприсборке.

Всетриальтернативныхядрапревосходятстандартноеядро лишьпоодномупоказателю— скоростизагрузки. Учитывая вероятныепроблемы(втомчисле, сапдейтами), ярешил остатьсянастандартномядре.

HTTP://WWW

links

www.lesswatts.

org — пожалуй, самое полноесобрание материаловнатему энергосбережения вLinux. Таккаксайт созданкомпанией Intel, тоупорсделан наработуименносее оборудованием.

• Подробнееоб опцияхмонтированияext4 читайздесь: www.kernel.org/ doc/Documentation/ filesystems/ext4.txt.

ИТОГ

Врезультатевсехоптимизацийвсостоянии«покоя» энергопотреблениесистемыпопоказаниямPowerTOP снизилосьс 8,3 Втдо7,1 Вт(на14%). Послепроизведенныхнастроекбыли полученырезультаты:

Время загрузки-14 секунд (-17%)

Âрежиме веб-серфинга нетбук продержался 179 минут (+10%)

Âрежиме просмотра видео нетбук продержался 151 минуту (+28%)

Итак, мывидим, чтоспомощьюнебольшихдоводокможно увеличитьвремяавтономнойработына10-30%. Иэтодля ОС, ужеоптимизированнойдляработынанетбуке. Вслучае собычной, десктопнойОС, цифрыбылибынескольковыше. Ночудеснебывает, икардинальнорешитьпроблемусовременемавтономнойработыможнотолькопокупкойбатареис большейемкостью.

Вконцеэтогогодабольшинствоименитыхпроизводителейнетбуковобещаютвыпуститьмоделиспроцессором ARM (ужеуспевшиеобрестисобственноеимя— смартбуки). Благодарянизкомуэнергопотреблению, смартбуки должныжитьнаодномзаряденедостижимоедляобычных нетбуковвремя— от10 часовидольше. Чтож, ждемс нетерпением! z

INFO

info

Помни, чтоUbuntu 9.10 поумолчанию используетGRUB2, поэтомуручноередактирование/boot/ grub/grub.cfg неже-

лательно. Настройки загрузчикаменяются в/etc/grub.d и/etc/ default/grub.

Чтобывключить автоповторениев mplayer, добавьв файл~/.mplayer/ config строчкуloop=0.

097

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

UNIXOID

 

w Click

 

 

 

 

 

 

ЮРИЙ «ADEPT» ВИДИНЕЕВ / ADEPTG@GMAIL.COM /

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

Рожденные

мультимедиа

революцией

ОбзормультимедийныхдистрибутивовLinux

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

 

 

пакете(extra-codecs-nonfree), которыйможно

наличиемедиацентраFreevo, превращающего

GEEXBOX 1.2.3

 

 

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

дистрибутиввполнофункциональныйинстру-

ÎÑ: GEEXBOX 1.2.3

 

жесткийдискиливовремяегопересборки.

ментдляпросмотравсегоився.

САЙТ ПРОЕКТА: GEEXBOX.ORG

 

Изначальнопроектпривлекалтехпользовате-

Несмотрянакрохотныйразмер(составляетпо-

ДАТА ВЫХОДА: 10 ÈÞËß 2009 ÃÎÄÀ

 

лей, компыкоторыхбылинеспособныспра-

рядка19 Мб— этогоудалосьдобитьсяблагодаря

ЛИЦЕНЗИЯ: GNU GPL

 

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

грамотномуподходуииспользованиюпакетов

АППАРАТНЫЕ ПЛАТФОРМЫ: X86_32,

 

хорошегокачества. Засчетоптимизацииими-

BusyBox иuClibc), системаидетсмаксималь-

X86_64, POWERPC

 

нимизацииудавалосьвыжатьизстарогоящика

нойпоставкойдрайверовиавтоматически

СИСТЕМНЫЕ ТРЕБОВАНИЯ: INTEL

 

вседопоследнеготактапроцессораимегабайта

определяетбольшуючастьоборудования. Втом

PENTIUM II 400 ÌÃÖ, 64 MÁ RAM

 

оперативки. Явсвоевремяличноубедилсяв

числеTV-тюнеры, WiFi, DVB-карты, — нетребуя

ОСНОВНЫЕ КОМПОНЕНТЫ: KERNEL

 

этом, когданемогнормальносмотретьвидеона

пересборкиядраиликаких-либодругихмани-

2.6.27.13, GLIBC 2.7, UDEV 124, XORG

 

древнемCeleron 300A, — помогаллибооптими-

пуляцийсостороныпользователя. Изначально

1.5.3, MPLAYER 1.0RC2

 

зированныйCrux (www.crux.nu), либоGeeXboX.

поддерживаютсяпрактическивсеосновныеау-

 

 

Согласись, чтоGeeXboX напорядокудобнеедля

дио/видео/графическиеформатыикодеки, кро-

Первыйучастникнашегомультимедийного

обычногопользователя. Снимменьшевозни:

менесколькихnon-free (RealMedia, QuickTime,

тест-драйвавыполненввидезагрузочного

простовставилдисквприводисмотришьфильм

WindowsMedia). Управлениепроизводитсяпри

LiveCD-образаиработаетбезустановкина

илислушаешьмузыку. Сегодня, когдачастотой

помощиэкранногоменю, горячихклавиш, либо

жесткийдиск, хотяразработчикипроектапред-

процессорауженикогонеудивишь, GeeXboX

удаленночерезLIRC.

лагаютвариантдистрибутивасвозможностью

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

GeeXboX загружаетсявОЗУ, полностьюосвобож-

загрузкисвинчестераилилюбоговнешнего

домашнихкинотеатров, дляпросмотравидеона

даяустройствопоокончаниизагрузки. Поумол-

накопителя(USB-флешки, картыпамятиCF/

бездисковыхсистемах, вкоторыхОСзагру-

чаниюсистемастартуетврежимеподдержки

SD). GeeXboX умеетвоспроизводитьвидео(в

жаетсявоперативнуюпамять. Пользователи

HD-видео(Start GeeXboX for HDTV), тоестьбудет

томчислесHD-разрешением), аудиоиграфи-

нетбуковотмечают, какминимум, 10-процент-

установленомаксимальновозможноеразреше-

ческиефайлыc жесткогодиска, CD/DVD-носи-

ноеувеличениевремениработыотбатареи(в

ниеэкрана. Еслиононедотягиваетдонужных

теля, сетевогоресурсаLAN (NFS, SMB/CIFS),

сравнениисостандартнойсистемой). Поэтому

(1920x1080, 16:9), товоспроизводимоевидео

атакжеприниматьпотоковоевещание. Кроме

уходитьнапенсиюGeeXboX ещерано.

масштабируется. Вобычномрежиме(Start

традиционныхдляLinux файловыхсистем,

Внастоящеевремяведетсяразработкадвух

GeeXboX) устанавливаетсяразрешение800х600,

поддерживаютсяFAT иNTFS, поэтомупроблем

ветокдистрибутива: 1.2.хи2.х. Вариант1.2.х

чтооптимальнодляпросмотра«стандартного»

своспроизведениемфайлов, находящихсяна

построеннаMPlayer исчитаетсястабильным.

видео. Хотяпринеобходимостиможноотредак-

разныхразделах, вGeeXboX нет. Некоторые

Версия2.хнаходитсявсостоянииразработки

тироватьпараметр«vga» взагрузочномменю

кодеки, имеющиенесвободнуюлицензию

ипоканепредназначенадляповседневного

(доступнопо<Tab>), установивсвоеразреше-

(например, rv9 иwmv9), собранывотдельном

использования. Ееособенностьюявляется

ние. Интерфейсдовольнопроствиспользова-

098

XÀÊÅÐ 10 /130/ 09

Соседние файлы в папке журнал хакер