• Всем пользователям необходимо проверить работоспособность своего электронного почтового адреса. Для этого на, указанный в вашем профиле электронный адрес, в период с 14 по 18 июня, отправлено письмо. Вам необходимо проверить свою почту, возможно папку "спам". Если там есть письмо от нас, то можете не беспокоиться, в противном случае необходимо либо изменить адрес электронной почты в настройках профиля , либо если у вас электронная почта от компании "Интерсвязь" (@is74.ru) вы им долго не пользовались и хотите им пользоваться, позвоните в СТП по телефону 247-9-555 для активации вашего адреса электронной почты.

Записки *nix'овода

Mironov Ivan

Ословед
Я думаю почти все *nix'оводы часто решают разные проблемы разного масштаба, а так же просто находят какие-то интересные вещи в своих системах. Поэтому я предлагаю в этой теме публиковать различные советы, howto, tip'ы и прочую накопленную мудрость, чтобы другие люди не наступали на уже истоптанные грабли =).

Если вы пишите совет, который актуален только для пользователей Интерсвязи, специально отмечайте это в тексте.

Эта тема не предназначена для обсуждения. Если у вас есть вопросы, предложения, критика и т.п., пишите лично автору конкретного поста (например через ПМ).
 

Mironov Ivan

Ословед
Авторизация в сети eD2k Интерсвязи

Инструкция по настройке aMule от ИС: http://is74.ru/support/instructions/amule.php

Авторизация в сети eD2k Интерсвязи

В сети Интерсвязь невозможно подключиться к серверу emule.is74.ru без авторизации, которая встроена в модифицированный клиент eMule IS Mod. У пользователей альтернативных операционных систем и eD2k-клиентов есть два пути прохождения авторизации:

1) Вручную, через форму авторизации.

2) Скачав и настроив мой скрипт авторизации.

Архив с самой свежей версией скрипта и инструкцией по установке прикреплён к сообщению. Также его можно скачать с моего ftp-сервера (на случай если сменится IP - читайте здесь).

3) Использовать python-скрипт от Guess Who:
Код:
# -*- coding: utf-8 -*-
import base64
import urllib

login=base64.b64encode('login')
password=base64.b64encode('password')

fp=urllib.urlopen('https://el.is74.ru/auth.php?login='+login+'&password='+password)
value=fp.read()
fp.close()

if value=='1':
    print 'success auth'
else:
    print 'bad login or password'
UPDATE (20080718)
Добавил скрипт от Guess Who.
UPDATE (20080601)
Интерсвязевцы купили сертификат у DigiCert и все свои сертификаты подписали с помощью него. Корневой сертификат DigiCert сразу установлен в любой системе, так что теперь таскать сертификат со скриптом не нужно. В новой версии удалён старый сертификат, а так же настройки вынесены в отдельный файл. Спасибо bitlz за наводку по поводу сертификатов ИС.
 

Mironov Ivan

Ословед
KDE только на одном мониторе в "многоголовой" конфигурации

KDE только на одном мониторе в "многоголовой" конфигурации

Если у вас к видеокарте подключено несколько мониторов и управляет ими один X-сервер, то кеды при запуске захватывают все дисплеи которые найдут. Это не всегда удобно, например у меня вторым монитором является телевизор, на котором я иногда запускаю mplayer с фильмом и кеды там только мешаются. Решение было найдено на официальном форуме KDE. Нужно добавить в файл "~/.kde/share/config/kcmdisplayrc" такие строчки:
Код:
[X11]
 disableMultihead=true
 

v0rbis

Ословед
3D ускорение на видеокартах ATI

Для многих пользователей проприетарного драйвера видеокарт канадского гиганта будет неприятным сюрпризом отсутствие аппаратного 3D и много нехороших слов в логе xorg'а.

Приведу необходимые добавления (изменения если уже есть) в файле-конфигурации xorg:

Редактируем /etc/X11/xorg.conf

Код:
Section "ServerFlags"
 Option "AIGLX" "off"
EndSection

Section "Extensions"
 Option "Composite" "off"
EndSection
Ибо нету поддержки AIGLX в драйвере fglrx. надеемся что скоро исправят.

После внесения корректировок необходимо перезапустить X.
 

Mironov Ivan

Ословед
Небольшое ускорение 3D на AGP-картах NVidia

Небольшое ускорение 3D на AGP-картах NVidia

Смотрим от имени суперпользователя что у нас выдаёт модуль nvidia (из пакета проприетарных драйверов) на тему AGP:
Код:
cat /proc/driver/nvidia/agp/status
Если модуль для шины AGP вашего чипсета собран и работает нормально, то там должно быть примерно следующее:
Код:
Status:          Enabled
Driver:          AGPGART
AGP Rate:        8x
Fast Writes:     Disabled
SBA:             Enabled
Если "Fast Writes" или "SBA" выключены (disabled), то нужно загружать ядерный модуль nvidia с параметрами "NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1". Т.е. нам нужно, чтобы в "/etc/modprobe.conf" была примерно такая строка:
Код:
options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1
Можно просто отредактировать этот файл, но лучше этого не делать, т.к. записи в него часто делаются специфичными для дистрибутива утилитами.

Рецепт для Gentoo Linux:
1) Открываем /etc/modules.d/nvidia и добавляем туда "options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1", если директива options не существует. Или просто добавляем "NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1", если какие-то опции уже выставлены.
2) Выгружаем иксы (выполняем "/etc/init.d/sdm stop" от суперпользователя или просто выходим из X-сеанса, если менеджер сеансов не используется).
3) Выгружаем модуль nvidia ("rmmod nvidia" от суперпользователя).
4) Обновляем /etc/modprobe.conf ("update-modules" от суперпользователя).
5) Снова загружаем иксы.

Рецепты для других дистрибутивов отправляйте мне в ПМ, я их суда выложу.

З.Ы. Найдено на форуме compiz-fusion.
 

v0rbis

Ословед
Сглаживание шрифтов

Предметом частых споров среди пользователей *nix является низкое качество шрифтов. Улучшить это положение позволит использование сглаживания. Для TFT-мониторов подходит как ничто лучше.

Замените файл .fonts.conf в своей домашней директории следующим содержанием:

Код:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <!-- Replace Courier with a better-looking font -->
        <match target="pattern" name="family">
                <test name="family" qual="any">
                        <string>Courier</string>
                </test>
                <edit name="family" mode="assign">
                        <!-- Other choices - Courier New, Luxi Mono -->
                        <string>Bitstream Vera Sans Mono</string>
                </edit>
        </match>

        <match target="font">
                <edit name="rgba" mode="assign">
                        <const>rgb</const>
                </edit>
                <edit name="autohint" mode="assign">
                        <bool>true</bool>
                </edit>
                <edit name="antialias" mode="assign">
                        <bool>true</bool>
                </edit>
                <edit name="hinting" mode="assign">
                        <bool>true</bool>
                </edit>
                <edit name="hintstyle" mode="assign">
                        <const>hintmedium</const>
                </edit>
        </match>

        <!-- Disable autohint for bold fonts, otherwise they look *too* bold -->
        <match target="font">
                <test name="weight" compare="more">
                        <const>medium</const>
                </test>
                <edit name="autohint" mode="assign">
                        <bool>false</bool>
                </edit>
        </match>

        <!-- Reject bitmap fonts in favour of Truetype, Postscript, etc. -->
        <selectfont>
                <rejectfont>
                        <pattern>
                                <patelt name="scalable">
                                        <bool>false</bool>
                                </patelt>
                        </pattern>
                </rejectfont>
        </selectfont>

</fontconfig>
Внимание: при использовании внешних утилит по настройке шрифтов содержимое файла может быть изменено.

Материал взят с http://gentoo-wiki.com/HOWTO_Xorg_and_Fonts

 
Дополнительные кнопки мыши

Пересев на линукс был удивлен, тем что не работают боковые кнопки мыши (вперед-назад). На днях наткнулся на howto, как это исправить.

Идея в целом: по событию с боковых кнопок мыши имитируем нажатие клавиш на клавиатуре.

1. Ставим пакет (в большинстве случаев уже установлен):
Код:
sudo apt-get install xserver-xorg-input-evdev

2. Смотрим на вывод команды:
Код:
cat /proc/bus/input/devices
Должно быть что-то типа:
Код:
I: Bus=0003 Vendor=04b4 Product=6370 Version=0110
N: Name=[B]"Maxxtro Maxxtro MUSORFO Mouse"[/B]
P: Phys=usb-0000:00:1d.1-1/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse1 event1 ts1 
B: EV=7
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=103

I: Bus=0003 Vendor=099a Product=712a Version=0100
N: Name="  Hub Keyboard"
P: Phys=usb-0000:00:1d.1-2.3/input0
S: Sysfs=/class/input/input2
H: Handlers=kbd event2 
B: EV=120003
B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=7
и т.д.
Нас интересует выделенное полужирным.

3. Правим xorg.conf:
Код:
Section "InputDevice"
    Identifier    "Mouse0" #Я здесь вписал то, что у меня было до этого
    Driver        "evdev"
    Option        "CorePointer"
    Option        "Name" "Maxxtro Maxxtro MUSORFO Mouse" #Название мыши - см. выделенную полужирным строку выше.
EndSection

4. Ставим пакеты "xvkbd" and "xbindkeys":
Код:
sudo apt-get install xvkbd xbindkeys

5. Создаем в домашней папке файл .xbindkeysrc с содержимым:
Код:
"/usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Left]""
  m:0x0 + b:8
"/usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Right]""
  m:0x0 + b:9
Кавычки обязательны!

6. Перезагружаемся и пробуем навигационные кнопки мыши. Если не работает, запускаем программу xev и смотрим какой номер у нужной кнопки, вписываем его вместо "b:8" или "b:9". Если опять не работает пробуем запустить вручную xbindkeys - у меня не понадобилось.

ПЫСЫ. Не забываем забэкапить xorg.conf на случай если иксы не запустятся.

Исходник - http://ubuntuforums.org/showthread.php?t=219894&page=1
 

Mironov Ivan

Ословед
Linux vs. IS74

Linux vs. IS74

Существует несколько основных проблем настройки сети Интерсвязь под linux (а также другие *nix-системы):
1) DHCP-клиенты в *nix-ситемах неправильно "понимают" маршруты, которые им выдают DHCP-сервера ИС. Симптом: траффик в другие подсети идёт через VPN-подключение. Причина в том, что DHCP-клиент не принял маршруты на подсети и бесплатные ресурсы ИС (подробнее - ниже).
2) Не устанавливаются маршруты на VPN-севера ИС. Симптом: "зацикливаются" VPN-соединения, т.е. после поднятия соединения через него с огромной скоростью начинает идти исходящий трафик, но при этом реально пакеты не выходят за пределы машины.
3) Исходящие пакеты урезаются из-за слишком большого значения MTU на ppp-подключнии. Симптом: сервера в интернете возвращают ошибки повреждения данных или подобные по смыслу при отправке им большого количества данных через VPN-подключение.

А теперь детально о причинах и методах решения:

1) В ответ на запрс DHCP-сервер отправляет клиенту сообщение в котором содержится несколько "опций" с различной информацией (IP адрес, маршруты, адреса DNS-серверов и т.п.). По RFC за передачу клиенту маршрутов отвечают: option 3 (routers - маршруты по умолчанию; передаётся только адрес гейтвея), option 33 (static routes - маршруты на подсети; в сообщении передаётся только IP адрес назначения и гейтвей, а маска определяется автоматически) и option 121 (classes static routes - в сообщении передётся и адрес, маска и гейтвей; эта опция появилась позже и в принципе перекрывает первые две). Вот так маршруты _должны_ передаваться, но программисты из Micro$soft прочитали RFC после употребления сильнодействующих наркотиков, затем основателино подумали жопой и только после этого реализовали свой dhcp-клиент методом стучания по клавиатуре левой пяткой. Поэтому работает он у них через жопу: изобретена новая опция 249, которая и по формату передаваемых данных и по смыслу вообще ничем не отличается от 121 (CSR), а так же у опции 33 маска всегда равна 255.255.255.255 (маршрут на конкретный хост, а не на подсеть). Возможно есть ещё какие-то отличия, но я с ними не сталкивался.

В ИС дефолтный маршрут попадает к нам через opt. 3, а маршруты на бесплатные ресурсы и на внутреннюю сеть (192.168.0.0/16) через opt. 249 (для совместимости с windows, хотя могли бы заодно и 121 отправлять =)). Опцию 249 клиент dhcpcd умеет понимать начиная с версии 3.2.0, т.е. какие-либо патчи теперь не нужны. Исходники свежей версии dhcpcd прикреплены к сообщению.

Лучше всего поставить dhcpcd пакетным менеджером вашего дистрибутива, хотя можно собрать и из исходников таким образом:
Код:
# Распаковываем исходники dhcpcd
tar -xjf dhcpcd-*.tar.bz2
# Переходим в папку с исходниками
cd dhcpcd-*
# Запускаем сборку
make
# Устанавливаем (необходимо запускать от имени root)
make install

Для того чтобы можно было использовать один и тот же dhcpcd в разных сетях, совместимость с windows включается опцией -S. Т.е. запускайте dhcpcd примерно так:
Код:
dhcpcd -S -h myhostname ethN
Здесь ethN - сетевой интерфейс, куда подключена сеть ИС, а myhostname - желаемое имя хоста (будет myhostname.XX.YYY-ZZZ.is74.ru, где XX.YYY-ZZZ - ваша подсеть). Какие ещё есть полезные опции - смотрите man dhcpcd.

2) DHCP-сервера почти во всех подсетях просто не выдают клиентам маршруты на VPN'ы. Почему это нормально работает в windows без маршрутов я не знаю, скорее всего там как-то по другому работает маршрутизация. В *nix'ах нам придётся позаботиться об этих маршрутах самостоятельно. Для автоматического прописывания всего что нужно можно использовать вот такой скрипт:
Код:
#!/bin/bash

# PATH
PATH="/sbin:/bin:/usr/bin:/usr/sbin"

# Intersvyaz's VPN servers
IS74_VPN_SERVERS="vpn.chelcom.ru ndozor.chelcom.ru unlim.chelcom.ru"
# Network interface
IS74_IF="eth0"
# DNS timeout
HOST_OPTS="-W 5"

vpn_ips=""
for vpn in ${IS74_VPN_SERVERS}; do
        vpn_ips+=" $( host ${HOST_OPTS} -t A ${vpn} | awk '{print $4}' )"
done

for vpn_ip in ${vpn_ips}; do
        echo "Adding route to ${vpn_ip} via ${IS74_IF}..."
        ip route add to "${vpn_ip}" dev "${IS74_IF}"
done

exit 0
Для него нужны утилиты ip (пакет sys-apps/iproute2 в Gentoo) и host (пакет net-dns/bind-tools в Gentoo). Запускать нужно каждый раз перед установкой VPN-соединения.

3) MTU (Maximum Transmission Unit) - это максимальный размер пакета, который можно передать через сетевой интерфейс. Пакеты большего размера урезаются до значения MTU, если вышестоящий протокол не умеет самостоятельно разбивать пакеты на более мелкие (как например TCP). Для ethernet значение MTU закреплено стандартом и равно 1500, а значение MTU для PPP определяется во время подключения. По умолчанию pppd тоже устанавливает 1500, но это приводит к проблеме - при отправке пакета максимального размера (1500) через PPP-интерфейс к нему добавляются новые данные, необходимые для доставки VPN-серверу, и размер увеличивается. А при отправке полученного пакета через ethernet-интерфейс в сеть ИС он снова урезается до 1500 байт и до сервера в интернете доходят не все данные. Чтобы этого не происходило, надо передать демону pppd опцию mtu с меньшим значением, например 1400 будет вполне достаточно:
Код:
pppd [...] mtu 1400 [...]
Текущее значение MTU для конкретного интерфейса можно узнать с помощью утилиты ifconfig.

UPDATE (20080226)
Вышел dhcpcd 3.2.3 с небольшими багфиксами.
UPDATE (20080221)
Вышел dhcpcd 3.2.2, выкладываю.
UPDATE (20080201)
dhcpcd >=3.2.0 научился получать маршруты по opt.249 без всяких патчей.
 

L_ninyo

Ословед
Очень часто меня выручает маленькая, но супербыстрая и суперполезная программка GNU wget (она по умолчанию присутствует во множестве дистрибутивов).

например,когда нужно быстро из командной строки загрузить какой-либо файл:
(загрузим sources.list репозитария Ktk ;) )

wget ftp://debian.44-47.is74.ru/pub/repo/ubuntu/sources.list

а если закачка вдруг оборвалась можно вот так докачать файл:

wget -с ftp://debian.44-47.is74.ru/pub/repo/ubuntu/sources.list

Далее, если нужно скачать сразу много файлов, то прямые ссылки на них можно забить в файл и указать его wget'у как лист закачек:

wget -i filelist , где filelist - файл с прямыми ссылками.

А если прямые ссылки на файлы есть на веб-страничке, и не хочется импортировать их в файл закачек, можно содрать их напрямую:

wget -input-file=путь_до_странички_с_сылками.


А вот ещё вариант - нужно зазеркалировать для локального просмотра сайт с важной документацией сохранив при этом его внутреннюю структуру и возможность перехода по ссылкам:
Зеркалируем мануал по irc сетям:

wget -r -l0 -k http://irc.is74.ru/faq/

после выполнения команды в каталоге из которого был выполнен wget появится подкаталог irc.is74.ru являющийся полным зеркалом сайта.

Вот так просто можно обойтись без графических программ и различных оффлайн браузеров. А если станет интересно - почитайте man wget там ещё много интересного - закачка файлов по маске, авторизация на ресурсе с которого ведётся закачка и т.д.....
 
MS classless routes option (249) для dhclient

Как и обещал, вот конфиги, реализующие эту опцию без патча. Работает в Федоре.

/etc/dhclient.conf
Код:
option ms-classless-static-routes code 249 = array of unsigned integer 8;
request subnet-mask, broadcast-address, static-routes, routers, ms-classless-static-routes, domain-name, domain-name-servers, host-name;
require subnet-mask;
timeout 60;
retry 60;
script "/sbin/dhclient-script";

/etc/dhclient-exit-hooks
Код:
set_routes() {
ms_routes=($new_ms_classless_static_routes)
for(( i=0; i < ${#ms_routes[@]}; )); do
    net_length=${ms_routes[$i]}
    ((i++))
    net_address=(0 0 0 0)
    for(( j=0; j < $[$net_length / 8 + ($net_length % 8 ? 1 : 0)]; j++, i++)); do
        net_address[$j]=${ms_routes[$i]}
    done
    gateway=(0 0 0 0)
    for (( j=0; j < 4; j++, i++ )); do
        gateway[$j]=${ms_routes[$i]}
    done
    old_IFS="$IFS"
    IFS='.'
    if [ x"$net_length" == x"32" ]; then
        /sbin/ip route add "${net_address[*]}" via "${gateway[*]}"
    else
        /sbin/ip route add  "${net_address[*]}/$net_length" via "${gateway[*]}"
    fi
    IFS="$old_IFS"
done
}
case $reason in
MEDIUM)
;;
PREINIT)
;;
BOUND)
set_routes
;;
RENEW)
set_routes
;;
REBIND)
set_routes
;;
REBOOT)
set_routes
;;
EXPIRE)
;;
FAIL)
;;
TIMEOUT)
;;
*)
;;
esac
 

Mironov Ivan

Ословед
Универсальный скрипт для подключения к VPN Интерсвязи

Универсальный скрипт для подключения Linux к VPN Интерсвязи

В связи с постоянными вопросами типа "Как подключить VPN в таком-то дистрибутиве?" я написал этот универсальный скрипт. Он должен упростить подключение к ИСовскому интернету до минимума: устанавливаем пакеты с pppd и pptp -> вбиваем имя и пароль в конфиг -> запускаем скрипт -> пользуемся интернетом. Подробные инструкции читайте в README-файле (находится в архиве вместе со скриптом).

На данный момент скрипт был протестирован в следующих дистрибутивах:
  • Gentoo Linux (со всеми обновлениями на данный момент)
  • Debian Linux 4.0 (codename "Etch")
  • Ubuntu Linux 7.10 (codename "Gutsy Gibbon")
  • Fedora 8
  • Mandriva Free 2008.0
  • OpenSUSE 10.3, 11
  • Slackware 12.0
Если у вас скрипт нормально заработал на дистрибутиве, которого нет в списке - пожалуйста сообщите мне.

Если что-то не работает или работает не так, то тоже сообщайте мне. Но перед этим внимательно прочитайте README :yes:.

ВНИМАНИЕ! Этот скрипт НЕ РЕКОМЕНДУЕТСЯ использовать в качестве постоянного средства для подключения к интернету, так как практически во всех дистрибутивах есть встроенные средства для настройки и запуска ppp/pptp. Но он вполне пригоден для того, чтобы подключиться к интернету, найти документацию по дистрибутиву и настроить всё "как надо".

ChangeLog
2008.08.20
  • Протестировано в openSUSE 11 (спасибо Adium).
2008.07.23
  • Протестировано в Slackware 12.0 (спасибо eng1ne).
2008.03.22
  • Свежая версия - 1.2. Добавлена возможность автоматической активации тарифа "Ночной Дозор". Теперь больше не нужно заходить в личный кабинет и активировать его вручную =).
 

L_ninyo

Ословед
Озадачился подобным.

Вобщем вот скрипт, который склеивает из дистрибутивных инсталяционных CD с FreeBSD инсталяционный DVD. Оч. удобно.

Теперь вот тут ftp://ftp.is74.ru/pub/FreeBSD/releas...SO-IMAGES/7.0/ можно взять образа 7 и собрать нормальный установщик, чтоб не жанглировать дисками как в цирке.

Собственно, скрипт:

PHP:
!/bin/sh
#
# Copyright (C) 2008 Roman Kurakin rik@freebsd.org. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#       
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# Merges FreeBSD's several CD installation medias to the single DVD disk.
#
# $Id:$
## Helper functions
usage () {
 echo "Usage: $0 <dvd_img_name> <cd_img_name <cd_img_name ..>>"
}
# Copy data from the cd
# $1 os name
# $2 disk image name
# $3 mount dir
# $4 destination dir
copycd () {
 # Set some variables
 md=""
 _os="${1}"
 _img="${2}"
 _mnt="${3}"
 _dst="${4}"
 if [ $# -ne "4" ]
 then
  echo "Error: function ${0} takes exactly four parameters."
  exit 1
 fi
 if [ "${_os}" != "FreeBSD" -a "${_os}" != "Linux" ]
 then
  echo "Error: do not know how to handle ${_os} os."
  exit 1
 fi
 if [ ! -f "${_img}" ]
 then
  echo "Error: file ${_img} does not exists or not a regula file."
  exit 1
 fi
 if [ ! -r "${_img}" ]
 then
  echo "Error: you do not have the read permissions."
  exit 1
 fi
 if [ ! -d "${_mnt}" ]
 then
  echo "Error: ${_mnt} is not a directory or does not exists."
 fi
 if [ ! -d "${_dst}" ]
 then
  echo "Error: ${_dst} is not a directory or does not exists."
 fi
 if [ ! -w "${_dst}" ]
 then
  echo "Error: you do not have write permissions granted for ${_dst} directory."
 fi
 if [ "${_os}" != "Linux" ]
 then
  md=`mdconfig -a -t vnode -f ${_img}` || exit 1
  mount_cd9660 /dev/${md} ${_mnt} || exit 1
 else
  mount -o loop ${_img} ${_mnt} || exit 1
 fi
 if [ ! -f ${_mnt}/cdrom.inf ]
 then
  echo "Error: Failed to find cdrom.inf for ${_img}."
  exit 1
 fi
 cdvol=`grep "^CD_VOLUME.*" ${_mnt}/cdrom.inf | sed "s/CD_VOLUME[[:space:]]*=[[:space:]]*//"`
 if test -z "${cdvol}" -o ! "${cdvol}" -eq "${cdvol}" 2> /dev/null
 then
  echo "Error: failed to get volume id for ${_img}."
  exit 1
 fi
 cdver=`grep "^CD_VERSION.*" ${_mnt}/cdrom.inf | sed "s/CD_VERSION[[:space:]]*=[[:space:]]*//"`
 if test -z "${cdver}"
 then
  echo "Error: failed to get version id for ${_img}."
  exit 1
 fi
 if [ -z "${VERID}" ]
 then
  VERID="${cdver}"
  _exclude=""
 else
  if [ "${VERID}" != "${cdver}" ]
  then
   echo "Error: cd version ids mismatch while processing ${_img}."
   exit 1
  fi
#  _exclude="--exclude ./cdrom.inf --exclude ./packages/INDEX"
  _exclude="! -regex ./cdrom.inf ! -regex ./packages/INDEX"
 fi
 echo "Merging ${_img}:"
# --quite -u -V
 (cd "${_mnt}" && find . ${_exclude} | cpio -p -d -m -V --quiet "${_dst}") || exit 1
# (cd "${_mnt}" && tar ${_exclude} -cvf - .) | (cd "${_dst}" && tar xvf -) || exit 1
 if [ "${_os}" != "Linux" ]
 then 
  umount /dev/${md} || exit 1
  mdconfig -d -u "${md}" || exit 1
 else
  umount ${_mnt} || exit 1
 fi
# exit 0
}
# Clear mounted image
# $1 mounted directory
# $2 error code
clearmount ()
{
 if [ $# -ne "2" ]
 then
  echo "Error: function ${0} takes exactly two parameters."
  exit 1
 fi
 if [ -z "${1}" ]
 then
  test -z "${2}" || exit "${2}"
 else
  # Ignore errors
  umount "${1}" 2>/dev/null
  test -z "${2}" || exit "${2}"
 fi
}
# Clear CD image allocation
# $1 os name
# $2 md
# $3 error code
clearmd ()
{
 if [ $# -ne "3" ]
 then
  echo "Error: function ${0} takes exactly three parameters."
  exit 1
 fi
 if [ "${1}" != "FreeBSD" -o -z "${2}" ]
 then
  test -z "${3}" || exit "${3}"
 else
  # Ignore errors
  mdconfig -d -u "${2}" 2>/dev/null
  test -z "${3}" || exit "${3}"
 fi
}
## Check params
if [ $# -lt 3 ]
then
 usage
 echo "Error, this script should take more than two parameters."
 exit 1
fi
# Check if zero
if [ -z "${1}" ]; then
 usage
 exit 1
fi
# Check if already exists
if [ -e "${1}" ]; then
 if [ ! -f "${1}" ]; then
  echo "Destination DVD image file already exists and is not a regular file."
  exit 1
 fi
 while echo "The ${1} file exists. Overwrite? (y/n)"
 do
  read line
  case "${line}" in
  y|Y)
   rm -rf "${1}"
   touch "${1}"
   break
   ;;
  n|N)
   echo "Please, run program again with a new value."
   exit 1
   ;;
  esac
 done
fi
DVDIMAGE="${1}"
shift
count=0
for i in "$@"
do
 # Skip empty params.
 if test -z "${i}"; then
  continue
 fi
 if [ ! -f "${i}" -o ! -r "${i}" ]
 then
  echo "Error: The ${i} is not readable, do not exists or not a regular file."
  exit 1
 fi
 count=`expr ${count} \+ 1`
done
# Check if we have at the least two CD images
if [ "${count}" -lt 2 ]
then
 echo "Error: less than two CD images specified."
fi
## Some usefull variables
pwd=`pwd`
tmpdirin="${pwd}/tmp-$$-in"
tmpdirout="${pwd}/tmp-$$-out"
system=`uname -s`
md=""
# set the trap options
trap 'echo ""; echo "Cleaning up"; clearmount "${tmpdirin}" ""; clearmd "${system}" "${md}" ""; rm -rf "${tmpdirin}" "${tmpdirout}";' 0 1 2 3 15
mkdir "${tmpdirin}" || (echo "Error: failed to create tempory ${tmpdirin}"; exit 1)
mkdir "${tmpdirout}" || (echo "Error: failed to create tempory ${tmpdirout}"; exit 1)
for i in "$@"
do
 # Skip empty params.
 if test -z "${i}"; then
  continue
 fi
 copycd "${system}" "${i}" "${tmpdirin}" "${tmpdirout}"
 mv "${tmpdirout}"/packages/INDEX "${tmpdirout}"/packages/INDEX~ || exit 1
 cat "${tmpdirout}"/packages/INDEX~ | sed "s/^\(.*\)|${cdvol}$/\1|1/" > "${tmpdirout}"/packages/INDEX || exit 1
 rm "${tmpdirout}"/packages/INDEX~ || exit 1
done
mv "${tmpdirout}"/cdrom.inf "${tmpdirout}"/cdrom.inf~ || exit 1
cat "${tmpdirout}"/cdrom.inf~ | sed "s/^\(CD_VOLUME[[:space:]]\{0,\}=[[:space:]]\{0,\}\)[[:digit:]]\{1,\}/\11/" > "${tmpdirout}"/cdrom.inf || exit 1
rm "${tmpdirout}"/cdrom.inf~ || exit 1
mkisofs -b boot/cdboot -no-emul-boot -r -J \
 -V "FreeBSD_Install" \
 -publisher "The FreeBSD Project.  http://www.freebsd.org/" \
 -o ${DVDIMAGE} "${tmpdirout}" \
 || exit 1 
exit 0

Состоялся долгожданный релиз FreeBSD 7.0

Вышел новый релиз FreeBSD - самой популярной UNIX-подобной операционной системы из современного семейства BSD.
Что сделано в этой версии:
Улучшен и подчищен код стека сети.
Изменения в ядре: фильтр прерываний, Linuxulator, новый планировщик ULE 2.0/3.0
Мультимедиа: добавлены emu10kx, snd_envy24[ht], snd_hda.
Улучшения в userland: добавлен jemalloc
Добавлена поддержка ZFS, начальная поддержка XFS (read-only) и экспериментальная поддержка tmpfs
Изменения, касающиеся безопасности: добавлен аудит событий, новые возможности разделения привелегий и прав.
Добавлена поддержка архитектур ARM, sun4v (Niagara) и прекращена поддержка alpha.
Поддержка Xorg 7.3.0, Gnome 2.20.1, KDE 3.5.7
Образы дисков теперь 700 Mb (вместо 650 ранее)
 

v0rbis

Ословед
Конвертация Apple' MonkeyAudio (ape)

Ввиду большой любви к audio-lossless делу, был озадачен переводом этих файлов в богоугодный flac, когда обнаружилась неспособность проигрывания ape файлов моим любимым Amarok. К gstreamer'у можно прикрутить неофициальную поддержку ape формата, но Amarok не использует этот фреймворк, а городить лес плееров не Ъ.

Можно конечно руками вводить каждый раз комманды перевода ape в wav и затем во flac, но это неудобно когда файлов много и имена длинные. Да и опять же, программер лучше час посидит над скриптом, чем 30минут руками нудную работу совершать.

PHP:
#!/bin/bash

# ape-flac converter v0.3.0 (c) v0rbis@mail.ru under GPL v2 license
# some ideas by mironov_ivan =)


find ./ -name *.ape | sed s/\.ape// | while read file; do
        /bin/echo "${file}";
        /usr/bin/mac "${file}.ape" "${file}.wav" -d 2> /dev/null;
        /usr/bin/flac -7 --totally-silent "${file}.wav";
        /bin/rm "${file}.wav";
done
данный скрипт предназначен искать все файлы ape и переводить в конечном счете их во flac (начиная с текущей директории).

требования - должны быть установлены MAC (monkey audio converter) и FLAC (flac decoding/encoding/verifying tool) и пути до них в скрипте.
плюсы - работает как бетономешалка
минусы - работает "в лоб" (flac пайпом с mac работать не умеет, считывая stdout), иногда были сегфолты не влияющие на работу

*чейнжлог*
0.1.0: ручной режим обработки
0.2.0: поиск всех аре в текущем каталоге
0.2.3: багфиксы
0.3.0: поиск по всем каталогам начиная с текущего. максимальное сжатие flac.
 
Вобщем вот скрипт, который склеивает из дистрибутивных инсталяционных CD с FreeBSD инсталяционный DVD. Оч. удобно.

чуть поправлю: вот енто:
PHP:
mkisofs -b boot/cdboot -no-emul-boot -r -J \
 -V "FreeBSD_Install" \
 -publisher "The FreeBSD Project.  http://www.freebsd.org/" \
 -o ${DVDIMAGE} "${tmpdirout}" \
 || exit 1 
exit 0

нужно сделать так:
PHP:
mkisofs -b boot/cdboot -no-emul-boot -r -J -V "FreeBSD_Install" -publisher "The FreeBSD Project.  http://www.freebsd.org/" -o ${DVDIMAGE} "${tmpdirout}" || exit 1
exit 0

а то будет ругаться ;)
 

Mironov Ivan

Ословед
WAV|APE|etc+CUE - режем и перекодируем

WAV|APE|etc+CUE - режем и перекодируем

В последнее время в сети часто стала попадаться музыка, выложенная в виде сконвертированного в один сплошной файл айдио-диска и CUE-файла, содержащего теги и время начала/конца для каждого трека. Не все аудио-плееры нормально пережёвывают музыку в таком виде, и не всегда удобно держать все треки в одном файле, так что неплохо было бы перекодировать это всё во что-нибудь более привычное. Так как в таком виде почти всегда выкладывается музыка сжатая без потери качества (или не сжатая вообще), то естественным решением видится перекодировка во FLAC. Итак, приступим...

Нам понадобится:
Если аудио-диск уже во что-то сжат (т.е. не WAV+CUE), то так же потребуется декодировщик из этого формата. Мне попались рипы двух audio-cd в формате APE (Monkey's Audio), для их раскодировки нужна утилита mac (http://ylsoftware.com/?action=files&fa=viewfile&file=21).

1) Перекодируем образы в WAV (если нужно):
Код:
mac audiocd1.ape audiocd1.wav -d
mac audiocd2.ape audiocd2.wav -d
rm *.ape

2) Снова сжимаем, теперь уже во FLAC:
Код:
flac audiocd1.wav -o audiocd1.flac
flac audiocd2.wav -o audiocd2.flac
rm *.wav

3) Нарезаем оба образа на отдельные треки:
Код:
cuebreakpoints audiocd1.cue | shnsplit -o flac -a split1-track audiocd1.flac
cuebreakpoints audiocd2.cue | shnsplit -o flac -a split2-track audiocd2.flac
Удаляем монолитные образы:
Код:
rm audiocd*.flac

4) Теперь нужно добавить к нарезанным трекам теги, которые хранятся в CUE-файле. В комплекте cuetools для этого есть скрипт cuetag.sh, но он не совместим с новыми версиями FLAC. Вот исправленная версия (исправлена одна строка с опциями):
Код:
#! /bin/sh

# cuetag.sh - tag files based on cue/toc file information
# uses cueprint output
# usage: cuetag.sh <cuefile|tocfile> [file]...

CUEPRINT=cueprint
cue_file=""

usage()
{
	echo "usage: cuetag.sh <cuefile|tocfile> [file]..."
}

# Vorbis Comments
# for FLAC and Ogg Vorbis files
vorbis()
{
	# FLAC tagging
	# --remove-vc-all overwrites existing comments
	METAFLAC="metaflac --remove-all-tags --import-tags-from=-"

	# Ogg Vorbis tagging
	# -w overwrites existing comments
	# -a appends to existing comments
	VORBISCOMMENT="vorbiscomment -w -c -"

	case "$2" in
	*.[Ff][Ll][Aa][Cc])
		VORBISTAG=$METAFLAC
		;;
	*.[Oo][Gg][Gg])
		VORBISTAG=$VORBISCOMMENT
		;;
	esac

	# space seperated list of recomended stardard field names
	# see http://www.xiph.org/ogg/vorbis/doc/v-comment.html
	# TRACKTOTAL is not in the Xiph recomendation, but is in common use
	
	fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC'

	# fields' corresponding cueprint conversion characters
	# seperate alternates with a space

	TITLE='%t'
	VERSION=''
	ALBUM='%T'
	TRACKNUMBER='%n'
	TRACKTOTAL='%N'
	ARTIST='%c %p'
	PERFORMER='%p'
	COPYRIGHT=''
	LICENSE=''
	ORGANIZATION=''
	DESCRIPTION='%m'
	GENRE='%g'
	DATE=''
	LOCATION=''
	CONTACT=''
	ISRC='%i %u'

	(for field in $fields; do
		value=""
		for conv in `eval echo \\$$field`; do
			value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file`

			if [ -n "$value" ]; then
				echo "$field=$value"
				break
			fi
		done
	done) | $VORBISTAG "$2"
}

id3()
{
	MP3INFO=mp3info

	# space seperated list of ID3 v1.1 tags
	# see http://id3lib.sourceforge.net/id3/idev1.html

	fields="TITLE ALBUM ARTIST YEAR COMMENT GENRE TRACKNUMBER"

	# fields' corresponding cueprint conversion characters
	# seperate alternates with a space

	TITLE='%t'
	ALBUM='%T'
	ARTIST='%p'
	YEAR=''
	COMMENT='%c'
	GENRE='%g'
	TRACKNUMBER='%n'

	for field in $fields; do
		value=""
		for conv in `eval echo \\$$field`; do
			value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file`

			if [ -n "$value" ]; then
				break
			fi
		done

		if [ -n "$value" ]; then
			case $field in
			TITLE)
				$MP3INFO -t "$value" "$2"
				;;
			ALBUM)
				$MP3INFO -l "$value" "$2"
				;;
			ARTIST)
				$MP3INFO -a "$value" "$2"
				;;
			YEAR)
				$MP3INFO -y "$value" "$2"
				;;
			COMMENT)
				$MP3INFO -c "$value" "$2"
				;;
			GENRE)
				$MP3INFO -g "$value" "$2"
				;;
			TRACKNUMBER)
				$MP3INFO -n "$value" "$2"
				;;
			esac
		fi
	done
}

main()
{
	if [ $# -lt 1 ]; then
		usage
		exit
	fi

	cue_file=$1
	shift

	ntrack=`cueprint -d '%N' $cue_file`
	trackno=1

	if [ $# -ne $ntrack ]; then
		echo "warning: number of files does not match number of tracks"
	fi

	for file in $@; do
		case $file in
		*.[Ff][Ll][Aa][Cc])
			vorbis $trackno "$file"
			;;
		*.[Oo][Gg][Gg])
			vorbis $trackno "$file"
			;;
		*.[Mm][Pp]3)
			id3 $trackno "$file"
			;;
		*)
			echo "$file: uknown file type"
			;;
		esac
		trackno=$(($trackno + 1))
	done
}

main "$@"
Сохраняем его, делаем запускаемым (chmod a+x cuetag.sh) и запускаем таким образом:
Код:
./cuetag.sh audiocd1.cue split1-track*.flac
./cuetag.sh audiocd2.cue split2-track*.flac
Убираем за собой:
Код:
rm *.cue

Теперь можно открыть полученные файлы например в Amarok'е и переместить их в свою коллекцию музыки.
 

satoorn

Ословед
Выбираем самое быстрое зеркало Debian.

Apt-spy утилита с помощью которой можно подобрать самое быстрое зеркало. Asp-spy сгенерирует новый файл /etc/apt/source.list с самыми быстрыми серверами.
Что бы получить список всех зеркал
apt-spy update

Ищем самый быстрый сервер для примера в Северной Америке (ветка testing), запускаем
apt-spy -d testing -a north-america

Что бы найти самое быстрое зеркало stable в Германии, выполняем
apt-spy -d stable -s de

Чтоб тема не умерла. ))

Ну и добавим:

cron-apt
автоматическое обновление Debian.
Когда количество серверов на поддержке переваливает за второй десяток, поневоле начинаешь думать как бы так сделать, чтобы удобные, но очень скучные aptitude update && aptitude upgrade происходили без вмешательства со стороны занятого более творческой работой администратора. В бытность свою молодым джедаем, меня посещала гениальная мысль засунуть эти команды в шедулер. Ничего хорошего из этого, разумеется, не вышло. При желании, конечно, можно написать скрипт автоматизирующий эту задачу, но это уже будет велосипедостроение.
Пакет cron-apt представляет собой утилиту, с помощью которой автоматизируется скачивание, а при желании и установка обновлений.
В конфигурационном файле /etc/cron-apt/config можно настроить процесс автоматического обновления и оповещения под свои требования.
Ставится стандартно:
#aptitude install cron-apt
Конфигурацию имеет довольно гибкую. Параметры подробно описаны в /etc/cron-apt/config. Если оставить его как есть, то будет раз в сутки обновлять списки пакетов и скачивать всё, что нужно для dist-upgrade. Это уже само по-себе приятно. Когда начинаешь апдейтиться вручную пакеты уже готовы, не надо ждать пока они скачаются. Экономит время.
 
Вообще то в оригинале опция rfc3442 имеет номер 121 http://www.faqs.org/rfcs/rfc3442.html , а M$ сдублировало эту опцию и присвоило в собственной реализации код 249. То, что создатели Ubuntu включили в свой dhcp-клиент такой код, ещё раз свидетельствует, что "Ubuntu - древнее африканское слово, обозначающее я не смог настроить Slackware" ;)
 
Я уже не являюсь клиентом Интерсвязи и у меня сейчас нет возможности проверить работу их dhcp-сервера.
 
Вот тут есть настройки для интернета, программы, обновления и.т.д. Мне очень помогло, т.к. это всё в локальной сети. Дистрибутивам ubuntu и debian посвящается.
 

Linuxoid

Ословед
делаемс кнопочки для запуска скрипта

Универсальный скрипт для подключения Linux к VPN Интерсвязи

В связи с постоянными вопросами типа "Как подключить VPN в таком-то дистрибутиве?" я написал этот универсальный скрипт. Он должен упростить подключение к ИСовскому интернету до минимума: устанавливаем пакеты с pppd и pptp -> вбиваем имя и пароль в конфиг -> запускаем скрипт -> пользуемся интернетом. Подробные инструкции читайте в README-файле (находится в архиве вместе со скриптом).

На данный момент скрипт был протестирован в следующих дистрибутивах:
  • Gentoo Linux (со всеми обновлениями на данный момент)
  • Debian Linux 4.0 (codename "Etch")
  • Ubuntu Linux 7.10 (codename "Gutsy Gibbon")
  • Fedora 8
  • Mandriva Free 2008.0
  • OpenSUSE 10.3, 11
  • Slackware 12.0
Если у вас скрипт нормально заработал на дистрибутиве, которого нет в списке - пожалуйста сообщите мне.

Если что-то не работает или работает не так, то тоже сообщайте мне. Но перед этим внимательно прочитайте README :yes:.

ВНИМАНИЕ! Этот скрипт НЕ РЕКОМЕНДУЕТСЯ использовать в качестве постоянного средства для подключения к интернету, так как практически во всех дистрибутивах есть встроенные средства для настройки и запуска ppp/pptp. Но он вполне пригоден для того, чтобы подключиться к интернету, найти документацию по дистрибутиву и настроить всё "как надо".

ChangeLog
2008.08.20
  • Протестировано в openSUSE 11 (спасибо Adium).
2008.07.23
  • Протестировано в Slackware 12.0 (спасибо eng1ne).
2008.03.22
  • Свежая версия - 1.2. Добавлена возможность автоматической активации тарифа "Ночной Дозор". Теперь больше не нужно заходить в личный кабинет и активировать его вручную =).

вот и сидя вечером придумал

#! /bin/bash

sudo -i /home/max/downloads/is74-pptp-1.2/is74-pptp.pl up unlim

exec sleep 1


так вот написав пару вот таких строчки... сделал кнопочки запуска для "временного скрипта", соответственно для второй кнопочки что бы сбросить соединение заменяем up ulim на down.... и что бы вся эта беда запустилась делаем соответствующую сапись в /etc/sudousers /etc/sudoers строку "%myname% localhost = NOPASSWD: /home/и далее где спрятан скрипт" заменив %myname% и скрипт на свои
 
Сверху