Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
16.61 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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ДЛЯКАЖДОГОСЕРВИСАСВОЙКОНФИГУРАЦИОННЫЙФАЙЛPAM

настройкинеобходимовыполнитьвсегодвашага. Первый

— создатьслепокпальцаспомощьюследующейкоманды:

$ pam_fprint_enroll --enroll-finger 6

Цифра6 означаетбольшойпалецправойруки. Система fprint нумеруетпальцыобеихрукслеванаправо, отодного додесяти, такчто1 — этомизинецлевойруки, а8 — средний палецправой.

Второйшаг. Добавитьpam_fprint встекauth необходимых приложений. Дляэтогооткрываемужезнакомыйнам/etc/ pam.d/common-auth (или/etc/pam.d/system воFreeBSD) ивставляемвначалостроку«auth sufficient pam_fprint. so». Принеобходимостиуказываемфлагrequired вместо sufficient, чтобыбезотпечаткавообщенельзябыловойти

(нонерекомендуюэтогоделать; современныепотребительскиесистемыраспознаванияотпечатковпальцевдалекиот совершенства).

ЧЕРНЫЕСПИСКИ, БЕСПАРОЛЬНЫЕ ПОЛЬЗОВАТЕЛИИАЛЬТЕРНАТИВНЫЕБАЗЫПАРОЛЕЙ

Процесспомещенияпользователейвчерныеибелые спискидопоявленияPAM обычнопревращалсявкакое-то шаманство, сопровождаемоемногочисленнымиэкспериментами, аконечнаяцельдостигаласьзасчетиспользованиякостылей. Сегодняпользователямисистемнымадми-

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

Возьмем, кпримеру, модульpam_listfile (доступныйтолько впакетеLinux-PAM). Сегопомощьюлегконастроитьсистемубеспарольноговходапользователей. Простодобавь следующуюстрокувконфигурационныйPAM-файлнужного приложенияизапишибеспарольныхпользователейвфайл

/etc/users.allow:

auth sufficient pam_listfile.so item=user sense=allow file=/etc/users.allow onerr=fail

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

auth sufficient pam_listfile.so item=user sense=deny file=/etc/users.deny onerr=fail

Причем, вкачествезначенияопцииitem можноисполь-

зоватьтакжеtty, user, rhost, ruser, group, shell. Этодает возможностьзапрещать/позволятьвходнетольконаосновеименпользователей, ноиименитерминала, скоторого происходитвход, имениудаленногохоста/пользователя, группыит.д.

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

WARNING

info

ВOpenBSD под-

держкаPAM полностьюотсутствует.

СпомощьюPAM невозможнореализо-

ватьKerberos.

XÀÊÅÐ 08 /128/ 09

079

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

BUY

>>m

 

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

МНОГИЕМОДУЛИPAM ПОРТИРОВАНЫВОFREEBSD

онногофайлаипредназначендляпомещениявстекaccount (проверка, можетлипользовательвойти, осуществляетсяужепослетого, какон представился, тоестьввелправильные логин и пароль). Модуль удобно использовать в связке с ssh для выставления за дверь неугодных. Для этого надо поместить модуль в стек account: «account required pam_access.so» и создать файл /etc/security/access.conf примерно с таким содержимым:

# vi /etc/security/access.conf

+: ALL : 192.168.1

+: good_guy : ALL - : ALL : ALL

Возвращаяськспискампользователей, нельзянеупомянутьодовольно интересноммодулеpam_pwdfile (cpbotha.net/software/pam_pwdfile).

Егозадача— предоставитьприложениямальтернативнуюбазупользователейипаролей, которуюонисмогутиспользоватьвместосистемного файла/etc/passwd. Этосвоегородаплагиндлятехприложенийидемонов, которыенеспособнывестиподобнуюбазусамостоятельно. Яркий пример: минималистичныйFTP-серверvsftpd. Запустиегоотнепривилегированногопользователя, иклиентынесмогутполучитьдоступксерверу. Выход: использоватьpam_pwdfile, которыйбудетвестиотдельный файллогиновипаролейспециальнодляvsftpd. Дляиспользования достаточнодобавитьследующиедвестрокивначало/etc/pam.d/vsftpd:

auth required pam_pwdfile.so pwdfile /usr/local/etc/

 

Это означает, что получить доступ через ssh могут все из подсети

vsftpd/vsftpd.users

 

 

192.168.1.0 и парень с логином good_guy. Остальные идут лесом.

account required pam_pwdfile.so pwdfile /usr/local/

 

 

На просторах всемирной паутины можно найти и более простой

etc/vsftpd/vsftpd.users

 

 

модуль pam_lockout (ostatic.com/pam-lockout). Он позволяет пере-

 

 

 

числить имена неугодных пользователей прямо в конфигурационном

И добавить пользователей в базу с помощью утилиты chpwdfile

 

 

файле PAM: «auth requisite pam_lockout.so user=bad_guy».

(eclipse.che.uct.ac.za/chpwdfile) — либо руками заполнив его строка-

 

 

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

ми вида: «логин:MD5-хеш-пароля».

 

 

соли удобно использовать модуль pam_alredyloggedin (ilya-evseev.

На закуску я оставил вкуснейший модуль pam_abl (hexten.net/

 

 

narod.ru/posix/pam_alreadyloggedin). Он запрашивает пароль только

pam_abl), самостоятельно ведущий и обновляющий черные списки

 

 

в случае, если пользователь еще не залогинился в другой консоли

пользователей-брутфорсеров. Это отличная портабельная между

 

 

(идеальное решение, когда используешь сразу несколько консолей,

UNIX’ами альтернатива блэклистингу на основе правил брандмауэ-

 

 

переключаясь между ними с помощью <Alt+Fx>). Для настройки

ра. Модуль вычисляет тех, кто слишком настойчиво пытается пройти

 

 

просто помещаем следующие две строки на самый верх стека auth (в

аутентификацию, и блокирует аккаунт или вызывающий хост на

 

 

начало файла):

определенное время. Для настройки открываем /etc/pam.d/sshd и

 

 

 

 

добавляем в начало строку «auth required pam_abl.so config=/etc/

 

 

auth required /lib/security/pam_securetty.so

security/pam_abl.conf». По умолчанию модуль настроен на блоки-

 

 

auth sufficient /lib/security/pam_alreadyloggedin.so

ровку аккаунта. Это правильно, если твой хост подвергся распреде-

 

 

no_root

ленному брутфорсу, но вызовет проблемы для легальных пользова-

 

 

 

 

080

XÀÊÅÐ 08 /128/ 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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

телей, которые попытаются войти в систему сразу после проведения безуспешной попытки «взлома». В обычной ситуации для борьбы со скрипт-кидди лучше настроить блокировку на основе имени вызывающего хоста. Поэтому открываем файл /etc/security/pam_abl.conf и пишем в него:

# vi /etc/security/pam_abl.conf

// Черный список host_db=/var/lib/abl/hosts.db

//Блокировка сроком на два дня host_purge=2d

//Блокировка любого хоста после 10 неудачных попыток çà 1 ÷àñ

host_rule=*:10/1h

ПРОСТРАНСТВАИМЕН, АВТОМОНТИРОВАНИЕ, CHROOT

Как было сказано выше, стек PAM-модулей session предназначен для модулей, подготавливающих окружение для только что вошедшего пользователя. Это может быть любое действие, связанное с выделением или ограничением доступных пользователям ресурсов. Наиболее показательный пример — модуль pam_limits из пакета Linux-PAM (но не OpenPAM). Он ограничивает ресурсы приложений вошедшего пользователя на основе конфигурационного файла /etc/ security/limits.conf.

Если говорить о сторонних разработках, то в первую очередь следует упомянуть полезнейший модуль pam_chroot (sourceforge.net/ projects/pam-chroot), единственная задача которого — помещать вошедших пользователей в песочницу. Модуль незаменим, когда требуется организация shell-, ftpили какого-либо другого хостинга и любых конфигураций, предусматривающих вход в систему сомнительных лиц. Модуль очень прост в использовании. Для настройки достаточно выполнить две команды:

#echo 'session required pam_chroot.so' >> /etc/pam.d/ ssh

#echo 'vasya /usr/chroot' >> /etc/security/chroot. conf

Все, теперь vasya, вошедший с помощью ssh-клиента, будет помещен в каталог /usr/chroot и не сможет из него выбраться.

На втором месте в рейтинге — модуль pam_mkhomedir из пакета Linux-PAM, просто создающий домашний каталог для прошедшего аутентификацию пользователя.

Поначалу полезность модуля может показаться сомнительной, но администраторы гетерогенных сетей, состоящих вперемешку из машин Windows/UNIX, ценят его дороже своих потертых джинсов. Дело в том, что в таких сетях принято использовать Active Directory для хранения учетных данных пользователей, коих может быть не одна сотня. Вместо того чтобы создавать многочисленные каталоги для каждого пользователя, зарегистрированного в AD, они просто выполняют приведенную ниже команду на всех UNIX-машинах и удаляются в серверную порезаться в «контру»:

# echo 'session required pam_mkhomedir.so skel=/etc/ skel/ umask=027' >> /etc/pam.d/common-session

Модуль обычно используется в связке с модулем pam_winbind, осуществляющим аутентификацию в AD, или с pam_ldap, аутентифицирующим пользователей, используя сервер LDAP.

Почетное третье место занимает завязанный на возможностях Linuxядра модуль pam_namespace. Его задача — незаметное создание изолированной копии общедоступного каталога (/tmp, например) для каждого пользователя. Другими словами, вошедший пользователь получает доступ только к своей версии каталога /tmp и не видит

XÀÊÅÐ 08 /128/ 09

файлов других пользователей. Нужно это для борьбы с методами взлома, основанными на использовании состояний гонок (race condition), символических ссылок и просто для ограждения возможного нарушителя от любых файлов легальных пользователей. Модульиспользуетпростойконфигурационныйфайл/etc/security/ namespace.conf дляпринятиярешенияотом, какиекаталогидолжныбыть подменены. Вотпростаяинструкциядляизолированиякаталога/tmp:

#mkdir /tmp-inst

#chmod 0 /tmp-inst

#echo "/tmp /tmp-inst/ user root" >> /etc/security/ namespace.conf

#echo "session required pam_namespace.so" >> /etc/ pam.d/common-session

Результат: индивидуальный каталог /tmp для каждого пользователя, за исключением root’а (на самом деле файлы будут храниться в ката- логе /tmp-inst/юзер). Конфигурационная строка для изолирования каталога /home (чтобы злоумышленник не смог увидеть и получить доступ к каталогам пользователей) должна выглядеть так:

$HOME $HOME/$USER.inst/ user root

АВТОМАТИЗИРОВАННАЯПРОВЕРКА ПАРОЛЕЙНАСТОЙКОСТЬ

Плагины PAM-стека password вызываются каждый раз, когда пользователь меняет реквизиты своей учетной записи. Поэтому туда принято помещать любые модули, так или иначе связанные с проверкой введенных пользователем данных. Один из немногих таких модулей называется pam_cracklib и предназначен для проверки паролей на стойкость с помощью следующих техник:

Отброс слишком коротких паролей;

Запрещение пароля, совпадающего или очень похожего на предыдущий;

Запрещение пароля, отличающегося от предыдущего только регис-

тром символов (UnixOid, UnIxOiD);

Запрещение «паролей-перевертышей» (старый пароль: unixoid,

новый: dioxinu);

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

Практически единственное место, куда можно включить вызов pam_ cracklib — файл /etc/pam.d/passwd, используемый командой passwd.

Вот его содержимое после внесения изменений:

password required pam_cracklib.so retry=3 minlen=8 dcredit=-2 ucredit=-1 ocredit=-1 lcredit=0 password required pam_unix.so use_authtok

Аргументы модуля говорят о следующем: длина пароля должна составлять минимум 6 символов, из которых два должны быть числами, один — символом верхнего регистра и еще один — неалфавитным знаком (тире, например).

ВЫВОДЫ

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

Практически для любой задачи, требующей аутентификации и настройки окружения пользователя, можно найти готовый модуль PAM, а при необходимости — написать его самому (это просто). Для дальнейшего изучения рекомендую обратиться к страничке www. kernel.org/pub/linux/libs/pam/modules.html. Она содержит ссылки на все доступные на данный момент модули PAM, способные работать в связке с Linux-PAM. z

081

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

BUY

>>m

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЕВГЕНИЙ ЗОБНИН / ZOBNIN@GMAIL.CO /, СЕРГЕЙ ЯРЕМЧУК / GRINDER@UA.FM/, ДЕНИС КОЛИСНИЧЕНКО / DHSILABS@MAIL.RU/

САПОГИ-СКОРОХОДЫ ДЛЯТУКСА

MegaFAQ поразгонуLinux надесктопе

ПрожорливостьсовременныхLinux-дистрибутивовлегкоощутить, запустиводинизнихнакомпес512 МбОЗУиликупивASUS EeePC. Нерасторопнаязагрузкадесктопа, борьбаприложенийзаресурсы, тонущийподсобственнымвесомFirefox ипостоянношуршащий жесткийдиск— зрелищепугающееиобескураживающее. Гдеже тотLinux, которыйспособенработатьнамашинахс16 Мбоперативкиипроцессоромсемействаi486? Аведьондосихпортам, внутри, задавленныйгрузоммногочисленныхбиблиотек, бесполезных демонов, жирныхприложенийикрасивостейрабочегостола.

 

 

 

 

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

 

 

 

 

>> unixoid

Q. Вмоемлюбимомдистрибутиве

for i in /etc/rc$runlevel.d/S*

И замени строку «*) startup $i start ;;» на

Linux загружаетсяогромноеколичествосер-

 

«*) startup $i start & ;;». Так загрузочные

висов. Этозанимаеткучувремени. Можноли

do

процессы будут запускаться параллельно:

как-тоускоритьзагрузку?

case "$runlevel" in

последующий сервис начнет стартовать,

A. Ну, например, можнопопытатьсяоргани-

не дожидаясь выполнения предыдущего.

зоватьпараллельныйзапусксервисов. Это

*) startup $i start ;;

После модификации конфига перезагрузи

несложно, найдивфайле/etc/init.d/rc такой

esac

систему. Если тебе повезет, и Linux запустит-

код:

done

ся корректно, то время его запуска сокра-

 

 

 

082

XÀÊÅÐ 08 /128/ 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРОГРАММАНАСТРОЙКИСЕРВИСОВПРИИСПОЛЬЗОВАНИИINIT-NG

тится примерно в два раза. Но он может и не загрузиться. У этого способа есть один недостаток. Представим, что нам нужно запустить 4 сервиса: A, B, C и D, причем сервис C — довольно громоздкий, и его запуск занимает, скажем, секунд 15-20, а сервис D

— небольшой, но он зависит от C. Получается, что C еще не запущен, а D запущен, но он не может работать без C. В результате, D окажется неработающим. В реальной системе таких сервисов может быть много. Что же делать? Ответ прост: нужно использовать программу cinit, которая параллельно запускает сервисы, но при этом проверяет зависимости. Таким образом, cinit не запустит сервис D, если сервис C, необходимый для корректной работы D, еще не запущен. Прочитать о правильной настройке cinit можно по адресу: nico.schottelius.org/documentations/ speeches/metarheinmain-chaosdays-110b/ cinit/view. Еще один вариант — перевести дистрибутив на систему инициализации

InitNG (Init Next Generation). За подробнос-

тями обращайся к статье «Молниеносная загрузка тукса» z _03_2006).

Кслову, убунтовскийupstart, использующий методпараллельногозапускасервисов, грузитдистрибутивдоокналогиназа~10 секунд.

Q.Акакотключитьненужныесервисы?

A.Отключить сервисы можно с помощью графического конфигуратора

(drakxservices в Mandriva, system- config-services в Fedora, services-admin

вUbuntu), но намного проще «прибить» ссылку в соответствующем rcN.d-каталоге (или же переместить ее в другой каталог

— на случай, если когда-то понадобится включить сервис).

Q.Какувеличитьобъемвиртуальнойпамяти?

A.Наберикомандуfree вконсоли. Сколько виртуальнойпамяти(физическаяпамятьплюс областьподкачки) сейчассвободно? Есливсе заполнено, например, осталосьнесколько мегабайтфизическойпамятиистолькожев своп-области, значит, памятикатастрофическинехватает. Лучшийсовет— этокупитьеще одинмодульоперативки. Вкачествевременногорешениямогупредложитьсоздатьи активироватьдополнительныйфайлподкачки (внашемслучаеегоразмер— 512 Мб):

#dd if=/dev/zero of=/swap/sw-file bs=1k count=524288

#mkswap /swap/sw-file 524288

#swapon /swap/sw-file

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

«swapon -a»).

Q.Какповыситьпроизводительностьвиртуальнойпамяти?

A.Еслитыработаешьснебольшимипрограммамиичастопереключаешьсямеждуними, можноустановитькоэффициентподкачки равным20 или30. Вэтомслучаепереключениемеждуприложениямибудетмгновенным, нозамедлитсяихработа. Посколькуприложениянебольшогоразмера, тоэтонебудет заметно.

Еслиженапротяженииднятывосновном работаешьсгромоздкимиприложениями, например, OpenOffice, илизанимаешься обработкойизображенийвGIMP, лучше установитьзначениекоэффициента, превышающее70, например, 80 илидаже85.

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

>>

w Click

 

BUY

 

m

 

 

 

 

 

 

unixoidw

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

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

# echo "20" > /proc/sys/vm/ swappiness

Иличерез/etc/sysctl.conf:

vm.swappiness = 20

Поэкспериментируйсразличнымипараметрами— толькотакможноподобратьдлясебя оптимальноезначение.

Крометого, немешаетограничитьразмер файловогокэша, чтобыонзанималменьшеОЗУ(такмыпредотвращаемсвопинг), и активироватьпринудительныйсбросбуфера вслучае, еслиприложениясуммарнозаймут болееполовиныпамяти:

vm.pagecache = 90 vm.dirty_ratio = 50

Q.Какоптимизироватьработужесткого диска?

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

$ hdparm /dev/sda

$ hdparm -i /dev/sda

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

MaxMultSect/MultSect — максимальное/

текущеечислосекторов, которыедискможет считатьзаодинпроход(длямаксимальной производительностионидолжнысовпадать);

PIO modes/DMA modes — режимы, которые поддерживаетжесткийдиск(режим, помеченныйзвездочкой, являетсятекущим);

multcount — числоодновременносчитываемыхсекторов;

I/O support — режимработыжесткогодиска (16-битныйрежим, 32-битныйрежимили32- битныйсинхронныйрежим);

using_dma — использоватьDMA илинет;

readahead — количествосекторовдляупреждающегочтения.

Переопределитьустановкидляконкретного дискаможновкоманднойстроке(вступаютв силунемедленно) или— указавихвконфигу-

рационномфайле/etc/hdparm.conf или/etc/ default/hdparm (потребуетсяперезагрузка). Влияниеизмененийможнопротестировать припомощикоманды«hdparm -tT /dev/sda».

ДляпримеравключимDMA (-d1), 32-битный

XÀÊÅÐ 08 /128/ 09

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

BUY

>>m

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

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

 

 

 

 

ПЛАНИРОВЩИКИВВОДА/

ВЫВОДАИПРОЦЕССОВ, РЕАЛТАЙМЯДРА

ЯдроLinuxподдерживаетнесколькоразличныхалгоритмовпланировщиковввода/вывода (I/Oscheduler)ипроцессов.СписокI/Oschedulerможнополучить,прочитавфайл/sys/ block/sda/queue/scheduler:

#cat/sys/block/sda/queue/scheduler noopanticipatorydeadline[cfq]

АлгоритмCFQ(CompletelyFairQueuing),используемыйпоумолчаниювсовременныхядрах, идеальноподходитдляслучаев,когдамножествопрограмммогутпотребоватьдоступк диску,атакжедлямногопроцессорныхсистем,которымтребуетсясбалансированнаяработа I/Oподсистемысразличнымиустройствами.ПрибольшихоперацияхсчитыванияегоможнопереключитьнаDeadlineилиAnticipatory:

#echoanticipatory>/sys/block/sda/queue/scheduler

Аналогичнаситуацияиспланировщикомпроцессов:здесьможновыбиратьмеждустарич- комO(1),CFS(CompletelyFairScheduler,абсолютносправедливыйпланировщик,включенв 2.6.23)илидругимипланировщиками,но,правда,дляэтогопридетсяпересобиратьядро.

Подробнееопланировщикахчитайвстатье«Позовипингвинанапланерку»,опубликованнойвz_12_2007.

КОМАНДАFREE ВДЕЙСТВИИ

КОНФИГУРАТОР

SYSTEM-CONFIG-SERVICES

режимI/O (c1); multicount выкручиваемпомак- симуму(-m64), аупреждающеечтениеставим равнымmulticount (-a64). Установкапараметра ‘-u1’ разрешаетдрайверупараллельнообрабатыватьнесколькопрерываний, чтоповышает производительность:

# hdparm -u1c1d1m64a64 /dev/sda

Дополнительноможнопоигратьсяспарамет- ром‘-W’ (0/1), отключающим/включающим кэширование. Егозначениезависитотпроиз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

084

 

XÀÊÅÐ 08 /128/ 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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

водителяимоделихардаипоумолчаниюне определено.

Q. Какзадатьотдельнойпрограммеприоритетдляработысдиском?

A. Аналогичноnice, позволяющейизменить приоритетпроцесса, утилитаionice задает приоритетнаиспользованиехардадля процессаилиприложения. ВUbuntu ionice входитвпакетschedutils. Приоритетуказываетсяприпомощиклассаисобственно приоритетаввиде:

ionice -c класс -n приоритет -p PID

 

 

 

 

 

 

 

 

 

Приоритет— числоот0 до7 (чемменьшечисло,

 

 

 

 

темонвыше). Впозициикласстризначения:

 

 

 

 

1. Real time — планировщикдаетпреимущест-

 

 

 

 

вопридоступекдискувыбранномупроцессу,

 

 

 

 

безвниманиянаработудругихпроцессов(8

 

 

 

 

уровнейприоритета[0-7]);

КОНФИГУРАТОРDRAKXSERVICES

 

 

2. Best Effort — класс, устанавливаемыйпо

 

 

умолчаниюдлявсехпроцессов(8 уровней

 

 

 

 

приоритета);

 

 

 

 

3. Idle — программаполучаетправонаисполь-

ведетжурнал) сопциейnoatime (неиспользо-

пентиуме(тожеличныйопыт), иэтонесмотря

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

ватьвременныеметкипоследнегодоступа). То

на1 Гбоперативки, 2.6-гигагерцовыйкамень

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

жеотноситсяккаталогу/tmp, заисключением

иполностьюотключенныеэффекты. После

оритетынезадаются.

того, чтовэтомслучаеatime лучшеоставить.

установкиофициальныхдровкедыполетели

ВместоPID можноуказатьимяпроцесса:

Каталог/var хранитмножествомелкихфайлов,

быстрееXFCE. Ответнавопрос«почему?» легко

 

дляуправлениякоторымиотличноподходит

найти, прочитавдокументациюкnv, которая

$ sudo ionice -c2 -n0 mplayer

ReiserFS, /home — важнейшиеданныеполь-

прямоговоритополномотсутствиифункций

 

зователя, поэтомукнемулучшеподключить

2D-ускорения(именно2D) вдрайвере.

Q. Какразогнатьфайловуюсистему?

журналируемуюФС.

Второе, чтоможносделать— установитьпро-

A. Черезотключениененужнойфункциональ-

Кстати, дляускорениядоступаккаталогу/tmp

стуюутилитуnvclock (www.linuxhardware.org/

ности. ЛюбаясовременнаяФСдостаточно

можноиспользоватьфайловуюсистемуtmpfs,

nvclock), котораяпозволитразогнатьвидеокар-

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

хранящуювсесвоифайлывоперативной

тукакпочастотевидеочипа, такипопамяти. На

функций, которыеличнотебемогутинепона-

памяти. Этоотличноеподспорьетогда, когда

моемдомашнемкомпеустановленастаренькая

добиться. Возьмем, кпримеру, ext3, наиболее

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

видеокартаnVidia 5900FX. Когда-тодавноя

популярнуюсегодняLinux-ФС. Онаобладает

 

для/etc/fstab:

запускалнанейпервыйFar Cry (черезwine).

двумяважными, нодалеконевсегданеоб-

 

 

Поначалуонпритормаживалдаженасредних

ходимымифункциями: журналированиеи

 

tmpfs /tmp tmpfs size=512m,mode=1777

настройкахграфики, нопослевыполнения

временныеметкипоследнегодоступакфайлу.

 

0 0

команды«nvclock -f -n 540», котораяувеличи-

Обеонитребуются, нотольковслучае, еслитвоя

 

 

лачастотучипасдефолтовых400 МГцдо540,

 

 

системацеликом«сидит» наодномразделе.

Можнопойтиирадикальнымпутем: нераз-

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

ЕслижеустановитьОСнанесколькоразде-

биватьдискнамножестворазделов, апросто

настройках.

лов, каждыйизкоторыхбудетответствененза

перейтинафайловуюсистемуext4. Виюльском

Третье— отключить3D-эффектырабочего

хранениефайловконкретногокаталога, — мы

номережурнала, встатье«Напутиксовер-

стола. Операция, котораяненесетособогопри-

получимвозможностьиспользоватьдляних

шенству», мымногоговорилионейипоказали

ростапроизводительности(эффектынегрузят

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

бенчмарки, которыедоказывают, чтопроизво-

проц, адля3D-ускорителяэтопростосемечки),

немфункциональности. Смотри:

 

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

можетповыситьскоростьреакциисистемыза

• Раздел#1. Кореньфайловойсистемы, тоесть

 

настолько, чтодругиеФСнаеефоневыглядят

счетснижениявременинаисполнениедопол-

каталог/.

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

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

• Раздел#2. Каталог/usr, хранящийвсеуста-

 

 

контекста.

навливаемоепрограммноеобеспечение.

Q. Чтоможносделатьсвидеоподсистемой?

 

 

• Раздел#3. Каталог/home, личныеданные

A. Первое— отказатьсяотиспользования

Q. КакотключитьCompiz?

пользователей.

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

A. Всезависитоттвоегодистрибутива. На-

• Раздел#4. Каталог/tmp, временныефайлы.

комплектесX.org. Особенноущербныдрай-

пример, вUbuntu нужновыполнитькоманду

• Раздел#5. Каталог/var, множествоизменяе-

верадлякарточекATI иnVidia, иеслипервые

«СистемаÆПараметрыÆВнешнийвид» ина

мыхвовремениданныхприложений.

способныхотябыначто-товплане2D-ускоре-

вкладке«Внешнийвид» отключитьэффекты

Зачемжурналироватьиобновлятьвремя

ния(вомногомблагодаряоткрытиюнекоторых

рабочегостола. Вдругихдистрибутивахможно

последнегообращениякфайламдлякорня

спецификаций), товторые— простоужасны.

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

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

Янасобственнойшкуреощутилпримитивизм

 

 

редко(обычнововремяпереустановкиядра

драйвераnv, когдапопыталсяпоигратьсяс

 

# gtk-window-decorator --replace

илиобновлениядистрибутива)? Ответ: незачем.

 

KDE 4.1.1. Поуровнютормознутостикартинка

 

(åñëè ó òåáÿ GNOME)

Монтируемккорнюшуструюext2 (котораяне

легкообставлялаUT, запущенныйна166’ом

 

# kde-window-decorator --replace

 

 

 

 

 

XÀÊÅÐ 08 /128/ 09

085

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

BUY

>>m

 

 

w

Click

to

 

 

 

unixoid

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

УПРАВЛЕНИЕЗАГРУЗКОЙСЕРВИСОВВUBUNTU

 

 

 

Device (MTD), которыйпозволяетадресоватьне

 

 

(åñëè ó òåáÿ KDE)

 

 

 

толькооперативнуюпамять, ноипамятьлюбого

 

Q. Можноликак-тоиспользоватьресурсы

 

устройства, подключенногочерезшинуPCI. Ме-

 

 

видеоадаптеравовремяегопростоя?

тодика, описаннаявстатьеen.gentoo-wiki.com/

 

A. Да, можно. ATI иnVidia, дваосновныхигрока

wiki/TIP_Use_memory_on_video_card_as_swap,

 

нарынкевидеоадаптеров, нетакдавновыпус-

используетэтотдрайвердлясоздания(псевдо)

 

 

тилиспециальныефреймворки, позволяющие

блочногоустройства, котороебудетисполь-

 

 

перенестинекоторыепрожорливыевычисли-

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

 

 

тельныезадачинаGPU. Позднеебыласфор-

данных. Наустройствеможносоздатьсвоп

 

 

мированаспециальнаягруппаKhronos Group,

илифайловуюсистемудляхраненияфайлов,

 

 

 

 

разработавшаястандартOpenCL (www.khronos.

например, каталога/tmp. Интереснаяособен-

 

 

org/opencl), которыйописываетстандартизо-

ность: подходотнюдьнеотменяетвозможности

 

ванныйинтерфейсдоступакGPU длявычис-

использованияграфическихприложений,

 

 

лительныхзадач. Бедавтом, чтопокапочти

позволяязарезервироватьнебольшойкусочек

 

 

несуществуетприложений, использующихэту

памятидляVGA-режима.

 

 

 

 

технологию. Авотзадействоватьустановлен-

 

 

 

нуюнавидеоадаптервысокоскоростнуюпамять

Q. Интернет-соединениетормозит, периоди-

 

 

 

 

удастсяпрямосейчас. ЯдроLinux включаетв

ческипоявляютсяраздражающиезадержки.

 

 

себяспециальныйдрайверMemory Technology

Какисправить?

 

 

 

 

A. ЭтоизвестнаяпроблемавнекоторыхдистрибутивахLinux свключеннойпоумолчанию поддержкойIPv6. Еслиподдержкановойверсии протоколаIP всистемененужна, ееоченьпростоотключить. Дляэтогодостаточнозакомментироватьстроку, содержащую«ipv6», вконфиге /etc/modprobe.conf, илизанестиэтотмодуль

вблэклист, добавиввфайл/etc/modprobe.d/ blacklist.local запись«blacklist ipv6».

Если проблема не решена, следует включить/отключить параметр TCP window scaling, определяющий масштабирование TCP-окна, то есть установку количества пакетов, которое может быть послано без подтверждений. Временно отключить его можно командой:

# sysctl -w net.ipv4.tcp_window_ scaling=0

086

XÀÊÅÐ 08 /128/ 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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Еслиэтопоможет, заносимследующуюстрочку в/etc/sysctl.conf:

net.ipv4.tcp_window_scaling=0

Другойвариант— неотключать«TCP window scaling», апопробоватьподобратьоптимальные параметрыдляTCP-буферачтенияизаписи:

net.ipv4.tcp_rmem = 4096 87380 174760

net.ipv4.tcp_wmem = 4096 87380 174760

АналогичныйпараметрестьидляUDP:

net.ipv4.udp_rmem_min = 16384 net.ipv4.udp_wmem_min = 16384 net.ipv4.udp_mem = 8388608 12582912 16777216

ЯдроLinux 2.6 включаеталгоритмыавтоматическойоптимизациибуферовпринимающей иотправляющейсторон, которымиуправляют ещетрипараметра:

net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1 net.core.netdev_max_backlog = 2500

Вообще, списоквсехдоступныхпараметров можнополучитьприпомощитакойконструк-

ции: «sysctl -a | grep tcp».

Вбыстрыхсетяхимеетсмыслпоэкспериментироватьсразмеромочередиинтерфейса. За ееустановкуотвечаетпараметрtxqueuelen

командыifconfig:

# ifconfig eth0 txqueuelen 1000

Начинаясядра2.6.7, появилисьальтернативныетрадиционному«reno» алгоритмы обработкиперегрузки(потерипакетавканале). Получитьполныйихсписокможно, введя:

# sysctl net.ipv4.tcp_available_ congestion_control

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

антов: reno, cubic, bic, htcp, vegas иwestwood.

Впервуюочередь, рекомендуюпопробовать cubic илиhtcp, — онисчитаютсянаиболее эффективными. Дляперегруженныхсетей, в которыхтеряетсябольшоеколичествопакетов,

попробуйwestwood.

Задаетсяалгоритмпросто:

sysctl -w net.ipv4.tcp_congestion_ control=htcp

Q.Какотключитьежечасныеиежедневные задачи?

A.Почтивовсехдистрибутивахприсутствуют

четыреспециальныезадачидемонаcron, которыепоочереднозапускаютвсескрипты, расположенныевкаталогах/etc/cron.hourly (ежечасно), /etc/cron.daily (ежедневно), /etc/ cron.weekly (еженедельно) и/etc/cron.monthly (ежемесячно). Обычноонинесоздаютособой нагрузкинасистему, ноиногдавпервыйизэтих каталоговпопадаютпрожорливыескрипты, которыебудутпритормаживатьсистемукаждыйчас. Длярешенияпроблемыдостаточно подчиститькаталог/etc/cron.hourly (имена скриптовобычновесьмамногословны).

Q.Можнолисжатьмодулиядрадляэкономии места?

A.Да, конечно! Дляэтогоможноиспользовать сценарийmcompress, приведенныйниже:

#!/bin/sh VER=' uname -r`

MAJ='uname -r | awk -F. '{print $1}'` MIN='uname -r | awk -F. '{print $2}'` if [ $MAJ -ge 2 -a $MIN -ge 5 ]; then

OBJ=ko else

OBJ=o

fi

find /lib/modules/'uname -r'/ -name *.$OBJ -exec gzip -9 '{}'';'

depmod -a; depmod -A

Q.Какосвободитьдополнительноеместона диске?

A.Основнойметодэкономииместа— этоудалениененужныхпакетов. Кпримеру:

• xsane, sane-utils, libsane, foomatic-db-hpijs, hpijs, hplip — поддержкасканеровинекоторых МФУотHP (еслиутебянетсканераилипринтераHP, илидажееслиестьтолькопринтер, нонетсканера, томожноудалитьпервыетри пакета);

• w3m — текстовыйбраузер(когдатывпоследнийразимпользовался, непомнишь? Вотия тоже);

• bogofilter, bogofilter-{bdb,common} — спам-

фильтр;

• splix — драйвердляпринтераSamsung SPL2 (уменяLexmark, мнедрайверотSPL2 не нужен);

• gucharmap — таблицасимволов;

• onboard — экраннаяклавиатура;

• rss-glx — наборскринсейверов.

Этотсписокможнопродолжатьоченьдолго. Затемнужнопройтисьпошрифтам. По умолчаниюустановленоогромноеколичество фонтов, которыезанимаютдостаточноместа иприэтомпрактическиникогданеиспользуются. Например, пакетышрифтовttf-arabeyes,

ttf-lao, ttf-arphic-uming, ttf-sazamani*, ttf-indic*, ttf-unfonts-core, ttf-thai* можносмелоудалять.

Послеэтойоперациимоясистемаполегчала примернона80 Мб.

Особоговниманиязаслуживаютпакетыс документацией. Обычноихнельзяудалитьбез удаленияосновногопакета. Нодокументация

нужнадалеконевсегда. ЧастотычиталдокументациюпотомужеOpenOffice илиGIMP? Тем более, бывает, чтодляодногоитогожепродукта установленодвапакетасдокументацией— на русскомианглийском. Удалитьхотябыодин пакетнельзя, иначебудетвлучшемслучаеудаленивторой, вхудшем— весьпродукт. Кроме того, всепакетысправкисодержатфайлывроде

README, CHANGES, GPL, LICENSE, AUTHORS, ChangeLog ит.д. Витоге, утебянавинтескапливаетсяогромноеколичествокопийэтихфайлов! Сэкономитьместодовольнопросто. Заходи

в/usr/share/doc иудаляйвсе, чтовидишь. Небеспокойся, дажееслитебепонадобится

документациядлякакого-топакета, достаточно переустановитьлибосампакет, либопакетс документацией. Вмоейсистемедокументация занимала250 Мб.

Q.Существуютлиболеехардкорныеметоды оптимизации?

A.Да, номынерекомендуемприменятьихна практике.

Методгентушников. Старыйдобрыйспособ оптимизациичерезсборкувсегоивсяспривязкойкконкретномусемействупроцессоровизадействованиемжесткихфлаговоптимизации. Поэтому, еслитызамыслилполучитьприрост производительностив3-5%, устанавливай Gentoo соStage1 изапоминайследующую комбинациюфлаговоптимизации:

• O2 — задействоватьвсе«легальные» методы оптимизации.

• fomit-frame-pointer — несохранятьуказатель накадрстека.

• funroll-loops — разворачиватьциклы.

• mcpu=семейство_процессоров— подгонре-

зультирующегокодаподконкретныйпроцессор.

• march=семейство_процессоров— предыду-

щаяопция+ использованиеинструкцийэтого семействапроцессоров.

• pipe — неиспользоватьвременныефайлы (ускоряеткомпиляцию).

Возможныезначенияопций‘-mcpu’ и‘-march’

смотриздесь: gcc.gnu.org/onlinedocs/gcc/i386- and-x86_002d64-Options.html.

Методниндзя. Удаляемвсеоконныесреды

именеджерыокон, избавляемсяотtotem, amarok, k3b, firefox, thunderbird ипрочихособо жадныхдоресурсовприложений. Ставимтабовыйменеджероконwmii, ion3 илиawesome, mc вкачественавигатора, links2, dillo или текстовыйelinks длянавигациипоweb, mutt

длячтенияпочты, snownews дляRSS, sonata + mpd длямузыки, mplayer длявидео. После этогозапасаемсяедойизакрываемсянатри днявкомнате, втечениекоторыхпроникаемся дзенинастраиваемвсеэтохозяйство. Через

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

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

XÀÊÅÐ 08 /128/ 09

087

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

 

coding

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

++++ВАДИМ ШПАКОВСКИЙ

++++GUI/SHPAK.VADIM@GMAIL.COM/ PYTHON’У!

++++Вкуриваемвкодингграфическихинтерфейсовнапитоне

++++Пользовательсудитопрограммевпервуюочередьпотому, насколь-

++++

++++

++++

++++

++++

++++

++++

++++

++ ++

++++

++++

++++

коснейудобноипонятноработать. Поэтомувхорошейпрограмме необходимоуделитьнемалоевниманиеразработкепользовательскогоинтерфейса. ВэтойстатьемырассмотримазынаписанияGUI наязыкеPython.

GUI ВPYTHON’E

Практическилюбойсерьезныйязыкпрограммированияимеетсредства длянаписанияGUI. Python — неисключение. НоразработкаGUI нанем имеетдвапреимущества. Во-первых, этовысокаяскоростьразработки, чтоиследовалоожидатьоттакогоязыкакакPython. Во-вторых, — огром- ноеколичествоGUI-фреймворков. Существуютрасширениядляпочти всехосновныхGUI-библиотек: Tkinter наосновеTcl/Tk, wxPython для wxWidgets, PyQt дляQt имногоедругое(сполнымспискомможнопознакомиться, пройдяпоссылкенабоковомвыносе). Tkinter поставляется вместесPython, иработусGUI можноначинатьсразупослеегоустановки. ВэтойстатьебудетрассматриватьсябиблиотекаwxPython. Онаявля- етсяоберткойнадпопулярнойкроссплатформеннойGUI-библиотекой wxWindows.

ВЫБИРАЕМIDE

ПоссылкенабоковомвыносеможновыбратьподходящийIDE, заточенныйдляработысGUI. Выборвесьмабогат, такчто, скореевсего, тыне разочаруешься. Кпримеру, дляработыименносwxPython мнеприглянулсяBoaConstructor. ОнудобендлявизуальногопроектированияGUI: избавляетотрутиныи, вцелом, имеетинтуитивнопонятныйинтерфейс (чтонеотменяетчтениятуториала). КакойIDE выбрать— этоделовкуса, поэтомуябольшенебудуакцентироватьнанемвнимание. Дальнейшее чтениестатьидолжнобытьпонятнымнезависимоотсделанноговыбора. ТакчтоустанавливайwxPython иприступимнепосредственноккодингу.

HELLO, WORLD!

Немногоперефразируюизвестнуюфразу: лучшийспособизучитьработу сGUI — этосразуначатьписатьGUI! Неоткладываяделовдолгийящик, сразупродемонстрируюпрограмму«Hello, world!» наwxPython’e.

import wx

class HelloFrame(wx.Frame): def __init__(self):

wx.Frame.__init__(self, id=-1, parent=None, pos=wx.Point(422, 270), size= wx.Size(300, 200), title=’Hello Frame’)

self.panel = wx.Panel(self) self.helloButton = wx.Button(id=-1, label=

‘Push me.’,parent=self.panel,

pos=wx.Point(110, 75), size=wx.Size(80, 30)) self.panel.Bind(wx.EVT_BUTTON,

self.OnButtonClick, self.helloButton)

def OnButtonClick(self, event): print ‘Hello, world!’

class HelloApp(wx.App): def OnInit(self):

frame = HelloFrame() frame.Show(True) return True

if __name__ == ‘__main__’: app = HelloApp() app.MainLoop()

Призапускепрограммысоздаетсяокноскнопкой, принажатиинакоторуювыводитсястрока«Hello, world!».

ЧТОПРОИСХОДИТ«ЗАКУЛИСАМИ»?

Теперьнемноготеории. ЛюбаяwxPython-программадолжнасодержать дваобъекта: прикладнойобъектиглавноеокно. Прикладнойобъект управляетглавнымцикломобработкисобытий, аокносодержитэлементы интерфейса, посредствомкоторыхпользовательможетуправлятьданными. Разберемжизненныйциклнашейпрограммы:

1)app = wx.PySimpleApp() — создаетсяприкладнойобъект, которыйдолжен бытьобъектомклассаwx.App илипроизводногоотнего. Покаоннесоздан, невозможносоздатьникакиедругиеграфическиеобъектыwxPython.

2)ВызовметодаOnInit() длясозданногоприкладногообъекта. Обычно здесьвыполняетсяначальнаяинициализациявиджетов. ЕслионвозвратитFalse, топриложениетутжезавершится.

3)frame = HelloFrame() — созданиеобъектаглавногоокна(долженбыть объектомклассаwx.Frame илипроизводногоотнего). Причем, необязательно, чтобысозданиеэтогообъектапроисходиловметодеOnInit()

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

++++ 088

XÀÊÅÐ 08 /128/ 09

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