книги хакеры / журнал хакер / 130_Optimized
.pdf
|
|
|
|
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 |