20080921

ssh туннель — по-простому

что-то уж очень сложные и заумные руководства попадаются, когда ищешь, как создать туннель с помощью ssh.
ya@inner.host:~$ ssh -f -N -R 2345:inner.host:22 user@outer.host
процесс будет висеть в бэкграунде. можно разлогиниваться. главное, машину не выключать.
пользоваться так:
user@outer.host:~$ ssh -p 2345 ya@localhost
ya@localhost's password: — вбиваем пароль для ya@inner.host и попадаем на inner.host
все. вот и вся инструкция. дальше — лишь пояснения и дополнения.

смысл обозначений:
inner.host — машина за nat-ом
ya — ваша учетка на этом inner.host-е.
outer.host — машина, имеющая внешний ip
user — ваша учетка на этом outer.host-е.

p.s. кусочек «inner.host:22» — это способ достучаться до собственного sshd непосредственно с inner.host-а. если sshd слушает на порту 1000 — «inner.host:1000».
кусочек «inner.host:22» вполне можно заменить и на «localhost:22», и на «127.0.0.1:22».

p.p.s. на машине inner.host можно поставить «сторожа», присматривающего за процессом ssh. это потребует настройки беспарольной аутентификации (описана в сети многократно, поэтому опускаю).
ya@inner.host:~$ crontab -e
и добавляем пару строк:
C='ssh -f -N -R 2345:inner.host:22 user@outer.host'
*/10 * * * * pgrep -f "$C" &>/dev/null || $C
проверка на «живость» будет происходить каждые 10 минут.

20080821

позиционирование окна rdesktop в xmonad.

недавно поставил «на попробовать»
патч на rdesktop:
--- rdesktop-1.6.0/xwin.c       2008-05-11 10:14:38.000000000 +0400
+++ rdesktop-1.6.0.xmonad/xwin.c 2008-08-20 17:03:43.000000000 +0400
@@ -2052,11 +2052,11 @@
sizehints = XAllocSizeHints();
if (sizehints)
{
- sizehints->flags = PMinSize | PMaxSize;
+ sizehints->flags = PMinSize;
if (g_pos)
sizehints->flags |= PPosition;
- sizehints->min_width = sizehints->max_width = g_width;
- sizehints->min_height = sizehints->max_height = g_height;
+ sizehints->min_width = g_width;
+ sizehints->min_height = g_height;
XSetWMNormalHints(g_display, g_wnd, sizehints);
XFree(sizehints);
}
@@ -2118,9 +2118,9 @@
sizehints = XAllocSizeHints();
if (sizehints)
{
- sizehints->flags = PMinSize | PMaxSize;
- sizehints->min_width = sizehints->max_width = g_width;
- sizehints->min_height = sizehints->max_height = g_height;
+ sizehints->flags = PMinSize;
+ sizehints->min_width = g_width;
+ sizehints->min_height = g_height;
XSetWMNormalHints(g_display, g_wnd, sizehints);
XFree(sizehints);
}

смысл — не указывать в свойствах окна максимальные размеры, из-за наличия которых xmonad не решается по-нормальному окно спозиционировать.

20080820

virtualbox, не привязанный к X-сессии

понадобилось мне, чтобы vm, запущенная в virtualbox-е, не была привязана к x-сессии.
т.е., чтоб я спокойно мог иксы вырубать, а vm работала бы как ни в чем не бывало.
есть такая возможность.
VBoxHeadless -s <имя vm> >&/dev/null &
потом к ней можно коннектиться по протоколу rdp(например, rdesktop-ом). хоть с локальной машины, хоть удаленно.
вот только то ли чего-то там ребята не додумали (разработчики или майнтайнеры пакета), то ли это специфично для гостевой vm с windows(других в данный момент нет, не проверял), но...
вырубается, собака, когда завершаю X-сессию.
быстренько созрел план эксперимента. эксперимент проведен. результат его оказался успешным. вот так надо запускать машину:
DISPLAY= VBoxHeadless -s <имя vm> >&/dev/null &
смысл — передача пустой переменной окружения DISPLAY. и будет вам счастье.
а какие мелкие/крупные грабли вам удалось победить/обойти при общении с virtualbox-ом?

20080809

меняется все…

и даже дизайн на http://sourceforge.net
ничего так, освежились немножко.

20080808

less в длинном конфигурационном файле

в /etc порою встречаются просто безразмерные файлы конфигурации.
большая часть строк — это просто комментарии.
чтобы сделать виднее незакомментированные строки, пришла в голову такая вот простенькая поисковая строка:
^[^#].*

подсвечивается все содержимое незакомментированных строк. естественно, работают и
n
и
shift+n

20080806

mysql command-line tool в mandriva

вот почему completion в mysql в mandriva не работает:
$ grep -B 1 rehash /etc/my.cnf
[mysql]
no-auto-rehash

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

20080730

shell from here

вот уж не думал, что придется еще когда-нибудь запускать windows. однако, пришлось...
чтобы не разыскивать каждый раз это решение, запишу-ка его здесь:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Prompt]
@="shell"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Prompt\command]
@="cmd.exe /k pushd %1"

это содержимое <файл с произвольным именем>.reg.
добавляет в контекстное меню каталога пункт "shell" (shell from here).

20080706

delphi form (dfm) со строками на русском

портирую сейчас в lazarus под linux приложение, написанное в delphi под windows.
в дельфийских формах (файлы с суффиксом dfm) надписи на русском представлены в таком примерно виде:
Caption = #1055#1086#1080#1089#1082
что не очень-то удобочитаемо.
для чего набросал скриптик на perl-е:
#!/usr/bin/perl -w
use Text::Iconv;
$conv=Text::Iconv->new("ucs-2be","utf-8");
sub aaa{
$a=$_[0];
$b=$a%256;
$c=($a-$b)/256;
return $conv->convert(chr($c).chr($b));
};
while (<>) {
s/((?:#\d{4})+)/"$1"/g;
s/#(\d{4})/aaa($1)/eg;
print
}
использовать его можно и просто как фильтр, и как самостоятельный обработчик файла:
cat файл.dfm | скрипт.pl | less
скрипт.pl файл.dfm | less
если Вам нужен результат не в utf-8 - подправьте соответствующую строчку. подходит все, что понимает iconv.

20080703

хитрое использование команды tee.

linux-администраторам (да и простым пользователям) временами (а иногда и частенько) приходится использовать конструкции такого типа:
$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

есть способ (не мной, конечно же, открытый) слегка сократить и упростить подобное:
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward


p.s. заметку пишу исключительно для памяти. все это уже неоднократно советовалось в разных местах. даже, например, в википедии.

pmtu, mss и иже с ними. это когда часть сайтов не грузится.

тоже вот столкнулся с проблемой, когда некоторые сайты просто не грузятся.
у меня в данный момент adsl-подключение. питерский провайдер avangard.
размер mtu равен 1500 минус 8 байт на pppoe-заголовок, т.е. 1492 байта.
изменение mtu на интерфейсе ни к чему полезному не привело.
начитавшись примеров отсюда, решил поэкспериментировать с таблицей маршрутизации.
$ sudo ip route replace default via <шлюз> dev <интерфейс> window 1452

1452 - практически с потолка. просто вычел из 1492 еще 40 байт (размер стандартного tcp+ip заголовка, емнип).
отчасти помогло. кое-что начало загружаться.
дальше, видимо, можно продолжить в сторону других параметров - mtu lock, advmss, cwnd, initcwnd.
но это уже как-нибудь в другой раз.

20080404

exim. памятка.

памятка самому себе. да и кому другому может пригодиться.
наиболее часто используемые команды exim-у.
$ sudo exim -bp
посмотреть содержимое почтовой очереди. интерес представляют, конечно же, замороженные (frozen) письма.
$ sudo exim -bp | grep '\* frozen \*' | awk '{print $3}' | \
xargs -L 50 sudo exim -Mrm
снести все замороженные.
даже если их очень много — команда отработает нормально. будет обрабатываться по пятьдесят писем в один присест.
$ sudo exim -qff
перезапустить обработку всех писем в очереди. даже замороженных.

а какие другие хитрые команды для exim-а имеются в ваших пороховницах?

20080307

береги честь смолоду…

… а мозги начинай промывать с детства.
оригинал, русский вариант.
видимо, взрослые воспитывались «неправильно». пора браться за неокрепшие детские умы.
чтобы, подрастая, дети не «оболванивались» «пиратскими» cd.
даже несмотря на то, что и специально тренированные

«… собаки … к сожалению, … не могут определить, какие из них пиратские, а какие выпущены легально.»

20080228

aptgetupd.exe


страшный баян, но мне понравилось название файла:
«…незаметно для пользователя загружается специальный файл, который
"дотаскивает" с удаленного веб-узла непосредственно файл-носитель
"Bizex" (APTGETUPD.EXE)…» http://www.kompunet.com/kompunet/view.php?nid=194

земля-то, оказывается, совсем маленькая.

по призыву зарегистировался на http://www.verveearth.com/landing/. действительно, забавно. надеюсь, даже сможет быть полезным.
в любом случае, наверно, как ничто другое, позволяет на минуту ощутить себя жителем планеты земля.

20080227

свободное п.о. — это всего лишь бесплодный бунт.

«свободное п.о. — это всего лишь бесплодный бунт». так, мне кажется, следует перевести заголовок интервью с автором идеи игры тетрис Алексеем Леонидовичем Пажитновым. краткий русский перевод интервью.
«el software libre destruye mercado», свободное п.о. разрушает рынок (п.о.), говорит Алексей. спешу с ним согласиться. тот рынок, для которого Алексей проработал бо́льшую часть жизни, точнее, та бизнес-модель, которая на этом рынке приносила наибольшую прибыль, разрушается.
что будет дальше?
в попытках защитить копии принадлежащего им п.о., правообладатели поощряют процветание «пиратства». логичным шагом в их «борьбе» стал бы отказ от copyright-а как такового. но… судя по последним новостям, логика нынче не в моде. тем более, что следование ей, естественно, приведет к потере гипер-прибыльности. поэтому пока идет игра в популизм (Adobe демонстрирует приверженность идеям open source, Microsoft официально открыла форматы офисных документов, и т.д. и т.п.)

20080226

воинские части, одноклассники и информационный мусор.

вот такую заметку прочитал. как замечательно, что на своей страничке в одноклассниках я не упомянул ни одной воинской части! шпионы ¡No pasarán!

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

20080225

debian и pamusb аутентификация

навеяно этой заметкой
делал по инструкции
скачал по ссылке последний релиз.
как полагается, распаковал его в /usr/src/
со сборкой deb-пакета решил не заморачиваться, установить «по-грязному».
посмотрев на ошибки в выводе make, сделал вывод, что не хватает libhal-storage-dev.
с этим пакетом все замечательно собралось и установилось.
добавил флэшку:
$ sudo pamusb-conf --add-device MojaFleshka
добавил себя, привязав к уже описанной флэшке:
$ sudo pamusb-conf --add-user $USER

проверил. вроде как работает. дальше начинается рихтовка.

во-первых, жутко не понравилось, что флэшка автоматически монтируется после вставки (не люблю я этих автомаунтов). и, главное, так и висит смонтированной. что, как понимаете, чревато…
после некоторых разбирательств добавил в секцию <configuration> файла /etc/pamusb.conf строчку <option name="one_time_pad">false</option>.
стало, конечно, менее секурно — не проверяется ключ, записанный на флэшке в каталог .pamusb/ (когда я делал --add-device). ну, думаю, производителя, модели и идентификатора флэшки будет достаточно. чай не в кгб работаю.

во-вторых, захотелось воспользоваться pamusb-agent-ом. чтоб при вытаскивании флэшки экран блокировался, при вставке — соответственно, блокировка снималась.
началось с того, что агент при запуске ругался на отсутствие описания elementtree.ElementTree.
небольшое гугление и чесание в затылке (освоение python-а пока только в планах) натолкнуло на мысль поставить пакет python-elementtree. помогло.
в примере приводится использование gnome-screensaver-command. у меня таковая отсутствует, в любимом icewm-е пользуюсь классическим xlock. вот его-то вызов и решил прикручивать.
в секции <user>, относящейся ко мне, добавил строчки:
<agent event="lock">xlock -mode blank</agent>
<agent event="unlock">killall xlock</agent>
killall-ом пришлось воспользоваться потому, что не нашел у xlock ничего подобного параметру unlock.
проверяю — не работает. включаться заставка-то включается, а вот выключаться не хочет.
опять серия экспериментов. оказалось, что агент ожидает, что команда, закрепленная за событием lock, вернет управление обратно. а xlock этого, к сожалению, не делает. и жутко ругается на &, который я попробовал дописать в конец команды. ну что ж, быстренько накатал в ~/bin/ файлик следующего содержимого:
#!/bin/bash
xlock -mode blank &
и заменил вызов xlock-а на вызов этого скриптика.
уря. заработало.
последний штирх — добавил строчку
pamusb-agent --daemon &>/dev/null
в ~/.icewm/startup. чтоб при загрузке сеанса агент сразу стартовал.

p.s. сразу выявился один минус — я частенько отхожу от компьютера и столь же частое дергание флэшки не есть хорошо. пора разживаться bluetooth-адаптером и, воспользовавшись BlueProximity, задействовать неиспользуемый пока bluetooth в мобилке.