Thursday, June 17, 2010

О чем не упоминается в man ifconfig


  1. С помощью ifconfig нельзя "изменить" IP-адрес -- можно удалить старый и добавить новый. (Это относится и к случаю, когда новый адрес равен старому).

  2. При удалении адреса удаляются все записи в таблице маршрутизации, связанные с этим адресом.


Это стОит учитывать при изменении параметров интерфейса на удаленной машине.

Monday, June 14, 2010

FreeBSD: откат к предыдущей версии порта

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

Устанавливаем необходимые утилиты:

# cd /usr/ports/*/portdowngrade && make install clean
# cd /usr/ports/*/portupgrade && make install clean


Откатываем порт до произвольной предыдущей версии:
# portdowngrade -s anoncvs@anoncvs1.freebsd.org:/home/ncvs portname
...
# portupgrade -f portname


Для того, чтобы не указывать каждый раз имя CVS-сервера, можно прописать его в /etc/make.conf перед установкой portdowngrade:
.if ${.CURDIR:M*/ports/ports-mgmt/portdowngrade}                                                                              
DEFAULT_CVS_SERVER=anoncvs@anoncvs1.freebsd.org:/home/ncvs
.endif


Чтобы вернуть дерево портов в первоначальное состояние можно использовать команду portsnap extract, e.g.
portsnap extract www/mod_perl2

Thursday, June 3, 2010

Perl: создание хэша, используя массивы для keys и values

Для создания хэша из двух массивов @keys и @values удобно использовать слайсы:

my @keys   = glob "key{1,2,3}";
my @values = glob "val{1,2,3}";
my %hash;
@hash{@keys} = @values;


%hash приходится объявлять заранее. Однако, можно обойтись и без этого:

@$_{@keys} = @values for my %hash;

FreeBSD: установка Perl-модулей из портов

Большинство популярных Perl-модулей можно установить из портов FreeBSD, как и остальные приложения. Имя порта, как правило, получается добавлением префикса p5- к имени модуля и заменой :: на -. Например, устанавливаем модуль CGI::FormBuilder:

cd /usr/ports/*/p5-CGI-FormBuilder
make install clean


К сожалению, это работает не всегда. Некоторые пакеты устанавливают большое количество модулей. Например, пакет p5-HTML-Tree устанавливает модули HTML::TreeBuilder, HTML::Element, etc. Имя порта в таких случаях можно найти в файлах pkg-plist дерева портов.

Чтобы автоматизировать установку модулей из портов c учетом всего выше сказанного, я написал небольшой bash-скрипт p5modinstall.

Пример использования:
p5modinstall CGI::FormBuilder HTML::TreeBuilder ...