понеділок, 12 травня 2014 р.

Новый блог

Давно сюда заходил. Совсем забыл, что есть такое место. А в это время создал новый бог на Django/Python. Очень интересная технология. Занялся изучением.
Новый блог находится здесь: jonasblog.in.ua
В последнее время обновляется регулярно.

Читати далі...

середа, 24 березня 2010 р.

Миссия: разбудить Beeline

Как я говорил в предыдущем посте, у провайдера моего есть одна неприятная особенность. Соединение "залипает". Это проявляется в следующих симптомах: ВПН-соединение не обрывается, демон остается уверен, что все работает отлично. Пинги входят и выходят, а интернета - нету. Сайты не отображаются, аська не работает, торренты не качают. Когда у меня был железячный роутер, проблема решалась только перезагрузкой. Причиной называлась перегруженность сервера vpn2.beeline.ua.

Но вот, Билайн объявил, что специально для Киева и пригородов в начале марта был поднят новый сервер: tp.beeline.ua. Админы активно приглашали тестить и радовали тем, что  нагрузка на нем не поднимается даже до 1%. На радостях, я настроил l2tp-соединение с новым сервером. Но, оказалось, что залипания, хоть и стали намного реже, однако же не пропали совсем. Проблему решил исправить, сваяв небольшой скриптик, который пытается скачать страничку с какого-то всегда доступного сайта в интернете, и если у него это не получается, то перегружать демон xl2tpd.
Собственно, вот сам скрипт:
#!/bin/sh
clear
date > /home/jona/test.log
if [ -r index.html ]
    then rm /root/index.html*
fi
echo "trying ya.ru" >> /home/jona/test.log
wget -T 10 -t 1 ya.ru
if [ ! -r index.html ]
    then wget -T 10 -t 1 google.com.ua
    echo "trying google.com.ua" >> /home/jona/test.log
fi
if [ ! -r index.html ]
    then
        /etc/init.d/xl2tpd restart
        date >> /home/jona/restart.log
fi
exit 0



Читати далі...

вівторок, 23 березня 2010 р.

Такой интересный CRON

Понадобилось мне как-то добавить в систему скрипт, который проверял наличие xl2tpd-соединения, поскольку у моего "любимого" провайдера оно периодически "залипает". Скрипт-то я написал, но... возник вопрос, как заставить систему выполнять его каждых 5 минут. Google мне помог. Наш ответ - CRON.


Согласно Вики, cron — это демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в заданное время. Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноименная программа crontab, позволяющая не прерывать процесс на время редактирования.

Вот

Как и сказано в Вики, запускаем

$ crontab -e

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

Далее нам предлагается ввести свою новую задачу

Синтаксис файла такой:

* * * * * команда на исполнение
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье=0 or 7)
| | | ------- Месяц (1 - 12)
| | --------- День месяца (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)


Здесь, в принципе, все должно быть понятно

* - любое возможное значение
*/5 - каждых 5 минут (часов, дней, месяцев)
1,2,3 - запятая имеет значение "или"
9-17 - любое значение из промежутка

Вот и вся премудрость


Читати далі...

середа, 3 лютого 2010 р.

Может описание поменять? :)

Благодаря Google вспомнил, что у меня есть блог. Зашел, посмотрел, а в нем последнее сообщение еще 2007-ым годом датировано. Да... давненько я тут не появлялся. В описании висит информация о том, что блог о моем опыте работы с Debian, хотя уже давным давно у меня везде установлена Ubuntu.
Поскольку появилось много мыслей и информации, которой можно поделиться и желание сделать это, то пожалуй буду выводить блог из коматоза. Теперь он будет об Ubuntu, Linux и разнообразном опыте использования этих систем и их администрирования.
В общем, с Богом!
Читати далі...

четвер, 8 листопада 2007 р.

Легкий и красивый десктопчик (fluxbox+xcompmgr)

Признаться честно, у меня было довольно сильное предубеждение относительно всяческих рюшечек на десктопе: тени, полупрозрачность и прочее. Тем более, что на рабочем столе у меня Fluxbox, а у него своей прозрачности нет (есть правда псевдопрозрачность, но это штука гадкая). Однако, путешествуя по различным блогам наткнулся на интересную весч - xcompmgr. Автор использовал ее вместе с transset, однако, как выяснилось в последствии, он мне не пригодился. На работе выдалось свободный часик, и я решил попробовать...

Как оказалось, в репозитариях Debian Lenny этого пакета не оказалось, однако же он нашелся в ветке Experimental. Опасаясь неприятностей с неудовлетворенными зависимостями и прочих трудностей, решил собрать этот пакет из исходников в своем окружении.

1. Насторойка apt-get

В список репозитариев /etc/apt/sources.list добавляем строчку:
deb-src [WWW] http://ftp.debian.org/debian experimental main contrib non-free

После этого:

#apt-get update

Будем считать систему готовой к дальнейшим действиям

2. Получение и распаковка исходников:

$apt-get source package

В нашем случае package=xcompmgr поэтому делаем

$apt-get source xcompmgr
Читання переліків пакетів... Виконано
Побудова дерева залежностей
Reading state information... Виконано
Потрібно завантажити 72,5kB архівів з вихідними текстами.
Отр:1 http://ftp.debian.org experimental/main xcompmgr 1.1.1+cvs.20051218-1 (dsc) [844B]
Отр:2 http://ftp.debian.org experimental/main xcompmgr 1.1.1+cvs.20051218-1 (tar) [70,2kB]
Отр:3 http://ftp.debian.org experimental/main xcompmgr 1.1.1+cvs.20051218-1 (diff) [1470B]
Отримано 72,5kB за 2sB (35,9kB/s)
gpg: Signature made пн, 19-гру-2005 04:57:34 +0200 EET using DSA key ID 37155778
gpg: Can't check signature: public key not found
dpkg-source: extracting xcompmgr in xcompmgr-1.1.1+cvs.20051218
dpkg-source: unpacking xcompmgr_1.1.1+cvs.20051218.orig.tar.gz
dpkg-source: applying ./xcompmgr_1.1.1+cvs.20051218-1.diff.gz


Ну вот, все получили, хотя были предупреждения о том, что не найден public key, ну да это не критично.

3. Зависимости для сборки:

Это может оказаться как самый простой вопрос, так и самый сложный. Ситуация состоит в следующем. Майнтенер пакета, как правило является человеком хорошо разбирающимся во внутреннем устройстве Debian поэтому майнтенеры зачастую раньше других переходят на использование testing/unstable веток. Кроме того аплоад пакетов в Debian происходит прежде всего в unstable, а потому во первых: майнтенер часто оттестировал сборку своего пакета только под testing/unstable, а во вторых прописал Build-зависимости на те версии библиотек которые у него были на момент сборки. Довольно редко авторы программ указывают версионные зависимости для своих детищ, а потому такое поведение майнтенера, зачастую, является наиболее логичным. Выяснять с какой версией той или иной библиотеки перестанет собираться программа занимает много времени и сил, а зачастую и не очень нужно.

4. Установка зависимостей:

Делаем

# apt-get build-dep xcompmgr

Тут возможны два варианта:
1 - все получилось с первого раза. Мы облегченно вздыхаем, создаем .deb-пакет и радуемся.
2 - есть неудовлетворенные зависимости. Тогда придется еще немного поплясать.

Есть разные варианты решения этой проблемы, но 100% результат дает метод - проверить, каких пакетов не хватает, и рекурсивно, по этому же руководству их установить. Как правило их перечень не настолько большой чтобы испугать настойчивого человека.

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

5. Сборка пакета:

Переходим в каталог с распакованными исходниками и набираем:

$ fakeroot ./debian/rules binary

В результате в родительском каталоге будет собран .deb-пакет, ради которого все и затеивалось. В нашем случае это xcompmgr

Ну а дальше просто:

#dpkg -i xcompmgr_1.1.1+cvs.20051218-1_i386.deb

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

Для этого в консоли набираем:

$xcompgr &

И тут возникает вопрос: "Почему ничего не происходит?.."
А все дело в том, что мы забыли включить необходимые опции в файле /etc/X11/xorg.conf :)

Идем в xorg.conf и добавляем туда такой раздел:

Section "Extensions"
Option "Composite" "Enable"
Option "RENDER" "Enable"
EndSection


Пробуем еще раз:

$xcompgr &

Это добавит нам прозрачности. Чтобы установить прозрачность окошка, кликаем правой кнопкой мыши на заголовке интересующего нас окошка и мышкой устанавливаем значения прозрачности. Левая кнопка - уменьшить, Правая - увеличить. Потом желательно пойти в раздел: Запомнить, и значения прозрачности запомнить, поставив галочку напротив пункта Прозрачность.

Если хочется теней вокруг окошек, то делаем так:
$xcompmgr -c &

А если хочется еще и эффекта затухания, тогда делаем так:
$xcompmgr -cf &

Для того чтобы эта радость сопровождала нас каждый сеанс работы за компьютером, идем в ~/.fluxbox/startup и дописываем туда xcompmgr -c & перед exec /usr/bin/fluxbox
Вот что у нас получилось...






Статья о том, как устанавливать пакеты из unstable и experimental лежит здесь
А вот здесь я взял саму идею. Спасибо авторам.


Читати далі...

вівторок, 23 жовтня 2007 р.

Поднимаем сервер для небольшого оффиса (DHCP, IpTables, NAT, PPTP, Samba...)

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

Нужно сказать, что оффис тот не блистал компьютерной оснащенностью. Было несколько компов, напрямую подключенных к провайдеру, чтобы интернет доставать, вот и все, что там было. Почесав репу, я понял, сделаем все как у белых людей. Поставим серверок, на который подвесим все компы, всем раздадим инернет, всех осчастливим... ну и заодно поднимем VPN (Virtual Private Network) между оффисами. Вот и все будут счастливы.

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

Первым делом я позвонил провайдеру и попросил, чтобы нам выделили 1 (один, а больше нам и не надо:) ) белый IP-адресс, который можно будет видеть снаружи. Пров сказал "есть! бу сде!" и всего лишь через 3 дня прислал письмецо с уведомлением о том, что IP-шник присовоен а также адресс гейта, за которым нас спрятали.

Тем временем, я пошел в кладовочку и начал рыться в железках. Нашел там машинку, не шибко новую, но и не совсем уж старую. Так, рабочий такой компьютер с винтом сороковкой, с 256 Мб ОЗУ и встроеной сетевухой. Ну, большего мне пожалуй и не нужно. В соседнем ящике нашел еще одну сетевуху, которую удачно воткнул в подходящий разъем и приступил к установке GNU/Linux Debian Etch 4.0.

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

И вот, ситема установленна. Первым делом я бы рекомендовал установить пакет sudo, хотя в принципе можете работать и как root, однако это не кошерно :)

Если все же решили поставить, то после этого добавьте себя в /etc/sudoers:
root ALL=(ALL) ALL
sys-admin ALL=(ALL) ALL


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

(Советую также сразу установить mc и vim для удобства дальнейшей работы с системой)

Пришло время настроить сетевые интерфейсы нашей системы:
Пусть eth0 смотрит внутрь сети, а eth1 во внешний мир тогда файл /etc/network/interfaces будет иметь такой вид:

auto lo
iface lo inet loopback

auto eth0 eth1

iface eth1 inet static
address x.x.x.x
netmask 255.255.255.y
gateway x.x.x.z

iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0


Где x.x.x.x - внешний ip, который вам выдал провайдер, ну и соответственно остальные параметры: маска подсети и гейт за которым вы сидите.

Не забудьте подправить файл /etc/resolv.conf и ввести туда данные о днс-серверах, которые дал вам провайдер.

Теперь, пожалуй нужно поставить все, что необходимо для сервера:

1. sudo apt-get install dhcp3-server dhcp3-client
2. sudo apt-get install samba samba-client smbfs smbclient
3. sudo apt-get install pptp-linux pptpd ppp


Это пока все, что нам понадобится на первое время

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

1. DHCP(Dynamic Host Configuration Protocol) - этот сервер будет динамически раздавать сетевые адреса всем клиентам подключенным к нему. Любимый Debian все сделает сам, все, что потребуется от вас - указать как это сделать в единственном конфигурационном файле - /etc/dhcp3/dhcpd.conf:

option domain-name-servers a.a.a.a, b.b.b.b; # DNS-сервера, которые вам выдал пров.
default-lease-time 7200;
max-lease-time 10800;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.150; # Диапазон выдаваемых адресов}


Теперь DHCP-сервер будет выдавать всем клиентам адреса с 192.168.1.50 по 192.168.1.150, а также давать информацию о DNS-серверах автоматически.

2. Samba - на сервере мы заведем общую папочку, в которую все клиенты смогут записывать/читать информацию.
Для этого создаем папочку storage, в которую будем складывать всю общую информацию, а далее правим файл /etc/samba/smb.conf:

[global]
workgroup = Office
server string = %h server
security = SHARE
obey pam restrictions = Yes
passdb backend = tdbsam passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
dns proxy = No
panic action = /usr/share/samba/panic-action %d
invalid users = root

[homes]
comment = Home Directories
valid users = %S
create mask = 0700
directory mask = 0700
browseable = No

[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers

[public]
comment = Central Storage on Server
path = /home/admin/storage
read only = No
guest only = Yes
guest ok = Yes


Так мы расшарили папку storage для всех. При желании можете поиграться с правами доступа, тогда нужно будет сменить security=share на security=user, и завести всех пользователей, ну и в общем... man smb.conf :)

3. VPN-сервер. Он будет обеспечивать связь между офисом и удаленными клиентами, шифровать и компрессировать передаваемую информацию.

Есть несколько вариантов организации виртуальной частной сети (OpenVPN, Free SWAN и т.д.), но мы воспользуемся самым простым и унивресальным средством - PoPToP

В принципе можем поднимать его и так, но тогда пакеты не будут ни шифроваться, ни сжиматься. Вернее будут, но если вы хотите, чтобы к серверу подсоединялся Windows-клиент и при этом выполнялось шифрование и компрессия, то обязательно нужно, чтобы в ядро подргружался модуль ppp_mppe_mppc (MPPE и MPPC). В ядра начиная с 2.6.15 включен модуль ppp_mppe по умолчанию. Это шифрование, но без компрессии. Лично мне так и не удалось завести соединение с этим модулем, поэтому пришлось пересобирать ядро (у меня 2.6.18) патч для ядра можно взять здесь (кстати присутствуют также и для ядер 2.6.16-2.6.19). Пересобираем ядро (о сборке ядер можете почитать здесь и здесь), предварительно наложив на него этот патч, и после пары часов ожидания занимаемся правкой конфигурационных файлов.

a) /etc/pptpd.conf:

ppp /usr/sbin/pppd
option /etc/ppp/options.pptpd #Файл настроек для pppd
debug
logwtmp
localip 192.168.1.1 #IP который получит ваш сервер, когда соединится с удаленным клиентом
remoteip 192.168.1.2-20 #Диапазон адрессов, которые будут выдаваться клиентам, подсоединившимся к серверу


b) /etc/ppp/options.pptpd:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2 #соединемся только по протоколу mschap-v2 (необходим для MPPE)
require-mppe
require-mppe-128 #включаем MPPE-MPPC с 128 битным ключем шифрования
proxyarp
lock
nobsdcomp
novj
novjccomp


Детальней об этих опциях можете почитать в man pppd

В файл /etc/init.d/pptpd в раздел, там где говорится о старте дописываем такие строчки:
modprobe ppp_mppe_mppc
modprobe ppp_deflate
modprobe ppp_async


В принципе, могу привести и весь файл:
#!/bin/sh
# Copyright Rene Mayrhofer, Gibraltar, 1999
# This script is distibuted under the GPL

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/pptpd
PIDFILE=/var/run/pptpd.pid
FLAGS="defaults 50"

case "$1" in
start)
echo -n "Starting PPTP Daemon: "
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
-- < /dev/null > /dev/null
modprobe ppp_mppe_mppc
modprobe ppp_deflate
modprobe ppp_async

echo "pptpd."
;;
stop)
echo -n "Stopping PPTP: "
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
echo "pptpd."
;;
force-reload|restart)
echo "Restarting PPTP: "
sh $0 stop
sh $0 start
;;
status)
if [ ! -r $PIDFILE ]; then
# no pid file, process doesn't seem to be running correctly
exit 3
fi
PID=`cat $PIDFILE | sed 's/ //g'`
EXE=/proc/$PID/exe
if [ -x "$EXE" ] &&
[ "`ls -l \"$EXE\" | cut -d'>' -f2,2 | cut -d' ' -f2,2`" = \
"$DAEMON" ]; then
# ok, process seems to be running
exit 0
elif [ -r $PIDFILE ]; then
# process not running, but pidfile exists
exit 1
else
# no lock file to check for, so simply return the stopped status
exit 3
fi
;;
*)
echo "Usage: /etc/init.d/pptpd {start|stop|restart|force-reload}"
exit 1
;;
esac

exit 0



Теперь пожалуй пришло время для скриптов IpTables и NAT
Признаться честно я в этом не очень силен (я не волшебник, я только учусь :) ), поэтому воспользовался скриптом, созданном другими людьми, только немного его подправил, чтобы он работал с pptpd.
Скрипт взял здесь, спасибо господам Tsyma и Acid_Jack.

Ну а вот с моими изменениями:


$ cat /etc/init.d/masq
#! /bin/sh
#
# skeleton Example initscript
# This file should be used to construct scripts to be
# placed in /etc/init.d.
#
# Author: Miquel van Smoorenburg .
# Ian Murdock .
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
#
# Version: @(#)skeleton 2.85-23 28-Jul-2004 miquels@cistron.nl
#

#####################################################################################################################
EXTIF_LIST="eth1"
INTIF="eth0"
#PORT_LIST="80 8080" # redirect to 3128
MOD_LIST="ip_nat_pptp ip_tables ip_conntrack ip_conntrack ip_conntrack_ftp ip_conntrack_irc iptable_nat ip_nat_ftp ip_nat_irc"
#####################################################################################################################


set -e


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="MASQ daemon"
NAME=masq
DAEMON='/etc/ln/$NAME'
STOP="iptables -F"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

IPTABLES=/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe



#echo $DAEMON
# Gracefully exit if the package has been removed.
#test -x $DAEMON || exit 0
# echo "ssssss"
# Read config file if it is present.
#if [ -r /etc/default/$NAME ]
#then
# . /etc/default/$NAME
#fi

#
# Function that starts the daemon/service.
#
d_start()
{
echo
echo "LOADING $DESC"
echo
echo " External Interface(s): $EXTIF_LIST"
echo " Internal Interface : $INTIF"
echo

echo " ---[KERNEL MODULES]------------------------------------"
for MOD in $MOD_LIST; do
echo -en " * loading kernel module :\t $MOD ... \t"
$MODPROBE $MOD
echo "OK"
done
echo " -------------------------------------------------------"

echo -en " Enabling forwarding ..."
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "OK"

# Dynamic IP users:
#
# If you get your IP address dynamically from SLIP, PPP, or DHCP,
# enable this following option. This enables dynamic-address hacking
# which makes the life with Diald and similar programs much easier.
#
echo -en " Enabling DynamicAddr..."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "OK"
echo

# Enable simple IP forwarding and Masquerading
#
# NOTE: In IPTABLES speak, IP Masquerading is a form of SourceNAT or SNAT.
#
# NOTE #2: The following is an example for an internal LAN address in the
# 192.168.0.x network with a 255.255.255.0 or a "24" bit subnet mask
# connecting to the Internet on external interface "eth0". This
# example will MASQ internal traffic out to the Internet but not
# allow non-initiated traffic into your internal network.
#
#
# ** Please change the above network numbers, subnet mask, and your
# *** Internet connection interface name to match your setup
#


#Clearing any previous configuration
#
# Unless specified, the defaults for INPUT and OUTPUT is ACCEPT
# The default for FORWARD is DROP (REJECT is not a valid policy)
#


echo
echo -n " Clearing any existing rules and setting default policy.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
echo OK
echo


for EXTIF in $EXTIF_LIST; do
echo -en " $EXTIF | Allow FORWARD [$EXTIF=>$INTIF]: "
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
echo -n "OK, "
echo -en "[$INTIF => $EXTIF]:"
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -p gre -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -p tcp -m tcp --dport 1723 -j ACCEPT
echo -n "OK | "
echo -en "MASQUERADE: "
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
echo "OK."
done


echo -e "\n ports redirect : "
for PORT in $PORT_LIST; do
echo -e -n " * REIRECT $INTIF:$PORT\t=> lo:3128\n";
$IPTABLES -t nat -A PREROUTING -i $INTIF -p tcp --dport $PORT -j REDIRECT --to-port 3128
done


echo "done."

# -- BEGIN OF BLOCK ADDED BY ACID JACK --


}
#
# Function that stops the daemon/service.
#
d_stop() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -F
$IPTABLES -t nat -F
for EXTIF in $EXTIF_LIST; do
echo -n " $EXTIF "
done
}

# Function that sends a SIGHUP to the daemon/service.

case "$1" in
start)
echo -n "Starting $DESC: $NAME ::: "
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME ::: "
d_stop
echo "."
;;
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this an "exit 0".
#
# echo -n "Reloading $DESC configuration..."
# d_reload
# echo "done."
#;;
reload|restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac


exit 0



Читати далі...

вівторок, 28 серпня 2007 р.

Делаем красивыми XTerm и mc

Думаю, у большинства людей первой ассоциацией к слову "Linux" будет слово "Консоль". И это не удивительно. Большинство действий по настройке и повседневному использованию этой ОС выполняется именно в консоли. Благо, терминалов для работы с ней хватает. Начиная от стандартных Konsole и Gnome-terminal, Quake-подобных yakuake и tilda, и заканчивая классическим XTerm.
Чем пользоваться - ваш выбор. Лично я остановился на той самой классике - XTerm. Почему? Потому что в нем есть все, что мне нужно. А такой недостаток, как отсутствие вкладок (tabs), компенсируется использованием в качестве оконного менеджера fluxbox, который позволяет обьединять в одном окне несколько копий одного и того же приложения (как в Firefox, одно окно и в нем куча вкладок).
Остается одна несущественная, но неприятная деталь... дело в том, что при запуске с настройками по-умолчанию XTerm имеет довольно таки убогий вид. Вот о том, чтобы его причесать и поговорим далее.

Все настройки XTerm хранятся в файле XTerm в вашей домашней папке. Заметьте, это не скрытый файл, не ".XTerm", а именно "XTerm". Если его у вас нет, то создайте. Далее, лично мне нравиться терминал с черным фоном и зеленым шрифтом, но это - на ваше личное усмотрение. Формат файла интуитивно понятен, я просто приведу здесь пример своего:

XTerm*rightScrollBar: True
XTerm*scrollBar: True
XTerm*saveLines: 1000
XTerm*font: -*-terminus-medium-r-normal-*-14-*-*-*-*-*-iso10646-1
XTerm*boldFont: -*-terminus-medium-r-normal-*-14-*-*-*-*-*-iso10646-1
XTerm*foreground: green
XTerm*cursorColor: grey
XTerm*background: black
XTerm*geometry: 105x35


Ну и вот расшифровка каждой строчки:
1. и 2. ScrollBar поместить справа и включить его использование
3. Запоминать 1000 строк текста
4. и 5. Используемые в терминале шрифты
6., 7. и 8. Цвета соответственно шрифта, курсора и фона
9. Размеры (строк x колонок)

Вот такой это имеет вид:






Ну и в довесок, секция [Colors] для mc (Midnight Commander):
Файл: ~/.mc/ini
[Colors]
base_color=normal=brightgray,default:marked=yellow,default:directory=green,default:marked=yellow,
default:errors=red,default:marked=yellow,default:executable=brightgreen,default:marked=yellow,
default:link=brightblue,default:marked=yellow,default:device=brightmagenta,default:marked=yellow


Выглядит это вот так:






Читати далі...