пʼятниця, 16 травня 2008 р.

zsh forever

Где-то неделю назад познакомился с этой зашибенной командной оболочкой. Сделал chsh -s /bin/zsh видать надолго 8)

zsh - замечательная командная оболочка, основной фишкой которой является развитый алгоритм автодополнения, притом - удобно расширяемый. Вобщем - в отличии от bash, zsh более направлена в сторону эффективной и быстрой работы с командной строкой.


Но в ней присутствовал один неприятный момент - в xterm криво работающие клавиши "Home", "End", я это исправил, вобщем - всё написано в конфиге

Общесистемный конфиг для zsh


/etc/zsh/zshrc
#
# /etc/zsh/zshrc by NETZMB
#
# прототип:
# http://www.freesource.info/wiki/AltLinux/DotFiles/Shells/Zsh/Sovety&
#

#
# менюобразная подсветка вариантов окончаний
#

zmodload zsh/complist
zstyle ':completion:*' menu yes select

#
# чтобы видеть все процессы для kill или killall
#

zstyle ':completion:*:processes' command 'ps -xuf'
zstyle ':completion:*:processes' sort false
zstyle ':completion:*:processes-names' command 'ps xho command'

#
# Настройка приглашения оболочки
# тема приглашения
#

autoload promptinit
promptinit
prompt gentoo

#
# Автодополнение имени хоста для SSH
#
if [ -e $HOME/.ssh/known_hosts ] ; then
hosts=(${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*})
zstyle ':completion:*:hosts' hosts $hosts
fi



#
# Установка нормального поведения клавиш Delete, Home, End и т.д.:
#


case $TERM in
#
# для системной консоли (/dev/tty*)
#
linux|screen|screen.linux)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line
bindkey "^[e" expand-cmd-path # C-e for expanding path of typed command
bindkey "^[[A" up-line-or-search # up arrow for back-history-search
bindkey "^[[B" down-line-or-search # down arrow for fwd-history-search
bindkey " " magic-space # do history expansion on space
;;

#
# для X-терминалов
#
*xterm*|rxvt|(dt|k|E)term)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[H" beginning-of-line # Клавиша Home
bindkey "^[[F" end-of-line # Клавиша End
bindkey "^E" expand-cmd-path # C-e добавляет к набираемой команде её
# абсолютный путь
# т.е. например, ls заменяется на /bin/ls.

# Действует аналогично команде `which ls`

bindkey "^[[A" up-line-or-search # Стрелка-вверх, пройтись назад по
# истории введённых команд

bindkey "^[[B" down-line-or-search # Стрелка-вверх, пройтись вперёд по
# истории введённых команд
bindkey " " magic-space ## do history expansion on space
;;
esac

# Примечание: если, скажем, в KDE для konsole
# выбрать тип Linux console, необходимости
# во второй секции нет.


#
# Убираем повторяющиеся каталоги из путей подстановки файлов
# при автодополнениях
#
typeset -U path cdpath fpath manpath


# Список хостов, к которым будет применяться автодополнение
# при наборе в командной строке
# Например, как аргументов браузера или ftp-клиента (см. man zstyle)

hosts=('hostname' sky.eth.net modem.eth.net ap1.eth.net wf-vaio.neb.net)


# Число команд, сохраняемых в файл истории введеных команд (HISTFILE)
SAVEHIST=500

# Чucлo koмaнg, coxpaняeмыx в сеансе
HISTSIZE=500

# максимальный размер стека каталогов
DIRSTACKSIZE=20

#
# Опции истории команд:
# Дописывание файла истрии
setopt APPEND_HISTORY
# Игнopupoвaть вce пoвтopeнuя команд
setopt HIST_IGNORE_ALL_DUPS
# Игнopupoвать лишние пpoбeлы
setopt HIST_IGNORE_SPACE
# Удалять из файла истории пустые строки
setopt HIST_REDUCE_BLANKS




Личные настройки пользователя zsh:


~/zshrc
#
# ~/zshrc by NETZMB

#
# включаем подстветку типов файлов для ls и делаем команду "ls"
# более "говорливой"
#

alias ls='ls --color'
alias cp='cp --verbose'

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

limit stack 8192 # лимит объёма памяти, выделеной под стек.
# помогает от переполнения стека

limit core 0 # Выключаем запись файлов-дампов упавших программ

umask 022 # Установка атрибутов доступа для вновь создаваемых файлов
# В данном случае - rw-r--r--


#
# Каталоги, именованные для быстрого доступа к ним по короткой метке
# (например, здесь - вместо того, чтобы набирать
# /var/local/misc/dosemu-root/root/src/sto-ed/bin/tex, можно просто написать
# ~prc )
#

hash -d prc=/var/local/misc/dosemu-root/root/src/sto-ed/bin/tex




И ещё - если Вы в момент набора команды нажали клавишу Escape, то командная строка zsh начинает себя вести как редактор vi. Вобщем, если это Вам не нужно, то просто нажмите Ctrl+C, после чего zsh вернёт Вам контроль над историей ком. строки и проч.



Советую почитать, даже если вы не использовали zsh ранее (мой конфиг частично был содран оттуда) :Советы по настройке zsh


PS: пока это то, на что хватило времени написать. Остальное - чуть позже


Читать далее

середа, 14 травня 2008 р.

Лечим utf8 в man


Наверняка Вы заметили, что не смотря на рекомендации мануала по переводу на\включению юникода в gentoo, русские man'ы выводятся в искажённом виде. В этом посте можете оценить лёгкий способ, как избавиться от этой ошибки



Вот исходный вид вывода man mc на свежеустановленном Gentoo, но уже при настроенном юникоде (файлы русских man'ов идут в кодировке koi8-r):


/etc/man.conf
...
NROFF /usr/bin/nroff -Tascii -c -mandoc
...


вот что выводит man mc при такой настройке man'а


MC(1) GNU Midnight Commander MC(1)



iaeiaii-:-aiea
mc - -:-EUOAIOIAN IAIIIbEA AIN Unix-DIAIAIUE OEOOAI.

...


Как можно заключить из повторяющихся символов, исходной восьмибитной кодировке man'а (koi8-r) обрубили восьмой бит, а потом вывели в юникод.
Если последовать рекомендации Использование UTF-8 в Gentoo, и изменить строку с NROFF в /etc/man.conf на


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c

...


то получим чуть более содержательную кашу из символов:


MC(1) GNU Midnight Commander MC(1)



îáéíåîï÷áîéå
mc - ÷ÉÚÕÁÌØÎÁÑ ÏÂÏÌÏÞËÁ ÄÌÑ Unix-ÐÏÄÏÂÎÙÈ ÓÉÓÔÅÍ.

...


Вобщем, одному хорошему человеку срочно понадобился man 3 exp, который у меня идёт в русском варианте. Решил из принципа подкинуть именно русский ман. Смотрите, что я на коленке состряпал за пару минут:


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -f utf8 -t iso8859-1 | iconv -c -f koi8-r -t utf8
...


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


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -t iso8859-1 | iconv -c -f koi8-r
...



А вот что получилось:


MC(1) GNU Midnight Commander MC(1)



НАИМЕНОВАНИЕ
mc - Визуальная оболочка для Unix-подобных систем.

...


Вот так :)


Читать далее

пʼятниця, 11 квітня 2008 р.

root-tail, островок логов на Вашем Xroot. Обои из логов для труЪ-админов

Предыстория находки

Однажды я лазил по портежам, перебирая харчами терминалами1, я наткнулся на root-tail, о котором eix мне сказал следующее:


grog ~ # eix root-tail
[I] x11-terms/root-tail
Available versions: 1.2-r2 {debug kde}
Installed versions: 1.2-r2(20:47:12 11.04.2008)(-debug -kde)
Homepage: http://www.goof.com/pcg/marc/root-tail.html
Description: Terminal to display (multiple) log files on the root window



что меня несколько заинтриговало. Решил поставить и проверить. Оказалось, преполезнейшая и весьма перспективная вещь.


Что делает

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



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


grog ~ # root-tail -g 800x250+100+50 -font fixed \
/var/log/messages,green \
/var/log/vsftpd.log,red,'ALERT'



Указав область (ключ -g, что обозначает "geometry") размером 800x250, начинающуюся с отступом 100 пикселей слева и 50 - сверху, выводим на ней строками зелёного цвета последние строки, что пишутся в файл /var/log/messages, а строками красного цвета - последняя группа строк из файла /var/log/vsftpd.log, которые будут озаглавлены словом 'ALERT'2.


Чем полезна, какие проблемы решает

Вобщем, для меня root-tail - очень полезная штука, особенно в виду преследовавших меня двух причин:


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

  • Решил вопрос, что-же всё-таки повесить как обои для root window, чтобы соблюдался должный уровень унылой утилитарной мизантропии который я так ценю 8)



PS: Эта информация - просто пища для процесса повышения играбельности админской профессии. Т.е. - для того, чтобы поставить такую полезную вещь, как root-tail на автозагрузку, чтобы она постоянно освещала кулуарную жизнь вашей машины, для неё желательно написать незамысловатый скрипт, в котором root-tail будет запускаться через sudo, либо поколдовать с группами читаемых лог-файлов, либо натстроить SELinux что подойдёт для оголтелых радикально настроеных админов. Вобщем, выберите подходящий подход к безопасности.

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



1

захотелось чего-то ещё более минималистического, более тощего и молниеносно запускающегося в отличии от xterm. У меня постоянно забита RAM, притом - всякими полезностями да emerge'-ми так что прошу не кидать в меня помидоры по поводу криво настроенного drm и прочего


2

Не буду спорить, этот пример я почти подчистую выдрал с man root-tail, но ничего, чуть позже я переработаю материал на основе собственного опыта использования root-tail так сказать, в "промышленных" условиях :)







update Пнд Сен 22 15:43:43 UTC 2008

Опечален вот таким поворотом событий:

Пнд Сен 22 15:43:43 UTC 2008



grog ~ # emerge -pv root-tail

These are the packages that would be merged, in order:

Calculating dependencies |
!!! All ebuilds that could satisfy "x11-terms/root-tail" have been masked.
!!! One of the following masked packages is required to complete your request:
- x11-terms/root-tail-1.2-r2 (masked by: package.mask)
/portage/profiles/package.mask:
# Jeremy Olexa (12 Sep 2008)
# Masked for removal in 60 days. dead upstream, missed modular X transition.
# See bug #127193


Жаль, что такой полезный замес возможно удалят из официального дерева портежей :-(


Читать далее

середа, 12 березня 2008 р.

отстройка консольного гудка, change console system bell


Лично меня несколько кумарил сигнал системного динамика, который выдавался по умолчанию. Ведь он отстроен на наилучшую слышимость, но когда пару суток фигачишь за компом и нервы того, то от внезапного писка можно на стуле подскочить, тем более в некоторых случаях он здорово демаскирует твоё присутствие 8) .
Поэтому решил заделиться рецептом, как это безобразие подстроить под себя.




Настройка "пищалки" относится к настройкам системных терминалов (консолей) (/dev/tty*), потому настраивается она следующей командой:


setterm -blength длительность_сигнала -bfreq частота_сигнала


где


длительность_сигнала

указывается в дипазоне от 0 до 2000 миллисекунд

частота_сигнала

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





У меня стоят следующие параметры:


setterm -blength 50 -bfreq 50



чтобы не писать это каждый раз при входе в систему, нужно добавить эту команду в .bash_profile:



~/.bash_profile
setterm -blength 50 -bfreq 50




X-терминалы настраиваются тоже похожим на настройку консолей образом:



xset b громкость частота длительность


вот как man расшифровывает опции утилиты xset:


[b {on|off}] [b [volume [pitch [duration]]]]


У меня настроено так:


xset b 10 50



теперь осталось добавить эту команду в .bashrc:



~/.bashrc

[ $DISPLAY ] && xset b 10 50


Наслаждайтесь ;-)



Читать далее

запоминалка gnupg-пароля, используем gpg-agent


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

Чтобы упростить себе жизнь, стоит пользоваться утилитой gpg-agent, которая идёт в составе пакета app-crypt/gnupg



Проблема в том, что по умолчанию в Gentoo gnupg-agent не пашет, его нужно слегка допилить напильником до рабочего состояния.

Раньше мой gpg-agent при запуске вываливася со следующим воплем:


gor@grog ~ $ gpg-agent
gpg-agent[17182]: can't connect to `/home/gor/.gnupg/S.gpg-agent': В соединении отказано
gpg-agent: нет gpg-agent доступого для данной сессии


чтобы такого не было, нужно запустить его со следующими ключами:


gor@grog ~ $ gpg-agent --daemon --use-standard-socket
GPG_AGENT_INFO=/home/gor/.gnupg/S.gpg-agent:22826:1; export GPG_AGENT_INFO;
gor@grog ~ $


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

Это время можно продлить, либо укоротить с помощью следующего ключа --default-cache-ttl секунды

Вот что о нём пишут в man gpg-agent:


--default-cache-ttl n
Set the time a cache entry is valid to n seconds. The default
are 600 seconds.



Красиво добавить его в bash_profile можно следующим образом:


#
# запоминалка паролей для GnuPG
#

if [ -z "$(ps -u gor | grep gpg-agent)" ]
then rm $HOME/.gnupg/S.gpg-agent
/usr/bin/gpg-agent --daemon --use-standard-socket > /dev/null
echo gpg-agent started
fi




Вобщем, всё должно работать ;)

Если всё-же есть проблемы - тогда отписывайтесь :)


Читать далее

вівторок, 4 грудня 2007 р.

VirtualBox + сеть (через NAT) + apache httpd


Стоит простая задача - потратив минимум усилий, получить к виртуальной тачке доступ через сеть. В данном случае рассматривается доступ к apache, который крутится на виртуальной машине.

Рецепт претендует на минимализм, т.е. более-менее сложные вещи (создание туннеля, например).
Этот материал родился он после прочтения на мой взгляд, довольно бедной практикой оригинальной документации. Особенно после того, что многое пришлось просто додумывать.



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


Скажу вам, что настройка сети в VirtualBox довольно не "unix-like", в отличии от того-же qemu, но в конфигурации "по умолчанию" более безопасна, чем qemu с точки зрения сетевой безопасности (особенно - когда в qemu винда ставится, голая, дырявая, без антивируса, вобщем - "кушать подано, червячки!" 8-) ).

Похоже, что для описаного мной метода доступа не нужно собирать ядро с поддержкой карточки от AMD. Это хорошо :)



Вот примерное описание того, как я пробросил порт к http серверу apache, который работал на гостевой машине

Запустите VirtualBox, выбрав Вашу виртуальную машину, зайдите в окно "Свойства", далее -выберите в разделе конфигурации сети пункт "присоединён к NAT". Затем не забудьте сохранить эти настройки.



Выполните в консоли следующие команды:


user@host $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP

user@host $ VBoxManage setextradata "gentoo_generator" \
quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80

user@host $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 6969



Где:

gentoo_generator

это название моей виртуальной машины.

VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol

строка с фигнёй всякой, в которой для нас важа только та часть, в которой написано "guesthttp", её Вы можете заменить чем-угодно, на свой вкус (в пределах разумного). Хотя - лучше использовать осмысленные вразумительные названия. Т.е - для ftp - guestftp, ssh - guestssh, и т.д.




На что система должна ответить в таком духе:




gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 6969


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


Т.е. - безполезный пиар-флуд и больше ничего интересного. Главное в этом логе - это отсутствие ошибок.

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

Далее просто запускаете Ваш любимый браузер, в котором указываете URL, ведущий к апачу на нашем виртуальном компе, в данном случае - http://localhost:6969




gor@grog ~ $ lynx localhost:6969


или


gor@grog ~ $ firefox http://localhost:6969


После этого вы должны увидеть начальную страницу, которую выдаёт ваш http-server. Если всё так, тогда радуемся, если нет так - тогда проверяем, что нигде не ошиблись в своих действиях. Если-же где-то ошибся я, или ещё чё-нить в таком роде, то обсуждаем данную проблему со мной в комментариях к данной статье.

Как у нас говорят: Гуртом і батька легше бити.





Предупреждения для обнадёжившихся:


  • Этот метод не даст доступа к вашей машине ни с какого другого компьютера, кроме Вашего.

  • Доступ к проброшенному порту имеет только тот пользователь, который загрузил виртуальную машину и выполнил вышеуказанные команды (к этому заключению дойдено методом Научного Тыка).





Читать далее