четверг, 25 декабря 2008 г.

Узнать SOA обратной зоны

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

host -t soa `whois aa.bb.cc.dd | \
grep -Ei "(inetnum|netrange):" | \
tail -n 1 | sed -E 's/^.+:[ ]*//' | \
xargs ipcount | grep -oE '[0-9]+(\.[0-9]+)*/' | \
sed -E 's/\///' | head -n 1 | \
awk -F . '{ print $4 "." $3 "." $2 "." $1 }' | \
sed -E 's/^\.//;s/$/.in-addr.arpa/'`
где aa.bb.cc.dd - любой ip-адрес интересующего провайдера.

вторник, 23 декабря 2008 г.

пятница, 19 декабря 2008 г.

Локальное зеркало для AVP Kaspersky 6

В поисках рецепта создания сабжа наткнулся на обсуждение в forum.lissyara.su. Взяв за основу опубликованный rambomax'ом скрипт, создал веб-зеркало для корпоративной сети.

Предполагается что веб-сервер уже настроен и работает.

  1. Устанавливаем программы из репозитария
    $ sudo apt-get install wget unzip
  2. Создаем директории
    $ sudo mkdir -p /scripts /www/avp-updates /var/samba/share/Avp
  3. Создаем скрипт обновления «/scripts/avp-updates.sh»
    #!/bin/sh
    #--- BEGIN ---
    AVURL=ftp://downloads1.kaspersky-labs.com/zips/
    FTPDIR=/var/samba/share/Avp
    AVPDIR=/www/avp-updates
    WGET=/usr/bin/wget
    UZIP=/usr/bin/unzip

    $WGET -N --random-wait --retry-connrefused -P "$FTPDIR" -t 0 $AVURL/av-i386-cumul.zip
    $UZIP -t $FTPDIR/av-i386-cumul.zip
    FLAG_C=$?

    $WGET -N --random-wait --retry-connrefused -P "$FTPDIR" -t 0 $AVURL/av-i386-weekly.zip
    $UZIP -t $FTPDIR/av-i386-weekly.zip
    FLAG_W=$?

    $WGET -N --random-wait --retry-connrefused -P "$FTPDIR" -t 0 $AVURL/av-i386-daily.zip
    $UZIP -t $FTPDIR/av-i386-daily.zip
    FLAG_D=$?

    #### EXTRACT FILES FROM ARCHIVE
    /bin/rm -f $AVPDIR/*

    if [ $FLAG_C -ne 0 ]
    then
    rm $FTPDIR/av-i386-cumul.zip
    else
    $UZIP -o $FTPDIR/av-i386-cumul.zip -d "$AVPDIR"
    fi

    if [ $FLAG_W -ne 0 ]
    then
    rm $FTPDIR/av-i386-weekly.zip
    else
    $UZIP -o $FTPDIR/av-i386-weekly.zip -d "$AVPDIR"
    fi

    if [ $FLAG_D -ne 0 ]
    then
    rm $FTPDIR/av-i386-daily.zip
    else
    $UZIP -o $FTPDIR/av-i386-daily.zip -d "$AVPDIR"
    fi
  4. Делаем скрипт исполняемым
    $ sudo chmod +x /scripts/avp-updates.sh
  5. Настраиваем crontab на запуск нашего скрипта каждый день в два часа ночи
    $ sudo -s
    # crontab -l 2>/dev/null > /tmp/avp-cron-XXX.tmp
    # echo >> /tmp/avp-cron-XXX.tmp
    # echo "0 2 * * * /scripts/avp-updates.sh" >> /tmp/avp-cron-XXX.tmp
    # crontab /tmp/avp-cron-XXX.tmp
    # rm /tmp/avp-cron-XXX.tmp
    # exit
  6. Создаем виртуальный хост в apache2 для веб-зеркала.
    Файл «/etc/apache2/sites-available/avp-updates»
    <VirtualHost *:80>
    ServerAdmin demiurg@avp-updates.www
    DocumentRoot /www/avp-updates
    ServerName avp-updates.www

    ErrorLog /var/log/apache2/avp-updates_error-log
    CustomLog /var/log/apache2/avp-updates_log common

    <Directory "/www/avp-updates">
    Options Indexes
    AllowOverride None
    Order Deny,Allow
    Allow from All
    </Directory>
    </VirtualHost>
  7. Активируем созданный хост
    $ sudo ln -s ../sites-available/avp-updates /etc/apache2/sites-enabled/050-avp-updates
  8. Проверяем конфиг и ребутаем веб-сервер
    $ sudo apache2ctl configtest
    $ sudo /etc/init.d/apache2 restart

вторник, 16 декабря 2008 г.

«Потерявшийся» dmesg.boot :)

Я этот файл в FreeBSD давно уже «потерял» и периодически удивлялся его отсутствию, когда заглядывал в «/var/log». А сегодня «нашел» в директории «/var/run».

воскресенье, 14 декабря 2008 г.

Расширение RIP для Firefox

Нашел интересное расширение к Mozilla Firefox. Называется RIP (Remove It Permanently) и позволяет удалить практически любой раздражающий вас элемент сайта.

Слева - скриншот исходной страницы. Справа - та же страница, но уже «обкусанная» RIP'ом.


суббота, 13 декабря 2008 г.

Доступ к гостевой машине в Virtualbox

Сетевое соединение гостевой машины в VirtualBox по умолчанию настраивается через NAT. Одним из плюсом является простая настройка. Но в то же время невозможно соединиться с открытыми портами на гостевой машине, что бывает необходимо в экспериментах с сетевыми сервисами.
Решение заключается в пробросе (туннелировании) порта в виртуальное окружение.

Делается это следующим образом

  1. Порт, который будем пробрасывать «внутрь»
    $ VBoxManage setextradata "GuestMachineName" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2222
  2. С каким портом гостевой машины надо соединяться
    $ VBoxManage setextradata "GuestMachineName" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
  3. По какому протоколу
    $ VBoxManage setextradata "GuestMachineName" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
  4. Выключаем и снова включаем гостевую машину.
  5. Попытаемся соединиться
    $ ssh -p 2222 user@localhost
Можно проверить введённые параметры
$ VBoxManage getextradata "GuestMachineName" enumerate
или удалить уже заданный параметр, задав ему пустое значение
$ VBoxManage setextradata "GuestMachineName" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort"

вторник, 9 декабря 2008 г.

OCS Inventory

На выходных искал программу для инвентаризации программного обеспечения и оборудования на рабочих станциях локальной сети и нашел статью Евгения Бражко, описывающую установку OCS Inventory на Ubuntu Gutsy.
Всю статью пересказывать не буду, а просто опишу собственные действия по установке на Ubuntu Intrepid. Начнём.
Первым делом ставим необходимые пакеты из репозитария. Предполагается, что веб-сервер apache2 уже установлен и настроен.

$ sudo apt-get install libapache-dbi-perl libdbi-perl libdbd-mysql-perl libsoap-lite-perl libxml-simple-perl libnet-ip-perl libcompress-zlib-perl php5-gd make
Ставим отсутствующие в репозитарии модули для perl из CPAN
$ sudo cpan -i XML::Entities
$ sudo cpan -i YAML
OCS Inventory, скачанная с сайта разработчика, не дружит с кириллицей. Исправленную версию можно взять отсюда (OCSNG_UNIX_SERVER_1.02_RC1_RU.tar.gz).
Распаковываем архив, запускаем инсталлятор и в ходе процесса отвечаем на его вопросы
$ sudo ./setup.sh
Перезапускаем веб-сервер
$ sudo /etc/init.d/apache2 restart
В браузере набираем адрес «http://your.web.server/ocsreports/install.php». В форму вводим имя и пароль суперпользователя (root) и адрес, по которому доступен сервер mySQL.

На рабочие станции ставим агент для windows, файлы которого после установки надо подменить файлами из этого архива. Иначе все буквы кириллицы в отчетах, начиная с «х» (по алфавиту), превратятся в английскую букву «х».
Устанавливаем агент для windows. После установки останавливаем сервис "OCS INVENTORY SERVICE", для чего в командной строке набираем
net stop "OCS INVENTORY SERVICE"
Копируем файлы из архива в директорию «C:\Program Files\OCS Inventory Agent». Запускаем ранее остановленный сервис
net start "OCS INVENTORY SERVICE"
Агент отправит отчет об установленном на рабочей станции программном обеспечении и его оборудовании на сервер по прошествии некоторого времени. Чтобы получить отчет немедленно, в командной строке надо набрать команду
"C:\Program Files\OCS Inventory Agent\OCSInventory.exe" /SERVER:your.web.server /PNUM:80 /NOW
Отчеты агентов можно просмотреть по адресу «http://your.web.server/ocsreports/». Имя и пароль для входа по умолчанию «admin» и «admin» соответственно (без кавычек).

Удаление адреса «на лету» с сетевого интерфейса в Ubuntu Linux

Удаление адреса с сетевого интерфейса

$ sudo ifconfig ethN 0.0.0.0
Удаление алиаса сетевого интерфейса
$ sudo ifconfig ethN:M del a.b.c.d
где M - номер алиаса, a.b.c.d - ip-адрес алиаса.

вторник, 2 декабря 2008 г.

Генерирование паролей. Акт второй.

#!/bin/sh
dd if=/dev/urandom count=6 bs=1 2>/dev/null | uuencode -m - | sed -n 2p

суббота, 15 ноября 2008 г.

Генератор MAC-адресов

#!/usr/bin/perl -w
printf ("00:16:3e:%02x:%02x:%02x\n",
int(rand(0x7f)),
int(rand(0xff)),
int(rand(0xff)));

вторник, 21 октября 2008 г.

среда, 15 октября 2008 г.

Скрипт на perl для создания паролей

#!/usr/bin/perl -w
my @a=("a".."z","A".."Z","0".."9");
for (1..32) { print $a[int rand @a]; };
print "\n";'

вторник, 14 октября 2008 г.

Dovecot: Шифруем IMAP и POP3

  1. Первым делом создаем сертификат и секретный ключ. На вопрос о CN (Common Name) вписываем имя сервера – например «mail.pupkin.ru». В противном случае почтовый клиент может отказаться работать с сервером
    $ openssl req -new -outform PEM -out dovecot.crt -newkey rsa:2048 -nodes -keyout dovecot.key -keyform PEM -days 9999 -x509
    Вывод будет примерно таким
    Generating a 2048 bit RSA private key
    ..........................................................................+++
    ................................+++
    unable to write 'random state'
    writing new private key to 'dovecot.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:RU
    State or Province Name (full name) [Some-State]:Moscow Region
    Locality Name (eg, city) []:Moscow
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Pupkin & Co.
    Organizational Unit Name (eg, section) []:IT Department
    Common Name (eg, YOUR name) []:mail.pupkin.ru
    Email Address []:vasya@pupkin.ru
    Жирным шрифтом отмечены ответы.

  2. Перемещаем созданные ключи в папку Dovecot и устанавливаем права доступа к ним
    $ sudo -s
    # mkdir /etc/dovecot/ssl
    # mv dovecot.crt /etc/dovecot/ssl/dovecot.crt
    # mv dovecot.key /etc/dovecot/ssl/dovecot.key
    # chown root /etc/dovecot/ssl/dovecot.*
    # chmod 0600 /etc/dovecot/ssl/dovecot.key

  3. Правим конфигурационный файл «/etc/dovecot/dovecot.conf»
    protocols = imaps pop3s
    ssl_disable = no
    ssl_cert_file = /etc/dovecot/ssl/dovecot.crt
    ssl_key_file = /etc/dovecot/ssl/dovecot.key

  4. Перезапускаем Dovecot
    # /etc/init.d/dovecot restart
  5. Проверяем работу сервера с сертификатом
    $ openssl s_client -connect mail.pupkin.ru:imaps -debug
    Если все корректно настроили в ответ выйдет куча текста с диагностикой устанавливаемого защищенного соединения.
    В конце у меня вышло
    -----END CERTIFICATE-----
    subject=/C=RU/ST=Moscow Region/L=Moscow/O=Pupkin & Co./OU=IT Department/CN=mail.pupkin.ru/emailAddress=vasya@pupkin.ru
    issuer=/C=RU/ST=Moscow Region/L=Moscow/O=Pupkin & Co./OU=IT Department/CN=mail.pupkin.ru/emailAddress=vasya@pupkin.ru
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 1684 bytes and written 316 bytes
    ---
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
    Server public key is 1024 bit
    Compression: NONE
    Expansion: NONE
    SSL-Session:
    Protocol : TLSv1
    Cipher : DHE-RSA-AES256-SHA
    Session-ID: 13053ADF84C8157032B21A241E46398D4837A38F9AAA86095E32F1FDB55B704A
    Session-ID-ctx:
    Master-Key: 5CFEF98B3BF13B13C0D8BD98EDD74D827847FE2D6B2240F4BE083C54B696681901829BFC35D838FB7F64D96CA815C7AA
    Key-Arg : None
    Start Time: 1224018874
    Timeout : 300 (sec)
    Verify return code: 18 (self signed certificate)
    ---
  6. Настраиваем почтовый клиент на работу по pop3s/imaps (порты 995 и 993 соответственно)

четверг, 2 октября 2008 г.

Локальное зеркало обновлений NOD32 в Ubuntu

  • Ставим wget, bsdmainutils, unrar, apache2
    $ sudo apt-get install wget bsdmainutils unrar apache2
  • Скачиваем архив со скриптами тут.
  • Создаем директорию веб-зеркала и пользователя www-nod32
    $ sudo mkdir -p /www/nod32-updates
    $ sudo adduser --home /scripts/NOD32 --no-create-home --shell /bin/bash --disabled-password www-nod32
    $ sudo chown -R www-nod32:www-nod32 /www/nod32-updates
  • Распакуем скачанный архив в /scripts (должна появиться директория NOD32)
  • Меняем владельца директории
    $ sudo chown -R www-nod32:www-nod32 /scripts/NOD32/mirror
  • Правим updates3.sh
    # Путь к скриптам
    path_prog=/scripts/NOD32
    # Путь до баз на веб
    path_html=/www/nod32-updates
  • Правим NOD32_3UPDATE.sh
    # Путь к базам данных
    PATHN=/scripts/NOD32/mirror

    # Имя пользователя (для беcплатных серверов - пусто)
    login_name=
    # Пароль (для беcплатных серверов - пусто)
    password=

    # Адреса платных серверов обновлений (адреса дб без /nod_upd)
    #URLN=http://89.202.157.136
    #URLN=http://89.202.157.137
    #URLN=http://89.202.157.138
    #URLN=http://89.202.157.139
    #URLN=http://www.nod32.com
    #URLN=http://u20.eset.com
    #URLN=http://89.202.157.139
    #URLN=http://u20.eset.com

    # Адреса бесплатных серверов обновлений
    # Оставляю без изменения, т.к. не знаю на каких серверах будут
    # лежать обновления
    URLN=http://ved.metroland.ru/updates/nod32/
  • Проверим работу скрипта
    $ sudo -u www-nod32 /scripts/NOD32/update3.sh
Настраиваем Apache
  • Создадим новый VirtualHost
    # cat > /etc/apache2/sites-available/nod32-updates
    <VirtualHost *>
    DocumentRoot /www/nod32-updates
    ServerName nod32-updates.your.domain.ru
    CacheNegotiatedDocs On
    ErrorLog /var/log/apache2/nod32-updates.your.domain.ru-error_log
    CustomLog /var/log/apache2/nod32-updates.your.domain.ru-access_log common
    <Directory "/www/nod32-updates">
    Options FollowSymLinks -Indexes
    AllowOverride None
    </Directory>
    </VirtualHost>
    # ln -s ../sites-available/nod32-updates /etc/apache2/sites-enabled/050-nod32-updates
  • Перезагрузим Apache с новыми настройками
    $ /etc/init.d/apache2 restart

Настроим crontab
$ sudo crontab -u www-nod32 -e
Добавим строку
0 8,13,17 * * * /scripts/NOD32/update3.sh
По мотивам статьи на сайте www.volmed.org.ru

пятница, 12 сентября 2008 г.

Доступ к серверу, прикрытому неподконтрольным брандмауером.

Вызвался настроить школьный сервер своему другу. В сельскую школу, где он работает, в рамках общероссийской программы провели интернет и там встал вопрос, как проконтролировать сетевую активность новоявленных интернет-пользователей (в лице школьников). Заодно привести в порядок локальную сеть школы.
Под сервер оперативно выделили компьютер. В выборе операционной системы остановились на Ubuntu. Но я, так как находился в километрах двухстах, нуждался в удаленном доступе. Проконсультировал через аську установку ОС и настройку удаленного доступа по ssh. Дальше меня ждал неприятный сюрприз – невозможность прямого соединения с сервером.
Решение было найдено в man-странице ssh. Спасением стали ключ «-R», создающий туннель c порта удаленной машины на локальный порт, и подконтрольный мне сервер («MY»), доступный со школы («SCHOOL»).

  • На «MY» создаем пользователя «user_my» и задаем ему пароль.
На сервере «SCHOOL»
  • Создаем пользователя «user_school» и добавляем его в список пользователей sudo.
  • Устанавливаем openssh-server и screen
    $ sudo aptitude install openssh-server screen
  • Запускаем сервер SSH
    $ sudo /etc/init.d/ssh start
  • В домашней папке нового пользователя создаем скрипт «~/bin/remote-access.sh»
    #!/bin/sh
    screen -d -m -S remote-access -- \
    sh -c 'while true; \
    do ssh -R 2222:localhost:22 -C \
    user_my@my.server.ru; done'
    Сделаем скрипт исполняемым
    $ chmod +x ~/bin/remote-access.sh
    Данный скрипт создаёт фоновую сессию screen и устанавливает ssh-соединение с «MY».
  • Создаем ключ беспарольной аутентификации. Пароль (passphrase) для ключа не задается. Нужен для скрипта «remote-access.sh»
    $ ssh-keygen -b 2048
    Копируем ключ с «SCHOOL» на «MY»
    $ ssh-copy-id user_my@my.server.ru
  • Добавляем задание для cron, чтобы соединение с «MY» устанавливалось сразу после включения «SCHOOL»
    $ crontab -e
    @reboot /home/user_school/bin/remote-access.sh
  • Запустим наш скрипт на «SCHOOL»
    $ /home/user_school/bin/remote-access.sh
    $ screen -ls
    There are screens on:
    5140.remote-access (Detached)
    1 Socket in /var/run/screen/S-user_school.
  • На стороне «MY» должен появиться новый порт
    $ netstat -tln | grep :2222
    tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN
  • Теперь мы можем соединиться с сервером «SCHOOL» по созданному туннелю
    $ ssh -p 2222 user_school@localhost

Удаленное управление сервером имён BIND9

Управление сервером имён BIND9 производится с помощью команды rndc. С его помощью можно удаленно обновить (или принудительно перезагрузить) зоны, сбросить кеш сервера или заморозить обновление динамических зон.

Сперва настраиваем BIND9

  • Сгенерируем ключ «/etc/namedb/rndc.key»
    # rndc-confgen -u bind -a -b 256
  • Создадим конфигурационный файл «/etc/namedb/rndc.conf»
    include "/etc/namedb/rndc.key";

    options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
    };
  • Отредактируем файл «/etc/namedb/named.conf» и добавим
    include "/etc/namedb/rndc.key";
    controls {
    inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
    inet 192.168.0.xxx port 953 allow { 192.168.0.yyy; } keys { "rndc-key"; };
    };
    где «192.168.0.xxx» – ip-адрес сервера в сети, а «192.168.0.yyy» – ip-адрес компьютера администратора.
  • Перезагружаем сервер имён
    # /etc/rc.d/named restart
  • Проверяем
    # rndc reload
    server reload successful
Теперь настроим на стороне администратора
  • Копируем с сервера файлы для rndc
    $ sudo scp -p admin@192.168.0.xxx:/etc/namedb/rndc.'*' /etc/namedb/
  • Отредактируем файл «/etc/namedb/rndc.conf»
    include "/etc/namedb/rndc.key";

    options {
    default-key "rndc-key";
    # default-server 127.0.0.1;
    default-server 192.168.0.xxx;
    default-port 953;
    };
  • Проверяем
    # rndc reload
    server reload successful
Если у вас несколько серверов, то они настраиваются похожим образом.
  • На стороне администратора сохраняем ключи с именами вроде «/etc/namedb/server-name.key» и редактируем
    key "rndc-server-name-key" {
    algorithm hmac-md5;
    secret "super-secret-password-hash=";
    };
  • В файл «/etc/namedb/rndc.conf» добавим строки для каждого сервера
    include "/etc/namedb/server-name.key";
    server "server-name" {
    key "rndc-server-name-key";
    };
    «server-name» может быть именем сервера или его ip-адресом.
  • Проверяем
    # rndc -s server-name reload
    server reload successful
    Если опустить параметр «-s» то будем «рулить» сервером, заданным по умолчанию в секции «options»

среда, 10 сентября 2008 г.

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

В файл «/boot/loader.conf» добавляем строку

autoboot_delay="0"
После перезагрузки система больше не отвлекается на предстартовый отсчет.
Другой метод заключается в замене загрузчика на стандартный. Запускаем sysinstall
# sysinstall
В меню выбираем «Configure» → «Fdisk». Далее нажимаем «q» для выхода из программы разметки диска. В появившейся форме выбираем пункт «Standard — Install a standard MBR (no boot manager)» и выходим из программы.

суббота, 6 сентября 2008 г.

Skystar3: Спутниковый интернет в Ubuntu (hardy)

Описывается настройка спутникового интернета провайдера «Радуга Интернет» через openvpn.

  • После установки спутниковой карты в свободный слот PCI и загрузки ОС создаем файл «/etc/modprobe.d/dvb_core.modprobe»
    options dvb_core dvb_shutdown_timeout=915360000
    Этим мы препятствуем «засыпанию» карты. В новых ядрах, в отличие от старых, установка параметра «dvb_shutdown_timeout» в «0» не помогает и потому надо выставлять заведомо большое значение таймаута (в секундах).
  • Перезагружаем компьютер.
  • Устанавливаем требуемые утилиты
    $ sudo aptitude install dvb-utils
  • Создаем файл «/etc/channels.conf»
    Raduga:11671:v:0:18200:0:0:0
    Здесь:
    • Raduga – название канала. Может быть любым.
    • 11671 – частота
    • v – поляризация. Может быть H – горизонтальная и V – вертикальная
    • 0 – FEC: 0 – Авто, 33/4,...
    • 18200 – Величина потока (Symbol rate)
    • 0 – Видео PID
    • 0 – Аудио PID
    • 0 – Program id
  • Пробуем залочиться на сигнал
    $ szap -c /etc/channels.conf -x -n 1
    reading channels from file '/etc/channels.conf'
    zapping to 1 'Raduga':
    sat 0, frequency = 11671 MHz V, symbolrate 18200000, vpid = 0, apid = 0

    using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
    status 07 | signal 9797 | snr 3270 | ber 0000ff00 | unc 00000000 |
    status 1f | signal 9696 | snr d344 | ber 00001800 | unc 00000000 | FE_HAS_LOCK
    Ключевые значения: «status 1f» и «FE_HAS_LOCK». Остальные поля указывают уровень сигнала, количество ошибок и т.п. Когда устойчивый сигнал будет получен, szap завершит свою работу.
  • Теперь отключим rp_filter, фильтрующий пакеты которые не могут уйти через тот же интерфейс что и пришли. В нашем случае пакет приходит через один интерфейс, а уходит через другой
    $ sudo sh -c 'echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter'
  • Создаем сетевый интерфейс спутниковой карты
    $ sudo dvbnet -p 1234
    где «1234» - ваш PID. После выполнения команды должен появиться сетевой интерфейс «dvb0_0» (неактивный).
  • Настраиваем интерфейс
    $ sudo ifconfig dvb0_0 hw ether YOUR-MAC-ADDRESS YOUR-IP-ADDRESS netmask 255.255.255.0 up
    где «YOUR-MAC-ADDRESS» и «YOUR-IP-ADDRESS» соответственно MAC-адрес и IP-адрес вашей подписки.
  • Смотрим на наличие входящего трафика на интерфейсе «dvb0_0»
    $ sudo dvbtraffic
    -PID--FREQ-----BANDWIDTH-BANDWIDTH-
    0000 10 p/s 1 kb/s 15 kbit
    0010 0 p/s 0 kb/s 1 kbit
    0011 0 p/s 0 kb/s 1 kbit
    0014 0 p/s 0 kb/s 1 kbit
    0032 60 p/s 11 kb/s 90 kbit
    003c 10 p/s 1 kb/s 15 kbit
    003d 31 p/s 5 kb/s 47 kbit
    0064 13 p/s 2 kb/s 20 kbit
    Если программа ничего не выводит, то проблемы могут быть в неправильных параметрах или «заснула» спутниковая карта.
  • Правим конфигурационный файл «/etc/network/interfaces» и добавляем
    auto dvb0_0
    iface dvb0_0 inet manual
    pre-up sh -c '/usr/bin/dvbnet -a 0 -p 1234 > /dev/null'
    up ifconfig $IFACE hw ether YOUR-MAC-ADDRESS YOUR-IP-ADDRESS netmask 255.255.255.0 up
    up sh -c 'echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter'
    up sh -c '/usr/bin/szap -c /etc/channels.conf -n 1 -x'
    down ifconfig $IFACE down
    down /usr/bin/dvbnet -d 0
Теперь приступим к установке и настройке openvpn
  • Установим openvpn
    $ sudo aptitude install openvpn
  • Скачаем из личного кабинета архив с ключами для openvpn. Из архива распакуем файлы ca.crt, client.ovpn, i0xxxxxx.csr, i0xxxxxx.crt, i0xxxxxx.key.
  • Скопируем все эти файлы в директорию «/etc/openvpn».
  • Сменим права доступа к файлу «i0xxxxxx.key»
    $ sudo chmod 0400 /etc/openvpn/i0xxxxxx.key

  • Переименуем файл «client.ovpn» в «raduga.conf» и отредактируем его. В итоге должно получиться примерно такое содержание
    client
    dev tap
    # dev-node Raduga
    proto udp

    remote 80.81.208.66 55032

    resolv-retry infinite
    nobind
    persist-key
    persist-tun

    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/i0xxxxxx.crt
    key /etc/openvpn/i0xxxxxx.key

    ns-cert-type server
    verb 3
    comp-lzo
    comp-noadapt

    auth-user-pass /etc/openvpn/password.txt
    route-up /etc/openvpn/tap0-route.sh
    Создаем файл «/etc/openvpn/password.txt» с именем и паролем подписки
    user
    password
    и делаем его доступным на чтение только владельцу
    $ sudo chmod 0400 /etc/openvpn/password.txt
  • Создаем скрипт «/etc/openvpn/tap0-route.sh», выполняемый после поднятия роутов.
    netstat -rn | \
    sed '1,2d' | \
    awk '{ \
    if ($1 == "0.0.0.0" \
    && $2 == "10.251.32.1" \
    && $3 == "0.0.0.0" \
    && $8 != "tap0") { \
    EX=sprintf("/sbin/route del -net 0.0.0.0/0 gw %s dev %s && /sbin/route add -net 0.0.0.0/0 gw %s dev tap0\n", $2, $8, $2); system(EX); } }'
    В моем случае openvpn дефолтовый маршрут постоянно вешал на интерфейс «dvb0_0» и пришлось прибегнуть к принудительной привязке скриптом роута к «tap0». Делаем скрипт исполняемым
    $ sudo chmod +x /etc/openvpn/tap0-route.sh

  • Редактируем файл «/etc/default/openvpn» и добавляем строку
    AUTOSTART="raduga"
  • Пробуем соединиться к провайдеру из консоли
    $ sudo openvpn /etc/openvpn/raduga.conf
    Если успешно соединились с сервером, закрываем соединение нажатием «ctrl+c».
  • Перезапускаем даемон
    $ sudo /etc/init.d/openvpn restart
Статья писалась по памяти и возможны неточности в описании. Буду признателен если сообщите мне о них.

четверг, 4 сентября 2008 г.

Три опасные уязвимости во FreeBSD

Во FreeBSD обнаружены три новые уязвимости:

  • "amd64 swapgs local privilege escalation " - локальный злоумышленник может выполнить код в системе с привилегиями ядра (root), изменив состояние стека пользовательского приложения и инициировав GPF (General Protection Fault) в момент передачи управления приложению, после обработки ядром прерывания, trap или системного вызова. Уязвимости подвержена только amd64 сборка всех поддерживаемых версий FreeBSD. Проблема устранена в 7.0-RELEASE-p4 и 6.3-RELEASE-p4.
  • "nmount(2) local arbitrary code execution" - возможность выполнения кода локального злоумышленника в контексте ядра, в случае когда непривилегированным пользователям предоставлена возможность монтирования файловых систем. Уязвимость вызвана ошибкой в системном вызове nmount, передающем пользовательские данные ядру без надлежащей проверки границ. Проблеме подвержена только ветка FreeBSD 7, исправление внесено в 7.0-RELEASE-p4. В качестве временного решения можно запретить операции монтирования пользователям: "sysctl vfs.usermount=0".
  • "Remote kernel panics on IPv6 connections " - удаленный злоумышленник может вызвать крах ядра (kernel panic), отправив по сети специальным образом модифицированный IPv6 (ICMPv6) пакет. Обязательным условием проявления уязвимости является необходимость наличия в системе IPv6 TCP сокетов, принимающих внешние соединения. Уязвимости подвержены все поддерживаемых версий FreeBSD, проблема устранена в 7.0-RELEASE-p4 и 6.3-RELEASE-p4.
Источник: www.opennet.ru

среда, 3 сентября 2008 г.

Устранение проблем с локалью в консоли Ubuntu

Если в консоли постоянно донимают подобные предупреждения

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "ru_RU.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
справится с ними можно, сгенерировав отсутствующую локаль
$ sudo locale-gen ru_RU.UTF-8
Generating locales...
ru_RU.UTF-8... done
Generation complete.
Смотрим на список доступных локалей
$ locale -a
C
en_GB.utf8
en_US.utf8
POSIX
ru_RU.utf8

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

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

  1. Узнаем подробности про сетевой интерфейс etho
    $ sudo ethtool eth0
    Settings for eth0:
    Supported ports: [ TP MII ]
    Supported link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 100Mb/s
    Duplex: Half
    Port: MII
    PHYAD: 1
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: pumbg
    Wake-on: d
    Current message level: 0x00000001 (1)
    Link detected: yes
  2. Теперь меняем скорость, дуплекс и автоопределение
    $ sudo ethtool -s eth0 speed 10 duplex full autoneg off
  3. Смотрим еще раз состояние eth0
    $ sudo ethtool eth0
    Settings for eth0:
    Supported ports: [ TP MII ]
    Supported link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 10Mb/s
    Duplex: Full
    Port: MII
    PHYAD: 1
    Transceiver: internal
    Auto-negotiation: off
    Supports Wake-on: pumbg
    Wake-on: d
    Current message level: 0x00000001 (1)
    Link detected: yes
  4. Если все устраивает редактируем файл конфигурации «/etc/network/interfaces»
    auto eth0
    iface eth0 inet static
    address 192.168.0.7
    netmask 255.255.255.0
    gateway 192.168.0.1
    up /usr/sbin/ethtool -s $IFACE speed 10 duplex full autoneg off
    В случае, если адрес берется по dhcp
    auto eth0
    iface eth0 inet dhcp
    up /usr/sbin/ethtool -s $IFACE speed 10 duplex full autoneg off
  5. Когда на машине используется Xen, сетевые интерфейсы «ethX» становятся виртуальными. Сами физические интерфейсы обозначаются как «pethX».
    Действия, описанные в пунктах 1-3, выполняем с интерфейсом peth0.

    В «/etc/network/interfaces» добавляем
    auto peth0
    iface peth0 inet manual
    up ifconfig $IFACE up
    up /usr/sbin/ethtool -s $IFACE speed 10 duplex full autoneg off

понедельник, 1 сентября 2008 г.

Exim & ldaps://

  • Редактируем файл конфигурации Exim «etc/exim/configure»
    Строку
    ldap_default_servers = ldap.server.ru
    меняем на
    ldap_default_servers = ldap.server.ru:636
    Редактируем все запросы к LDAP.
    Пример правки:
    • старый
      domainlist local_domains = ${lookup ldap {LDAP_AUTH \
      ldap:///ou=Domains,dc=ldap-server,dc=intranet?dc?sub?\
      (&(objectClass=dNSDomain)(dc=$domain))}\
      {$value}}
    • новый
      domainlist local_domains = ${lookup ldap {LDAP_AUTH \
      ldaps:///ou=Domains,dc=ldap-server,dc=intranet?dc?sub?\
      (&(objectClass=dNSDomain)(dc=$domain))}\
      {$value}}
  • В файл «etc/openldap/ldap.conf», чтобы разрешить самоподписанные сертификаты, добавляем строку
    TLS_REQCERT     allow
  • После внесения изменений перезапускаем Exim
    # /usr/local/etc/rc.d/exim restart

пятница, 29 августа 2008 г.

Как увеличить размер раздела UFS

Небольшое отступление. В DomU на Ubuntu запущена FreeBSD с некими сервисами и которым стало не стало хватать свободного места, а ее файловая система размещена в логическом томе LVM «Xen_freebsd» из группы томов «Ubuntu».

  • Увеличим размер логического тома «Xen_freebsd»
    # lvresize -L +32G /dev/Ubuntu/Xen_freebsd
    Extending logical volume Xen_freebsd to 48,00 GB
    Logical volume Xen_freebsd successfully resized
  • Заходим по VNC на виртуальную машину и перезагружаем в однопользовательский режим.
  • Следующим шагом растягиваем слой (slice) на весь диск
    # fdisk -I /dev/ad0
  • Редактируем таблицу разделов и растягиваем [последний] раздел с данными на свободное место
    # disklabel -e /dev/ad0
    Вместо размера раздела «c» и раздела с данными (в моем случае это «h») ставим звездочку «*». Вместо звездочки будут подставлены нужные значения.
    # /dev/ad0s1:
    8 partitions:
    # size offset fstype [fsize bsize bps/cpg]
    a: 524288 0 4.2BSD 2048 16384 32776
    b: 2097152 524288 swap
    c: * 0 unused 0 0 # "raw" part, don't edit
    d: 524288 2621440 4.2BSD 2048 16384 32776
    e: 1048576 3145728 4.2BSD 2048 16384 8
    f: 1048576 4194304 4.2BSD 2048 16384 8
    g: 2097152 5242880 4.2BSD 2048 16384 28552
    h: * 7340032 4.2BSD 2048 16384 28552
    Сохраняем таблицу и выходим из программы.
  • Увеличиваем размер файловой системы
    # growfs /dev/ad0s1h
    На вопрос программы о бэкапе данных отвечаем утвердительно.
  • Проверяем файловую систему
    # fsck -y /dev/ad0s1h
  • Выходим из однопользовательского режима
    # exit

среда, 27 августа 2008 г.

Быстрое создание файлов очень большого объема

Пример команды, создающей файлы очень больших размеров меньше чем за одну секунду

$ dd if=/dev/zero of=filename.img  bs=1 seek=SIZE count=0
0+0 records in
0+0 records out
0 bytes transferred in 0.xxxx secs (0 bytes/sec)
где SIZE - объем создаваемого файла, например «16G» (подробности в «man dd»).

вторник, 26 августа 2008 г.

Россия признала независимость Абхазии и Южной Осетии



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

Медвед © oper.ru

С днем рождения Linux!

о блин - вчера, 25 августа, оказывается был семнадцатый день рождения линукса! :) Поздравляю!!!

Впереди война?

Если Медведев признает независимость Южной Осетии и Абхазии насколько далеко Запад может пойти в поддержке режима Саакашвили? Реально ли вооруженное противостояние между Россией и НАТО?

воскресенье, 24 августа 2008 г.

Завершена работа над FreeBSD портом системы распознавания Cuneiform

Данный проект основан на исходниках, созданных и позднее открытых компанией Cognitive technologies. Порт основан на cuneiform-linux версии 0.3.1 и содержит дополнительные исправления из основного репозитория. Работоспособность порта была проверена на FreeBSD 6 и 7, архитектуры i386 и amd64.

Источник: www.opennet.ru

План выпуска релизов FreeBSD 6.4 и 7.1

План выпуска релизов FreeBSD 6.4 и 7.1:

  • Заморозка - 29 августа
  • BETA - 1 сентября
  • Выделение ветки - 6 сентября;
  • 6.4-RC1 - 8 сентября;
  • 7.1-RC1 - 15 сентября;
  • 6.4-RC2 - 22 сентября;
  • 7.1-RC2 - 29 сентября;
  • 6.4-REL - 6 октября;
  • 7.1-REL 13 октября.
Подробнее

пятница, 22 августа 2008 г.

В системе распознавания текста Cuneiform 0.3.1 появилась поддержка FreeBSD

Выпущена версия 0.3.1 проекта Cuneiform-linux. Данный проект основан на исходниках созданных и позднее открытых компанией Cognitive technologies. Цель проекта - создание полноценного linux порта.

Изменения в версии 0.3.1:

  • Из-за ошибочного патча для поддержки архитектуры x86_64 версия 0.3.0 была неработоспособна.
  • Добавлена поддержка архитектуры 86_64
  • Добавлена поддержка FreeBSD (в настоящий момент порт в процессе создания).
  • Множество других менее значительных изменений

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

Источник: www.opennet.ru

Статус развития проекта FreeBSD за 2 квартал 2008

Опубликован отчет о развитии проекта FreeBSD (http://www.freebsd.org/news/status/report-2008-04-2008-06.html) с апреля по июнь 2008 года.

Главные темы:

  • Разрабатывается кластер сборки пакетов для лучшего распределения нагрузки по нескольким серверам. Сейчас для распределения заданий по ним используется диспетчер очереди, в работе находится диспетчер заданий, написаны многие вспомогательные службы
  • Проект finstall наконец выпустил LiveCD для i386. В нём почти завершена разработка протокола для взаимодействия фронтэнда и бэкэнда.
  • Проведена работа по приведению в порядок сообщений об ошибках. Изменения затронули систему принятия и обработки ошибок, документацию, касающуюся этих процессов, а также мероприятие «Bugathon», в период которого разработчики уделяли особое внимание ошибкам. Изменения в работе системы включают замену одного из менторов и введение (Web 2.0-)тегов, соответствующих манам. Документация пополнилась методическими указаниями, включая добавленные по результатам мероприятий из вышеуказанной серии, и списком часто докладываемых ошибок со ссылками на HowTo-руководства для пользователей по ним.
  • Намечаются изменения в FAQ, собираются предложения по обновлению его вида, содержимого и способа выработки.
  • Графика в меню /boot/loader — медленно продвигается.
  • Пакетный фильтр второго уровня развился в направлении ethernet: оба файрволла ( pf и ipfw ) теперь могут привязывать правила к выбранным интерфейсам, и содержать в своих таблицах поиска ethernet-адреса.
  • Переносятся из OpenBSD утилиты grep ( теперь работает более похоже на GNU-аналог ), diff и sort ( отличаются меньше )
  • Над коллекцией портов проведена определённая работа. Однако, обновление Perl до 5.10 так и стоит на очереди. Кроме обновления KDE до 4.1, заслуживают внимания обновления automake, gettext, libtool и m4. Процесс разработки портов претерпел следующие изменения: задействованы вышеупомянутые новые сервисы сборки пакетов, само дерево содержится теперь на ZFS, прекращён жизненный цикл ветки RELENG_5.
  • Произошли обновления документации на некоторых европейских языках дальнего зарубежья.
  • Значительные изменения пришли с новым USB-стеком. Его модули теперь называются с префиксом "usb2_" (старый также остаётся). В числе новшеств названы возможность раздавать полномочия драйверам по номеру шины, интерфейса и устройства, возможность совместно использовать ugen и через libusb ( также обновлённый ), и как предметное устройство ядра, например, ums, на одном и том же физическом устройстве
Источник: www.opennet.ru

четверг, 21 августа 2008 г.

упс...

Извините, не хотел забивать всю новостную ленту Runix :(

Фильтрация новостной ленты на blogger.com

Я нашел способ как фильтровать новостную ленту блога по ярлыкам. Делается это следующим образом.
К стандартному адресу ленты вида

http://mr-tacitus.blogspot.com/feeds/posts/default
добавляется конструкция
/-/tag1/tag2/tag3/etc
где после «/-/»через «/» может указываться произвольное количество ярлыков.
Конечный вид адреса сформированной ленты будет таким
http://mr-tacitus.blogspot.com/feeds/posts/default/-/tag1/tag2/tag3/etc
На ленту будут попадать только публикации со всеми указанными ярлыками. Так же выяснилось, что отрицание (исключение из результата) ярлыков не поддерживается.
А работу данного метода вы можете увидеть в моем блоге. Примеру, предыдущая публикация не попала в ленту Runix в виду отсутствия у него ярлыка «IT».

Проверка новостной ленты...

Тря ля ля... ту ту ту...

вторник, 19 августа 2008 г.

Множественные таблицы маршрутизации в FreeBSD 7.0-STABLE

  • Обновляем исходные коды системы из CVS-ветки «RELENG_7»
    # csup cvsup.RELENG7
    Файл cvsup.RELENG7
    *default host=cvsup.ru.FreeBSD.org
    *default base=/usr
    *default prefix=/usr
    *default release=cvs tag=RELENG_7
    *default delete use-rel-suffix
    src-all
  • В опции ядра добавляем
    options ROUTETABLES=N
    где N - число используемых таблиц.
    Собираем ядро и систему
    # make buildworld kernel
    Переходим в однопользовательский режим и после установки системы перезагружаемся
    # init 1
    # mergemaster -p
    # make installworld
    # make delete-old
    # mergemaster
    # reboot
  • Таблицы маршрутизации управляются через команду setfib.
    Синтаксис команды
    setfib [-[F]]N command
    где N - номер таблицы маршрутизации.

    Просмотр таблиц
    # setfib N netstat -rn
    Изменение таблиц
    # setfib N route {add|change|delete|flush} ...
    Пример применения в консоли
    # setfib N traceroute www.domain.ru
  • В ipfw добавлены две дополнительные конструкции
    setfib N ip from any to any
    и
    count ip from any to any fib N
  • В PF для работы с таблицами маршрутизации предусмотрена опция «rtable N». Пример:
    pass out on fxp0 from any to any keep state rtable N

понедельник, 18 августа 2008 г.

Апелляции на стандарт OOXML отвергнуты

После того, как все увидели крайнюю предвзятость комитета по стандартизации ISO/IEC в отношении продвижения OOXML, ни у кого не должен вызвать удивления тот факт, что апелляции четырех стран на нарушение процедуры утверждения стандарта, поданные в начале лета, были отвергнуты. Об этом говорится в статье, опубликованной на groklaw.net, краткое содержание которой приведено ниже (официальный пресс-релиз доступен здесь).

Как известно Микрософт признала победу формата ODF и сообщила, что в Office 2007 поддержка OOXML реализована не будет. Цитата из Infoworld от 21 мая 2008 года: “В четверг компания Микрософт опубликовала заявление о том, что не будет поддерживать текущую редакцию OOXML, одобренную ISO, вплоть до следующего релиза Office. Конкретные сроки его выхода не оговариваются.

Очевидно, что ISO/IEC полностью утонуло в неразберихе вокруг этого скандального дела. Страны, подавшие апелляции на решение комиссии о присвоении OOXML статуса стандарта, отчетливо указывали на его недоработанность. До этого ISO уже сообщало о необходимости проведения расследования на соответствие тому, что “ OOXML, в той версии, как она реализована в Office, является в достаточной степени совместимой с конкурирующими продуктами”. Следующий документ “Lost in Translation” показывает, что это не так.

Казалось бы, после того, как Микрософт сама признала, требуемой поддержки OOXML в Office 2007 не было нет и не будет, здравый смысл членов комиссии ISO/IEC должен был возобладать, а решение по OOXML пересмотрено. Но этого не произошло, и никому более не нужную спецификацию утвердили в качестве стандарта ISO/IEC DIS 29500.

Источник: www.opennet.ru

вторник, 15 июля 2008 г.

Переезд

Блог переехал на домен второго уровня. Объявления Google Adsense начали вещать про джихад и ислам :-( Неужто Усама Бен Ладен со своими приспешниками где-то рядом, совсем близко?!

понедельник, 14 июля 2008 г.

Офисный стандарт Microsoft примут вопреки протестам?

Получила продолжение запутанная история с принятием созданного Microsoft формата офисных документов OOXML в качестве международного стандарта. Несмотря на множество возражений от различных стран и общественных организаций, руководство ISO официально заявило о том, что не рекомендует своему Техническому совету принимать во внимание апелляции против OOXML. Решение о дальнейшей судьбе офисного стандарта Microsoft станет известно в начале августа.

Алан Брайден (Alan Bryden), генеральный секретарь Международной организации по стандартизации (ISO), и Эхарон Эмит (Aharon Amit), генсек Международной электротехнической комиссии (IEC), официально рекомендуют Техническому совету (Technical Management Board) Международной организации по стандартизации ISO не рассматривать полученные жалобы по поводу принятия OOXML в качестве стандарта. Руководители ISO и IEC считают, что процесс рассмотрения проекта ISO/IEC DIS 29500 прошел в соответствии с принятыми процедурами, и апелляции, поданные против принятия офисного стандарта Microsoft различными странами и общественными организациями, не стоит принимать во внимание, сообщает Groklaw.net.

Выводы, сделанные генеральными секретарями и, по сути, представляющие их оценку качества работы собственных ведомств, будут направлены на рассмотрение Технического совета ISO. Он, в свою очередь, должен принять решение об отказе в дальнейшем рассмотрении апелляций (что и рекомендуют сделать Брайден и Эмит), либо о принятии апелляций к рассмотрению и созыве согласительной комиссии, которая и должна рассмотреть апелляции по существу. Согласно регламенту, члены Технического совета должны принять решение до 4 августа.

Еще до публикации заключения руководителей ISO и IEC некоторые эксперты указывали, что сама идея оценки работы функционеров ISO другими функционерами ISO вряд ли приведет к неожиданным последствиям. Выводы документа Брайдена и Эмита можно уместить в короткую строчку «процесс работы над проектом стандарта ISO/IEC DIS 29500 прошел по правилам». Интерес, однако, представляют не столько выводы, сколько аргументация, из которой становится ясно, что круг вопросов, которые, по мнению чиновников ISO, могут являться аргументами против OOXML, крайне невелик. Препятствием, например, не является решение рассмотреть приблизительно 1200 замечаний национальных комитетов в течение одной недели. Кроме того, итоговый вариант стандарта с учетом замечаний не был опубликован в сроки, достаточные для ознакомления с текстом до последнего момента приема апелляций.

Генсеки ISO сочли несущественными и все аргументы, касающиеся неприменимости использованной ускоренной процедуры к рассмотрению сложной и объемной спецификации OOXML, а также необходимости более конкретного согласования рассматриваемого стандарта и стандартизованного ранее Open Document Format.

Исходя из заключения Брайдена и Эмита, вполне можно сделать вывод, что процесс принятия ISO/IEC DIS 29500 (OOXML) является едва ли не совершенным с точки зрения следования предписанным процедурам и здравому смыслу, а замечания четырех национальных комитетов полностью безосновательны. Создается впечатление, что функционеры ISO и IEC укрылись за бюрократическими формальностями, решив не обращать внимания ни на обозначенные проблемы, ни на угрозу репутации самой ISO.

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

Источник: CNews

воскресенье, 29 июня 2008 г.

Полезные команды exim

Удаление почтового сообщения по ID

# exim -Mrm ID
Список сообщений в очереди
# exim -bpr
Число сообщений в очереди
# exim -bpc
Удаление "замороженных" сообщений
# exiqgrep -zi | xargs exim -Mrm
Принудительная рассылка всей почты в очереди (flush)
# exiqgrep -i | xargs exim -M
"Заморозить" почту по совпадению email с почтовым адресом отправителя
# exiqgrep -i -f email | xargs exim -Mf
Удалить почту по совпадению email с почтовым адресом отправителя
# exiqgrep -i -f email | xargs exim -Mrm
Краткий перевод помощи по exiqgrep
exiqgrep
Выборка из очереди
Без опций будет идентично «exim -bp»
Самая главная опция это «-h», которая выводит список всех опций.
-f <regexp>
совпадение регулярного выражения с адресом отправителя
-r <regexp>
совпадение регулярного выражения с адресом получателя
-s <regexp>
совпадение регулярного выражения с полем размера (именно с полем размера, в том виде как оно указывается при выводе «exim -bp»). Регулярные выражения не надо заключать в «//»
-y <seconds>
выводит сообщения "младше" заданного количества секунд
-o <seconds>
выводит сообщения "старше" заданного количества секунд
-z
только «замороженные» (frozen) сообщения
-x
все, кроме «замороженных» сообщений
-c
Показать только количество совпадений (в зависимости от версии показывает либо просто число, либо фразу типа «15 matches out of 78 messages»)
-l
Показывает полную информацию, как её выводит exim (включено по умолчанию)
-i
Показывает только IDs совпавших сообщений
-b
Показывает совпадения в "кратком" формате. Одна строка: ID, From и To
-R
Выводит сообщения в обратном порядке
Источник: http://www.opennet.ru/tips/

понедельник, 23 июня 2008 г.

Microsoft признал победу ODF над OOXML

Компания Microsoft признала свое поражение в попытке стандартизации формата OOXML. Стюарт МакКи (Stuart McKee), руководитель технологического подразделения Microsoft, на саммите Red Hat в Бостоне, признал поражение OOXML в двухлетней битве стандартов и подтвердил планы по реализации полной поддержки формата ODF в пакете MS Office 2007 SP2, который должен выйти в первой половине 2009 года.
P.S. УРААА!!! Надеюсь ей не удасться насовать туда своих костылей :)

Источник: http://www.opennet.ru

среда, 18 июня 2008 г.

Массовое переименование файлов с помощью утилиты find

Иногда бывает жизненно необходимо переименовать кучу файлов. Например заменить пробелы в названии файлов и директорий на нижний знак подчеркивания.
Сохраняем приведенный ниже скрипт в файл с именем mass-replace.sh

#!/bin/sh

# Определяем глубину вложенности директорий
depth=$((`find "$1" -type d -print | \
sed -E 's/[^\/]+//g' | \
sort | tail -n 1 | \
wc -c`+1));
# Макрос, переименовывающий файлы и директории
replacer='new="`dirname "{}"`/`basename "{}" | sed "s/ /_/g"`"; if [ "$new" != "{}" ]; then mv "{}" "$new"; fi;';
# Обходим все уровни вложенности
while [ $depth -ge 0 ];
do
# Находим и заменяем
find "$1" -depth $depth -and -name '* *' -print -exec sh -c "$replacer" \;
# Меняем уровень вложенности
depth=$(($depth-1));
done;
Сделаем файл исполняемым
$ chmod +x mass-replace.sh
В качестве аргумента скрипту передается путь до обрабатываемой директории
$ ./mass-replace.sh ~/Warez/Music

понедельник, 16 июня 2008 г.

Делаем EncFS более дружелюбным к пользователю (Ubuntu)

  1. Устанавливаем EncFS
    $ sudo aptitude install encfs
  2. Добавляем текущего пользователя в группу fuse, если он еще не в этой группе
    $ sudo adduser $USERNAME fuse
  3. Создаем директории
    $ mkdir ~/.Encrypted
    $ mkdir ~/"Secret Documents"
    В «~/.Encrypted» будут храниться зашифрованные данные, а в «~/Secret Documents» - монтироваться EncFS. Не забывайте что EncFS требует абсолютные пути, т.е. они должны начинаться с «/».
  4. Создаем и монтируем шифрованное хранилище
    $ encfs ~/.Encrypted ~/"Secret Documents"
    Будет задано несколько вопросов с вариантами ответов и подсказками.
  5. Размонтируем его
    $ fusermount -u ~/"Secret Documents"
  6. Создадим два скрипта, призванные упростить работу с созданным хранилищем.
    • Скрипт №1 будет выполнять роль внешней программы авторизации, вызываемой EncFS.
      Файл: ~/bin/req-pass.sh
      #!/bin/sh
      /usr/bin/zenity --entry --title=Пароль --text='Введите пароль' --hide-text
    • Скрипт №2 упрощает монтирование и размонтирование шифрованного хранилища.
      У скрипта два параметра
      mount
      Монтирует зашифрованное хранилище
      umount
      Размонтирует зашифрованное хранилище
      Файл: ~/bin/encfs-user.sh
      #!/bin/sh

      if [ ! -z "$HOME" ];
      then
      ENC=$HOME/.Encrypt;
      DIR="$HOME/Secret Documents";
      MOUNT="`/bin/grep -E '^encfs[[:space:]]+'$DIR'\>' /proc/mounts`";

      case "$1" in
      mount)
      if [ -z "$MOUNT" ];
      then
      # Назначаем скрипт №1 внешней программой авторизации для encfs
      /usr/bin/encfs --extpass=$HOME/bin/req-pass.sh $ENC $DIR;
      if [ $? -eq 0 ];
      then
      /usr/bin/zenity --info --title=Сообщение --text='Том с документами успешно подключен';
      else
      /usr/bin/zenity --warning --title=Предупреждение --text='Возникла ошибка при попытке подключения тома с документами';
      fi;
      else
      /usr/bin/zenity --warning --title=Предупреждение --text='Том с документами уже подключен'
      fi;
      ;;
      umount)
      if [ ! -z "$MOUNT" ];
      then
      /usr/bin/zenity --question --title=Вопрос --text='Вы действительно хотите отключить том с документами?'
      if [ $? -eq 0 ];
      then
      /bin/fusermount -u $DIR;
      if [ $? -eq 0 ];
      then
      /usr/bin/zenity --info --title=Сообщение --text='Том с документами успешно отключен';
      else
      /usr/bin/zenity --warning --title=Предупреждение --text='Возникла ошибка при попытке отключения тома с документами';
      fi;
      else
      /usr/bin/zenity --info --title=Сообщение --text='Том с документами не был отключен';
      fi;
      else
      /usr/bin/zenity --warning --title=Предупреждение --text='Том с документами уже отключен'
      fi;
      ;;
      esac;
      fi;
  7. Проверим работу скрипта в консоли.
    Смонтируем хранилище
    $ ~/bin/encfs-user.sh mount
    Скрипт запросит пароль и в всплывающем окне выведет результат работы скрипта.
    Теперь размонтируем
    $ ~/bin/encfs-user.sh umount
  8. Осталось создать ярлыки в оконном менеджере для запуска скрипта. :)

четверг, 12 июня 2008 г.

ISO заморозил принятие OOXML

После того, как четыре национальных комитета подали протест против стандартизации формата документов Office Open XML (OOXML), Международная Организация по Стандартам (ISO) и Международная Электротехническая комиссия (IEC) на заседании в Женеве приостановили процесс опубликования стандарта.

В своем заявлении ISO объявила, что планируемая ранее публикация ISO/IEC DIS 29500 откладывается до принятия решений по поданным претензиям. Согласно процедуре, это должно произойти в конце июня, когда ISO и IEC передадут свои заключения профильным комитетам для принятия окончательного решения.

Против ускоренной сертификации OOXML официально выступили Бразилия, Индия, ЮАР, Дания и Венесуэла. Озабоченность вызвало отсутствие консенсуса по вопросу, какие изменения должны быть внесены в спецификацию (которая занимает 6000 страниц), а так же то, что возражения не были поставлены на обсуждение в индивидуальном порядке

Источник: http://www.opennet.ru

среда, 11 июня 2008 г.

Смена забытого пароля root в FreeBSD

Сменить пароль можно следующим образом:

  1. Загрузиться в режиме «Single user».
  2. Перемонтировать корневую ФС в режиме чтения/записи
    # mount -u /
  3. Изменить собственно сам пароль root
    # passwd
    Changing local password for root
    New Password:
    Retype New Password:
  4. Выйти из режима «Single user» и продолжить загрузку системы
    # exit
Все достаточно просто. Но, если в режиме «Single user» запрашивается пароль суперпользователя (достигается правкой файла /etc/ttys), наш путь несколько удлиняется.
Загружаемся с установочного диска FreeBSD. В главном меню выбираем пункт «Fixit» и далее пункт «CDROM/DVD», запустив аварийную консоль:
  1. Проверяем ФС жесткого диска «/» и «/usr» на случай когда система некорректно завершила свою работу
    # fsck_ffs /dev/ad0s1a
    # fsck_ffs /dev/ad0s1f
    Если вы уверены что эти ФС исправны, можете пропустить этот шаг.
    Учтите, что раздел ФС «/usr» на вашем жестком диске может отличаться от приведенного здесь (/dev/ad0s1f). Чтобы узнать раздел данной ФС, после монтирования корневой ФС просмотреть расположенный на нем файл fstab
    # cat /mnt/etc/fstab | grep /usr
  2. Монтируем корневую ФС
    # mount /dev/ad0s1a /mnt
    и ФС «/usr»
    # mount /dev/ad0s1f /mnt/usr
  3. Входим в изолированное окружение с корневой ФС «/mnt»
    # chroot /mnt /bin/sh
    и меняем пароль пароль рута
    # passwd
    Changing local password for root
    New Password:
    Retype New Password:
  4. Выходим из аварийной консоли и перезагружаемся, не забыв извлечь загрузочный диск из дисковода.

пятница, 6 июня 2008 г.

Почта из jail

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

  1. Изменил конфигурацию корпоративного почтового сервера так, чтобы он стал релеем для веб-сервера.
  2. Внутри jail проделал следующее:
    # cd /etc/mail && sed -Ei .sed 's/127\.0\.0\.1/mail_server_ip_address/g' *
Появившиеся в директории файлы с расширением «.sed», если все нормально, можете удалить.

понедельник, 2 июня 2008 г.

Интересно кто следующий?

Дания, Бразилия, Индия и ЮАР подали апелляцию на решение ISO принять OOXML как стандарт обмена офисными документами. Думаю, что они тормознут офисный формат от Microsoft на пути к мировому господству и завернут его обратно. :)
P.S. Надеюсь, что наши не останутся в стороне.

UPD:
Венесуэла решила присоединиться к странам, протестующим против OOXML . :)

вторник, 27 мая 2008 г.

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

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

Например

  • Найти все папки измененные с конца обеда вчерашнего дня
    # find . -newerct 'yesterday 14:00' -and type d -print
  • Найти и удалить все файлы старше двух недель
    # find . -not -newerBt '2 week ago' -and -type f -unlink
  • Нужно найти все файлы, которые были созданы с трех часов ночи позавчерашнего до обеда вчерашнего дня
    # find . -newerBt '2 day ago 03:00' -and -not -newerBt 'yesterday 13:00' -and -type f -print

Список ключей, ответственных за фильтрацию по временным атрибутам

-Bmin n
Истина если разница между временем создания файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-Bnewer file
Смотрите описание -newerBm.

-Btime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем создания файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-amin n
Истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-anewer file
Смотрите описание -neweram.

-atime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего доступа к файлу и временем начала поиска составляет точно n единиц времени. Возможные единицы времени:
  • s секунда
  • m минута (60 секунд)
  • h час (60 минут)
  • d день (24 часов)
  • w неделя (7 дней)
В аргументе ключа единицы времени можно комбинировать в произвольном порядке. Для примера «-atime -1h30m». Единицы времени используются только совместно с модификаторами «+» или «-».

-cmin n
Истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-cnewer file
Смотрите описание -newercm.

-ctime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения информации о файле и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-mmin n
Истина если разница между временем последнего изменения файла и временем начала поиска, округленная до минуты в большую сторону, составляет n минут.

-mtime n[smhdw]
Если не определены никакие единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска, округленная до 24-часового периода в большую сторону, составляет n 24-часовых периодов.
Если определены единицы времени, этот ключ вычисляется как истина если разница между временем последнего изменения файла и временем начала поиска составляет n единиц времени. Пожалуйста обратитесь к описанию ключа -atime для получения информации о поддерживаемых единицах времени.

-newer file
-mnewer file
Истина если у текущего файла более позднее время изменения чем у указанного файла.

-newerXY file
Истина если у текущего файла более позднее время доступа (X=a), время создания (X=B) или время изменения (X=m) чем время доступа (Y=a), время создания (Y=B) или время изменения (Y=m) указанного файла (file). В дополнение, если Y=t то file трактуется как время, заданное в одном из описанных в cvs(1) форматов. Отметьте, что -newermm эквивалентен -newer.
Выдержка из man для cvs(1)
Поддерживается множество вариантов форматов для описания даты, в частности ISO и Интернет. В случае, если временная зона в дате не указана явным образом, она трактуется в местной временной зоне. Примеры допустимых форматов:
  • 1 month ago
  • 2 hours ago
  • 400000 seconds ago
  • last year
  • last Monday
  • yesterday
  • a fortnight ago
  • 3/31/92 10:00:07 PST
  • January 23, 1987 10:05pm
  • 22:00 GMT
P.S. Если у вас есть замечания по тексту статьи или дополнения - пожалуйста отпишитесь в комментариях.

среда, 14 мая 2008 г.

Создание программного RAID1 (FreeBSD)

На деле все оказывается очень просто. Втыкаем в сервер второй винчестер с аналогичной емкостью и запускаем систему. Условимся, что ad0 это системный диск, а ad2 - новый.
Далее от имени суперпользователя:

  1. Создаем зеркалируемый RAID массив
    # gmirror label -v -b round-robin gm0 /dev/ad0
    Здесь gmirror label создает зеркалируемый массив; -v включает подробный вывод; -b round-robin задает тип балансировки; gm0 - имя создаваемого массива. В случае, если выдаст ошибку
    Can't store metadata on /dev/ad0: Operation not permitted
    требуется выполнить
    # sysctl kern.geom.debugflags=16
    и снова попытаться создать массив.
  2. Теперь отредактируем файл /boot/loader.conf и разрешим загрузку нужного нам модуля GEOM при старте системы
    # echo 'geom_mirror_load="YES"' >> /boot/loader.conf
  3. Отредактируем записи в /etc/fstab, иначе после ребута система не сможет найти созданный нами дисковый массив и продолжить загрузку. Меняем ad0 на mirror/gm0.
    Было
    /dev/ad0s1b             none            swap    sw              0       0
    /dev/ad0s1a / ufs rw 1 1
    /dev/ad0s1e /tmp ufs rw,nosuid 2 2
    /dev/ad0s1f /usr ufs rw 2 2
    /dev/ad0s1d /var ufs rw,nosuid 2 2
    Стало
    /dev/mirror/gm0s1b              none            swap    sw              0       0
    /dev/mirror/gm0s1a / ufs rw 1 1
    /dev/mirror/gm0s1e /tmp ufs rw,nosuid 2 2
    /dev/mirror/gm0s1f /usr ufs rw 2 2
    /dev/mirror/gm0s1d /var ufs rw,nosuid 2 2
  4. Рестартуем
    # shutdown -r now
  5. После ребута система при старте выведет такие строки
    GEOM_MIRROR: Device gm0 created (id=877665149).
    GEOM_MIRROR: Device gm0: provider ad0 detected.
    GEOM_MIRROR: Device gm0: provider ad0 activated.
    GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
    GEOM_MIRROR: Device gm0 already configured.
    Mounting root from ufs:/dev/mirror/gm0s1a
  6. Добавим второй диск в массив
    # gmirror insert gm0 /dev/ad2
    GEOM_MIRROR: Device gm0: provider ad2 detected.
    GEOM_MIRROR: Device gm0: rebuilding provider ad2.
    Смотрим на состояние массива
    # gmirror list | more
    Geom name: gm0
    State: DEGRADED
    Components: 2
    Balance: round-robin
    Slice: 4096
    Flags: NONE
    GenID: 0
    SyncID: 1
    ID: 877665149
    Providers:
    1. Name: mirror/gm0
    Mediasize: 40019581952 (37G)
    Sectorsize: 512
    Mode: r6w5e2
    Consumers:
    1. Name: ad0
    Mediasize: 40019581952 (37G)
    Sectorsize: 512
    Mode: r1w1e1
    State: ACTIVE
    Priority: 0
    Flags: DIRTY
    GenID: 0
    SyncID: 1
    ID: 3986018406
    2. Name: ad2
    Mediasize: 41110142976 (38G)
    Sectorsize: 512
    Mode: r1w1e1
    State: SYNCHRONIZING
    Priority: 0
    Flags: DIRTY, SYNCHRONIZING
    GenID: 0
    SyncID: 1
    Synchronized: 1%
    ID: 1946262342
    Массив перешел в критическое состояние и начал синхронизацию данных.
    Посмотреть на текущий статус массива можно так
    # gmirror status
    Name Status Components
    mirror/gm0 DEGRADED ad0
    ad2 (17%)
    где в скобках указан процент синхронизированных данных.
    После окончания синхронизации данных dmesg выведет
    GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.
    GEOM_MIRROR: Device gm0: provider ad2 activated.
    и статус массива поменяется на рабочий
    # gmirror status
    Name Status Components
    mirror/gm0 COMPLETE ad0
    ad2

четверг, 8 мая 2008 г.

Обновление PHP5

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

  1. Соберем php5.
    cd /usr/ports/lang/php5 && make all
    Остановим apache2
    /usr/local/etc/rc.d/apache2 stop
    Ставим php5
    make install
  2. Теперь установим расширения php5.
    Список расширений находится в файле /usr/local/etc/php/extensions.ini. Остается лишь поиск в портах и установка. Для этой цели написал маленький скрипт.
    #!/bin/sh
    grep -oE '=[a-z]+' /usr/local/etc/php/extensions.ini | \
    sed -E 's/^./php5-/' | \
    while read pkg;
    do {
    cd /usr/ports;
    cd `make quicksearch name="^$pkg-" | \
    grep -oE '/usr/ports/.+$'` && make install;
    } done;
    Сохраняем его под именем php5-ext-inst.sh и делаем исполняемым
    chmod +x php5-ext-inst.sh
    Выполняем скрипт.
  3. После установки расширений запускаем apache2 и радуемся жизни :)
    /usr/local/etc/rc.d/apache2 start

пятница, 2 мая 2008 г.

Клоунада (третий сезон)

Некрофилы снова накачали труп SCO деньгами и оживили его. Он уже изрыгает свои первые, после воскрешения, угрозы. Все срочно запасаемся напитками и чипсами. :)

среда, 30 апреля 2008 г.

Терминальный сервер в клетке FreeBSD

Сегодня поднял настроил терминальный сервер в клетке FreeBSD. Как оказалось терминал с 300Мгц процом вполне сносно тянет графику 1280x1024 с 85 герц (GNOME). Тормоза есть, но они терпимы.
Пока не удается проверить бездисковую загрузку из-за отсутствия подходящей сетевой карты.

пятница, 18 апреля 2008 г.

К чему приводит забывчивость

Сегодня с одного старого сервера снес оболочку bash вместе с несколькими ненужными программами и ребутнул систему. После удаленного входа в консоль cюрпризом стало невозможность поднять свои привилегии до суперпользователя командой su из-за отсутствия назначенной ему оболочки bash.
Выходом стал стал ключ -m команды su

su -m
Выдержка из man su: «-m оставляет переменные окружения пользователя нетронутыми. Запускается назначенная исходному пользователю оболочка вместо оболочки конечного пользователя и не меняется текущая директория.»

среда, 16 апреля 2008 г.

Как изменить оформление отдельных тегов в blogger.com

Со страницы настроек блога идем по ссылкам «Макет» → «Изменить HTML» и открываем код шаблона. Настоятельно рекомендую сохранить копию, чтобы было с чего восстанавливать при неудачной попытке.
Находим тег <b:skin>, внутри которого идет куча текста в комментарии вида «/* многабукафф */». В списке стилей (CSS), идущего после упомянутого комментария, находим описание стиля для нужного нам тега и редактируем его или, если нет такого, создаем новый.
Как пример приведу описание стилей тегов <PRE> и <CODE>

pre {
color:$sidebarlinkcolor;
padding-top:5px;
padding-bottom:5px;
border-top:1px dotted black;
border-bottom:1px dotted black;
width:100%;
max-height:240px;
display:block;
overflow:auto;
}

code {
color:$sidebarlinkcolor;
}
После внесения необходимых изменений жмем на кнопку «Сохранить шаблон» и любуемся результатом.

пятница, 11 апреля 2008 г.

Скрипт быстрой сборки пакетов зависимостей

При установке программ из портов freebsd нередко компилируются и ставятся их зависимости. Если для самой программы пакет собирается одной командой

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

Для решения этой проблемы я сделал следующее:
  1. В файл /etc/make.conf добавить параметр
    WRKDIRPREFIX=/tmp/work
    указывающий системе компилировать программы из портов в папке /tmp/work.

  2. Cохранить скрипт под именем pkg-recursive.sh:
    #!/bin/sh

    if [ -z "$WRKDIRPREFIX" ];
    then {
    # WRKDIRPREFIX берем из make.conf
    wrkdir=`grep -oE 'WRKDIRPREFIX=[^ ]+' /etc/make.conf | sed 's/WRKDIRPREFIX=//'`

    if [ -z "$wrkdir" ];
    then {
    # WRKDIRPREFIX не задан ни в переменной окружения ни в make.conf
    echo No WRKDIRPREFIX variable defined;
    exit;
    } fi;
    }
    else {
    # WRKDIRPREFIX задан в переменной окружения
    wrkdir=$WRKDIRPREFIX;
    } fi;

    # Меняем текущую директорию на директорию сборки и просматриваем его
    cd $wrkdir/usr/ports && ls -d */* | \
    while read pkg;
    do {
    if [ -f $wrkdir/usr/ports/$pkg/work/.install* ] && [ ! -f $wrkdir/usr/ports/$pkg/work/.package* ];
    then {
    # Условие срабатывает если программа установлена в систему и пакет не еще не собран.
    # Команда printf "\t\n" принудительно завершает режим конфигурирования программы
    # (выходит из make config).
    cd /usr/ports/$pkg && (printf "\t\n" | make package);
    } fi;
    } done

  3. Сделать скрипт исполняемым
    chmod +x pkg-recursive.sh

  4. Установить и собрать пакет программы командой
    make package

  5. Выполнить скрипт.

четверг, 10 апреля 2008 г.

ALT Linux открывает представительство в Якутии

С 31 марта по 4 апреля 2008 г. компания «Развитие систем информационной безопасности» и Центр новых информационных технологий Якутского госуниверситета при содействии компании ALT Linux и холдинга ARMADA организовали в Якутске курсы «Администрирование ОС Linux» для ИТ-специалистов различных госучреждений.
По итогам этих курсов в структуре «Развития систем информационной безопасности» был организован «Центр ALT Linux», а также вынесен на обсуждение вопрос о внедрении якутских шрифтов в операционную систему ALT Linux.
Источник: www.pcweek.ru

От себя: Отрадно за свою родину ‒ и до нас добрались :) Был на конференции, получил книжку «Опыт внедрения международного стандарта ISO/IEC 26300:2006 в органах государственной власти и местного самоуправления Российской Федерации»

вторник, 8 апреля 2008 г.

MS OOXML утвержден ISO. Мы принимаем ГОСТ!

ООО «Инфра-Ресурс» опубликовала открытое письмо к заинтересованным органам власти, юридическим и физическим лицам Российской Федерации с призывом принять участие в обсуждении проекта ГОСТ Р ИСО/МЭК 26300 (ODF ISO/IEC 26300:2006).

пятница, 4 апреля 2008 г.

Исходные коды открыли - осталось портировать...

2 апреля компания Cognitive Technologies выполнила своё обещание и предоставила сообществу исходные коды программы распознавания текста (OCR) Cuneiform под собственной лицензией, совместимой с лицензией BSD. Незадолго до этого события сама программа стала бесплатной и свободно распространяемой.

На текущий момент заявку на участие в проекте уже подали более 30 человек из разных стран мира. В планах на 2008 год подготовка первой версии OCR с открытым кодом на базе Cuneiform. Разработчиками решено сосредоточить внимание на современном интерфейсе, поддержке Linux и добавлении новых языков распознавания.

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

среда, 2 апреля 2008 г.

Гром среди ясного неба...

Новость дня от CNews.ru: «Разработанный Microsoft формат Office Open XML (OOXML), предназначенный для хранения файлов в пакетах офисных приложений, принят в качестве международного стандарта. Это означает, что новый формат отныне присоединился к таким известным аббревиатурам, как HTML, PDF и ODF, стандартам, которые в свое время уже прошли сертификацию ISO и IEC».

Теперь вполне логично ожидать засилья ПО от Microsoft, продвигаемого под лозунгом поддержки и внедрения, уже ставшего официальным стандартом, формата для хранения электронных документов.
В качестве примера можно привести Данию. Правительство этой страны обязало органы государственной власти к использованию в электронном документообороте европейских стандартов. Это практически сразу привело к монополизации рынка программой MS Office 2007, единственной — кто в полной мере поддерживает спецификацию входящего в европейский перечень стандартов формата ECMA 376 (OOXML).
В итоге скандал вышел за пределы Дании и требования об отмене решения правительства дошли до Высшего европейского суда.
Чем не наглядный пример использования корпорацией Microsoft стандартизирующих органов?

UPD: Ссылка на первоисточник: http://www.iso.org/iso/pressrelease.htm?refid=Ref1123

вторник, 1 апреля 2008 г.

Флаг nodump

Просмотр установленных флагов (в частности флаг nodump)

ls -lo
Не подсчитывать размер файлов и директорий с установленным флагом nodump при вычислении занимаемого места на диске
du -n /path/to/
Не сохранять программой dump файлы и директории с установленным флагом nodump при полном копировании раздела (по умолчанию указанный флаг учитывается только при заданном уровне выше 0)
dump -0 -h 0 /mount/point
Игнорировать файлы и директории с установленным флагом nodump при использовании программы tar
tar -c --nodump -f file.tar /path/to/file
Поиск файлов и директорий с установленным флагом nodump
find /path/to -flags nodump -print

пятница, 28 марта 2008 г.

Уязвимость во FreeBSD 6, 7 и NetBSD 4

Во FreeBSD 7.0/6.x и в NetBSD 4 обнаружена уязвимость, связанная с возможностью целочисленного переполнения в libc функции strfmon(). Уязвимость может привести к выполнению кода злоумышленника при передаче в функцию strfmon() непроверенных аргументов посредством сторонних программ, использующих данную функцию.

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

Источник: www.opennet.ru

среда, 26 марта 2008 г.

Встроенный в консоль mysql справочник

Честно говоря немного удивился, когда увидел :)
Входим в консоль mysql и набираем

help contents
В ответ на экран выводятся общие категории справки. Далее уже смотрим справку по категориям, к примеру
help Functions and Modifiers for Use with GROUP BY
Можно также получить справку по SQL командам
help SQL-COMMAND

«Пчелы против кого?»

«...В 2007 г. при участии Международной организации BSA (Business Software Alliance) российские компании потратили на "урегулирование отношений с правообладателями ПО" около $2,6 млн. В отношении их руководителей и ИТ-сотрудников было вынесено 85 обвинительных приговоров.»

В этом году наверно будет еще больше :(

Источник: www.rambler.ru

понедельник, 17 марта 2008 г.

Файлообменник от Яндекса - достойная замена Rapidshare

Яндекс запустил бета-версию собственного файлообменного сервиса Народ.Диск. Возможности сервиса впечатляют: для его использования не нужно ничего платить, достаточно просто иметь аккаунт на Яндексе. Общий объем файлов и количество файлов не ограничены, максимальный размер одного файла – 750 Мб. За один раз можно загрузить сразу несколько файлов, но их суммарный объем не должен превышать 750 Мб.

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

Народ.Диск поддерживает докачку и загрузку при помощи менеджеров закачки. Качать можно только в один поток, но зато до 16 файлов с одного IP одновременно.

Источник: http://narod.yandex.ru/disk/

воскресенье, 16 марта 2008 г.

OOXML: первая доза бесплатно

Похоже, что Билл Гейтс на протяжении всего времени использует один и тот же проверенный метод (прим.пер.).

Software Freedom Law Center (SFLC) предупреждает, что активно продавливаемый корпорацией-монополистом Майкрософт OOXML стандарт может представлять патентную угрозу для ПО лицензированного под GPL.

Так называемая Microsoft Open Specification Promise (OSP) не обеспечивает адекватную гарантию того, что программные реализации OOXML, имеющие лицензию GPL будут и в будущем свободны от патентных претензий.

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

Однако SFLC указывает на некоторые вещи, которые могут стать проблемой в будущем.

Во-первых, это то, что Microsoft Open Specification Promise (OSP) относится только к текущим версиям указанных стандартов.
Это означает, что Microsoft может отказаться от подобных гарантий в будущих версиях. Это создает большую двусмысленность о долгосрочной перспективе GPL реализаций OOXML, в любой момент Майкрософт сможет отказаться от своих “свободных” инициатив.

Проблема номер два: обещания Майкрософт не относятся к областям не описанным в спецификации.

“GPL разработчики не могут доверять OSP, не потому что ее условия находятся в противоречии с GPL, но потому что это не обеспечивает свободу, которую требует GPL. Доверять OSP опасно, потому что новые версии спецификаций могут быть исключены из OSP и еще потому, что разработанный код не может использоваться вне очень ограниченной области использования, определенной в Microsoft” - предупреждает Software Freedom Law Center (SFLC).

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

Источник: http://sysadminonline.ru

vsftpd и пользователи из базы LDAP.

Предполагается, что сервер каталогов openldap уже установлен и настроен.
Устанавливаем nss_ldap

# cd /usr/ports/net/nss_ldap
# make install
Отредактируем файл конфигурации /usr/local/etc/nss_ldap.conf
host small.server
base dc=small,dc=server
# Пользователь, которому разрешен просмотр каталога
binddn uid=proxy,dc=small,dc=server
# Пароль пользователя proxy
# Пароль не надо хешировать!
bindpw proxy-password
scope sub
bind_timelimit 3
bind_policy soft
nss_paged_results yes
pagesize 1000
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Изменим следующие строки в /etc/nsswitch.conf
group: files ldap
passwd: files ldap
Проверяем работу nss_ldap
# id user-from-ldap
Должно выйти что-то похожее на
uid=10000(user-from-ldap) gid=10000(Group-from-LDAP) groups=10000(Group-from-LDAP)
Устанавливаем pam_ldap
#cd /usr/ports/security/pam_ldap
# make install
Отредактируем файл конфигурации pam_ldap: /usr/local/etc/ldap.conf
host small.server
base dc=small,dc=server
binddn uid=proxy,dc=small,dc=server
# Пароль не надо хешировать!
bindpw proxy-password
scope one
bind_timelimit 3
bind_policy soft
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Установка самого сервера FTP
# cd /usr/ports/ftp/vsftpd
make config
В появившемся диалоге ставим галочку около опции RC_NG и далее
# make install
Ниже приведен файл конфигурации vsftpd: /usr/local/etc/vsftpd.conf
#Запрещаем анонимусов
anonymous_enable=NO
listen=YES
background=YES
# Указываем какую именно конфигурацию PAM использовать
pam_service_name=vsftpd
check_shell=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
# Скрываем какой именно сервер FTP у нас стоит
ftpd_banner=Welcome to FTP service.
# Помещаем пользователей в изолированное окружение
chroot_local_user=YES
pasv_min_port=49152
# Скрываем uid и gid файлов при просмотре директорий.
hide_ids=YES
local_umask=022
anon_umask=022
secure_chroot_dir=/usr/local/share/vsftpd/empty
Создаем файл конфигурации PAM: /usr/local/etc/pam.d/vsftpd
auth            required        /usr/local/lib/pam_ldap.so
account required /usr/local/lib/pam_ldap.so
# Если вы хотите разграничить доступ к ftp по группам
# можете дополнительно установить модуль pam_require
# и добавить приведенную ниже строку. Подробности тут
account required /usr/local/lib/pam_require.so no_case @Ftp:Users
# Строка для модуля pam_mkhomedir,
# избавляющего от необходимости ручного
# создания домашней директории для нового пользователя
session required /usr/local/lib/pam_mkhomedir.so mode=0700
Добавим следующую строку в /etc/rc.conf
vsftpd_enable="YES"
Запускаем сервер FTP и проверяем его работу :)
# /usr/local/etc/rc.d/vsftpd start

суббота, 15 марта 2008 г.

Украшаем командную строку в csh/tcsh

Вид командной строки в csh/tcsh задается несколькими переменными окружения. Главная из них - prompt. По умолчанию приглашение командной строки имеет вид

%
что нас совершенно не устраивает. Введем команду
set prompt="%m%# "
где %m - имя компьютера, %# - символ > (или первый символ переменной promptchars) для обычных пользователей или символ # (или второй символ переменной promptchars) для суперпользователя.
Увидим, что приглашение изменилось
machine> 
Мы перестаем путаться в в удаленных сессиях. Далее добавим имя текущего пользователя (%n) и полное имя директории, где мы сидим в данный момент (%/)
set prompt="%n@%m [%/]%# "
Вид меняется на
user@machine [/usr/local/etc]> 
Наше приглашение стало более информативной. Но полный путь занимает слишком много места. Меняем %/ на %c, урезающий отображаемый путь до имени текущей директории
set prompt="%n@%m [%c]%# "
и у нас получилось
user@machine [etc]> 
что уже выглядит лаконичнее. Добавим текущее время (счастливые могут пропустить :)
set prompt="%T %n@%m [%c]%# "
и вуаля
23:01 user@machine [etc]> 
По правде говоря, лично меня символ > в конце приглашения раздражает. Для смены символа используем переменную promptchars
set promptchars="$#"
Первый символ подставляется вместо %# если вы обычный пользователь, а второй - если вы суперпользователь.
Теперь записываем полученный результат в ~/.tcshrc или в /etc/csh.cshrc.

Ниже приведен список допустимых подстановок (подробности в man csh):
%/
Текущая рабочая директория.
%~
Текущая рабочая директория, но домашная директория текущего пользователя представлено тильдой ~ и домашние директории остальных пользователей представлены как ~user. Подстановка ~user действует только в случае если оболочка (shell) уже использует ~user в имени пути в текущей сессии.
%c[[0]n], %.[[0]n]
Отслеживает конечный компонент пути к текущей рабочей директории или n конечных компонентов, при заданном n. Если n начинается с 0 количество пропущенных компонентов предваряет конечные в формате /<skipped>trailing. Если установлена переменная оболочки ellipsis, пропущенные компоненты будут представлены как ...trailing. Подстановка ~ действует аналогично %~, но будет игнорироваться при количестве конечных компонентов больше одного.
%C
Аналогично %c, но без подстановок ~.
%h, %!, !
Номер события в текущей истории.
%M
Полное имя машины.
%m
Сокращенное имя машины. Отображается часть до первой точки.
%S (%s)
Включить (отключить) стандартный режим.
%B (%b)
Включить (отключить) режим жирного шрифта.
%U (%u)
Включить (отключить) режим подчеркивания.
%t, %@
Время в 12-часовом (AM/PM) формате.
%T
Аналогично %t, но в 24-часовом формате (зависит от переменной ampm оболочки).
%p
Точное время суток в 12-часовом (AM/PM) формате, с секундами.
%P
Аналогично %p, но в 24-часовом формате (зависит от переменной ampm оболочки).
\c
c будет распознан как код символа.
%%
Символ %.
%n
Имя пользователя.
%j
Количество запущенных в оболочке работ (jobs).
%d
День недели в текстовом формате.
%D
День недели в числовом формате.
%w
Месяц в текстовом формате.
%W
Месяц в числовом формате.
%y
Год в двухзначном формате.
%Y
Год в четырехзначном формате.
%l
tty оболочки.
%L
Очищает от конца приглашения до конца экрана или строки.
%$
Подставляет значение переменной оболочки или окружения с именем, заданным сразу после $ (например %$PATH).
%#
> (или первый символ из переменной оболочки promptchars) для обычных пользователей и # (или второй символ из promptchars).
%{string%}
Включает строку как управляющая escape последовательность. Может использоваться для изменения атрибутов терминала (например для раскраски приглашения) и может не воздействовать на положение курсора. Не может быть последней последовательностью в приглашении.
%?
Возвращает код ошибки команды, запущенной непосредственно перед приглашением.