Computer Science rap at Stanford
вторник, 31 марта 2009 г.
Kill dash nine (к 1 апреля :-))
Computer Science rap at Stanford
Как распаковать многотомный архив rar в Linux
unrar имя_последнего_файла_архива
В некоторых версиях unrar нужно указать параметр e для распаковки.
unrar e имя_последнего_файла_архива
Как видим, элементарно :-)). Так что этот пост просто для поисковиков, чтобы следующим, нуждающимся в разархивации, было легче искать.
понедельник, 30 марта 2009 г.
Как сделать бекап системы на лету
На самом деле, все просто. Достаточно взглянуть на команды. Вот backup с помощью dump/restore:
ssh alexey@192.168.0.1 'sudo dump -af- /dev/hda2' | dd of=hda.dump
Восстанавливается потом командой:
restore -rf hda.dump
А вот сразу с восстановлением:
ssh alexey@192.168.0.1 'sudo dump -af- /dev/hda2' | restore -rf-
а это с помощью dd:
ssh alexey@192.168.0.1 'sudo dd if=/dev/hda2' | dd of=backup.img
среда, 25 марта 2009 г.
Как работать с образами файловых систем
Как сделать образ CD
Делается это одной командой dd:
dd if=/dev/scd0 of=my_image.img
где /dev/scd0 - это наш cd-rom, my_image.img - файл образа.
Чтобы дело пошло быстрее, можно увеличить размер блока данных, например, до 16-ти килобайт:
dd if=/dev/scd0 of=my_image.img bs=16k
Естественно, вместо cd-rom'а может быть любое дисковое устройство. Да и вообще, образ и дисковое устройство могут поменяться местами, например, если мы восстанавливаем информацию из образа на диск:
dd if=my_image.img of=/dev/sdb bs=16K
Отлично, образ готов. Что с ним делать дальше?
Как монтировать образ
если дело в Linux:
losetup /dev/loop0 my_image.img
появится устройство /dev/loop0
если во FreeBSD:
mdconfig -a -t vnode -f my_image.img
появится устройство /dev/md0 или вроде того.
Далее можно производить монтирование:
mount /dev/loop0 /mnt/
По окончании работы с образом нужно отмонтировать его и снять ассоциацию.
в Linux:
umount /mnt
losetup -d /dev/loop0
во FreeBSD:
umount /mnt
mdconfig -d -u 0 #для md0
Как создать образ диска с нуля
Например, нужно создать образ ФС размером ~512 Мб с файловой системой ext3.
# Создадим файл образа, count отвечает за количество блоков
root@till:~/TMP# dd if=/dev/zero of=my_image.img bs=1k count=512000
512000+0 records in
512000+0 records out
524288000 bytes (524 MB) copied, 18,6485 s, 28,1 MB/s
# Создадим ассоциацию
root@till:~/TMP# losetup /dev/loop0 my_image.img
# Создадим файловую систему, тут нам помогут fdisk и mkfs
root@till:~/TMP# fdisk /dev/loop0
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x58bbc7e9.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-63, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-63, default 63): +512M
Value out of range.
# Не угадал с размером :-)
Last cylinder, +cylinders or +size{K,M,G} (1-63, default 63): +500M
Value out of range.
# Опять не угадал
Last cylinder, +cylinders or +size{K,M,G} (1-63, default 63): +450M
# Угадал!
# Установим тип фс=Linux (это номер 83)
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
# Запишем изменения и выйдем
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
# Форматируем наш новый виртуальный диск
root@till:~/TMP# mkfs.ext3 /dev/loop0
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# Готово, можно монтировать
root@till:~/TMP# mount /dev/loop0 /mnt/
root@till:~/TMP# ls /mnt
lost+found
root@till:~/TMP#
Примерно так.
понедельник, 23 марта 2009 г.
Терминальный сервер на Linux за полчаса
Вообще LTSP - это Linux Terminal Server Project, т.е. предназначен для организации работы терминального сервера на основе Linux. Клиенты при этом грузятся по сети (PXE), т.е. на серваке связка: dhcp+tftp. Навскидку помню две сетевухи, в которых есть поддержка PXE: Realtek 8139 и Intel eepro100. Кроме бездисковой загрузки может быть загрузка с дискет и т.п. Изначально LTSP включен в дистрибутивы: Ubuntu, k12 и вроде как в федору. В остальных легко устанавливается из репозиториев. Я для тестов выбрал Ubuntu 8.10 (alternate cd). Вся установка сводится к тому, чтобы нажать в самом начале инсталляции F4 и выбрать "LTSP server" в меню, дальше происходит обычная установка убунты, после которой автоматом ставится и настраивается LTSP.
В общем, кому нужно быстро организовать терминальный сервер на линуксе, рекомендую LTSP.
пятница, 20 марта 2009 г.
Как сделать свою базу знаний в Firefox
Воспользуйтесь поиском по плагинам мозиллы и поставьте себе Scrapbook. В Меню-баре появится соответвующий пункт. Далее все просто.
Я люблю вызывать плагин комбинацией клавиш Alt+K. Слева при этом открывается список ваших папок и сохраненных страниц. Чтобы занести нужную web-страницу в базу нужно просто перетащить ссылку из строки адреса, нажимая при этом Ctrl. Появится меню с параметрами сохранения, где можно выбрать глубину ссылок (можно качать целые сайты), название заметки, скачивать ли файлы, которые есть на сайте.
Также к сохраненным страницам можно применять инструменты, имеющиеся в ScrapBook справа внизу: маркеры для выделения текста, примечания, теги, инструменты DOM. На последних остановимся подробнее.
Сайты часто обвешаны боковыми панелями с рекламой, календарями и прочими вещами, которые нам в базе знаний не нужны и которые осложняют печать текста. Так вот с помощью кнопки DOM можно удалять эти элементы с легкостью. Главное, не забыть сохранить изменения. Ниже приведены варианты страницы до и после DOM-обработки.
ДО:
ПОСЛЕ:
Естественно, есть возможность поиска по базе знаний, импорта/экспорта альбомов, упорядочивания структуры и многое другое.
За несколько лет использования на моих десктопах ScrapBook себя отлично зарекомендовал.
четверг, 19 марта 2009 г.
Полезные LiveCD
Нужно удалить файлы, доступ к которым блокируется виндой даже в безопасном режиме? - Пожалуйста, для LiveCD с этой т.з. все файлы одинаковы.
Нужно восстановить данные с дискеты? - dd есть практически в любом дистре.
Нужно восстановить битую таблицу из Excel - Openoffice из той же Kubuntu вам в руки.
Нужно залить образ роутера на CF карту? - опять же dd.
Вирусы? - DrWeb LiveCD отлично с этим справится.
Для медленных компов подойдет облегченный дистрибутив типа PuppyLinux, а лучше всего его русская реализация проекта PuppyRus. Причем, для совсем старых компов лучше брать версию Retro.
В общем, рекомендую. В первую очередь тем, кто просто хочет посмотреть, что такое Linux..
Как обойтись без proxy-сервера
Про то, что есть DynDNS, позволяющий иметь доступ к машинкам с динамически меняющимся публичным IP знают многие. Недавно столкнулся с сервисом OpenDNS. Полезная штука. Позволяет сделать контентную фильтрацию трафика всего лишь прописав вместо провайдерских свои DNS серверы (208.67.222.222, 208.67.220.220). Причем, если на роутере есть DNS forwarder, а он есть почти везде, можно эти DNS прямо на роутере прописывать. Прежде чем начать пользоваться, нужно бесплатно зарегистрироваться на сайте OpenDNS, указать свой IP и что фильтровать. Фильтр очень гибкий, можно отсеивать порно, социальные сети, файлообменники и пр. Можно самому задавать сайты. Если IP динамический, то можно установить программку OpenDNS Updater, берется бесплатно с сайта OpenDNS. Updater периодически сообщает свой адрес, даже из-за NAT'а.
Есть такой же сервис и у Netpolice , но там, если ограничиться только прописыванием DNS-серверов (81.176.72.82б 81.176.72.83), нет настроек, а ограничения очень жесткие. Для большей гибкости нужно ставить спецприложение. Как видно, эти сервисы вполне можно использовать для родительского контроля, NetPolice, собственно, и был создан для отечественных школ.
Со стороны пользователя это выглядит так: пытается зайти на какой-нибудь запрещенный сайт и редиректится на страничку, где сказано, что доступ к сайту закрыт. Список сайтов можно самостоятельно пополнять.
Есть еще сервис DNS-o-Matic, позволяющий автоматом на многих сервисах (OpenDNS, DynDNS, No-IP и пр.) синхронизировать ваш динамический IP.
Напоследок приведу скрин, который отображает возможности фильтра OpenDNS.
среда, 18 марта 2009 г.
Автозапуск приложений в Puppy Linux
Делается это довольно просто. Нужно в файле ~/.xinitrc найти и закомментировать строку:
rox -p /root/Choices/ROX-Filter/PuppyPin
и вместо нее добавить команду запуска нужного приложения.
Если приложение нужно запустить после старта window manager, то можно просто поместить скрипт запуска в директорию /root/Startup. Но тогда возможности пользователя ограничиваться не будут.
Приведенный способ с заменой строчки с rox не всегда выручает, т.к. многие программы любят работать в окружении window manager. Так, например, firefox запускается в одиночестве очень криво. Решением является использование комбинированного метода.
Во-первых комментируется приведенная строчка с rox, но вместо нее ничего не добавляется. Во-вторых скрипт запуска программы (того же firefox) кладется в /root/Startup. А чтобы пользователь был ограничен редактируется конфиг WM, в роли которого по дефолту jwm. Из конфига убираются все ненужные строки, соответствующие пунктам меню. Файлы конфига: ~/.jwmrc и ~/.jwmrc-tray.
Вот примеры таких файлов с ограничениями: .jwmrc и .jwmrc-tray.
вторник, 17 марта 2009 г.
Отправка сообщений в pidgin по ctrl+enter
Таких настроек нет в самом интерфейсе IM клиента, но никто не мешает в домашней директории найти файл с именем вроде ~/.gtkrc-2.0 (обратите внимание, что он скрытый) и прописать в конце него следующее:
binding "my-bindings"
{
bind "Return" { "insert-at-cursor" ("\n") }
bind "<ctrl>Return" { "message_send" () }
}
widget "*pidgin_conv_entry" binding "my-bindings"
Если похожего файла нет, нужно его создать. Все заработает после перезапуска pidgin.
Как подключиться к другому терминалу
Ответом является утилита screen. Screen - это своего рода мультиплексор терминалов, позволяющий одновременную работу в одной сессии. Покажем как его использовать в приведенном выше примере.
Перед началом устанвки создаем сессию:
screen -S first
Запускаем установку и можем ехать домой. Дома же подключившись к нашему серверу по ssh набираем команду:
screen -x first
чтобы подключиться к ранее созданной сессии. Все, теперь мы видим весь процесс установки, запущенный еще на рабочем месте.
Этот метод можно использовать также и для совместной работы в одном терминале.
Бекап КПК из-под Linux
На самом деле, бекап системы на microSD карточку автоматически делается в WindowsMobile программой SpriteBackup, которая шла в комплекте с коммуникатором. Этот бекап производится раз в неделю. До недавних пор этих мер было достаточно, т.к. казалось, что с флешкой-то ничего не случится. Но в один прекрасный день получилось так, что коммуникатор заряжался от ноутбука через USB, а я тем временем перепрошивал CF карту роутера новой версией ПО. В общем перепрошитой в итоге оказалась флешка коммуникатора. Т.о. я стал делать бекап флешки (раз в месяц).
Для доступа к флешке коммуникатора из Linux я использую программу WM5torage, т.к. в моем коммуникаторе нет режима кард-ридера. Т.е. после того, как коммуникатор подключен к компьютеру и запущена WM5torage, microSD видна как обычная флешка. Дальше дело техники. Сам бекап делается с помощью tar, командой вида:
tar -X htc_exclude.txt -cvvf Backup_htc_flash_20090302.tar /media/disk-1/
где htc_exclude.txt - файл исключений, в котором перечислены директории, которые не нужно заносить в бекап, в моем случае файл выглядит так:
alexey@till:~/Backup$ cat htc_exclude.txt
/media/disk-1/Music
/media/disk-1/tmp
понедельник, 16 марта 2009 г.
Настройка VPN-клиента (PPTP) в Linux
На самом деле все просто. Покажем это на примере Kubuntu.
Наиболее удобной программой для организации VPN подключения мне представляется kvpnc - графическая оболочка для pptp, openVPN, Cisco VPN и т.д. Как видно из приставки «k» - программа создана для KDE, так что пользователям Gnome, XFCE и пр., возможно, потребуется установить некоторые дополнительные библиотеки.
Для подключения предлагается использовать программу kvpnc.
1. Установка самой программы:
sudo apt-get install pptpd pptp-linux pppd kvpnc
2. После установки программа запускается через меню KDE и появляется мастер настройки. Нужно нажать «Далее».
3. Выбрать «Microsoft PPTP» и нажать «Далее».
4. Выбрать «Требовать MPPE» и нажать «Далее».
5. Ввести «Имя пользователя» и нажать «Далее».
6. Оставить сетевое устройство по умолчанию и нажать «Далее».
7. Выбрать «Keep default route» и нажать «Далее».
8. Оставить значения по умолчанию и нажать «Далее».
9. Оставить значения по умолчанию и нажать «Далее».
10. Ввести имя профиля и адрес VPN-сервера и нажать "Готово".
11. Нажать "Готово".
12. Зайти в настройки и в меню «Command Execution» --> «After Connect» задать маршрут в удаленную сеть через адрес, получаемый от VPN сервера.
13. Для подключения нажать "Connect".
В случае удачного подключения лог-файл /var/log/messages появится примерно такая информация:
Jun 19 10:41:51 till pppd[10123]: pppd 2.4.4 started by root, uid 0
Jun 19 10:41:51 till pppd[10123]: Using interface ppp0
Jun 19 10:41:51 till pppd[10123]: Connect: ppp0 <--> /dev/pts/4
Jun 19 10:41:52 till pppd[10123]: CHAP authentication succeeded
Jun 19 10:41:52 till pppd[10123]: MPPE 128-bit stateless compression enabled
Jun 19 10:41:54 till pppd[10123]: local IP address 192.168.0.193
Jun 19 10:41:54 till pppd[10123]: remote IP address 192.168.0.180
Таблица маршрутизации примет вид:
root@till:~# netstat -nr
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.180 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 192.168.0.193 255.255.255.0 UG 0 0 0 ppp0
10.59.26.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.59.26.1 0.0.0.0 UG 0 0 0 eth0
Несколько трюков с ng_ipacct
Инструмент ng_ipacct, разработанный Романом Палагиным, предназначен для сбора статистики о трафике и реализует Cisco ip accounting. Являясь нодой netgraph, он работает полностью в ядре системы, что существенно снижает требования к системным ресурсам. Снятие и обнуление статистики происходит с помощью утилиты ipacctctl. Для возможности работы с ng_ipacct описанными ниже методами нужно скомпилировать ядро с опциями:
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_SOCKET
options NETGRAPH_TEE
/usr/sbin/ngctl mkpeer rl0: tee lower right
/usr/sbin/ngctl connect rl0: lower upper left
/usr/sbin/ngctl name rl0:lower rl0_acct_tee
/usr/sbin/ngctl mkpeer rl0_acct_tee: ipacct right2left rl0_in
/usr/sbin/ngctl name rl0_acct_tee:right2left rl0_ip_acct
/usr/sbin/ngctl connect rl0_acct_tee: rl0_ip_acct: left2right rl0_out
В первой строке загружается модуль ng_ipacct, остальные строки иллюстрирует рисунок.
хук lower, при параллельном копировании в ng_ipacct. Как видно из примера, нода tee служит для дублирования потоков данных проходящих через нее в обоих направлениях.
При кажущейся простоте метода, сложности все же возникают при необходимости учета трафика на gif и tun интерфейсах, а так же на интерфейсах, работающих в режиме моста, в виду особенностей их реализации. Ниже приведены приемы, позволяющие обойти эти проблемы. Наиболее универсальный способ - это использование правила tee файервола ipfw.
hookprefix=${IFACE}
/sbin/kldload ng_netflow
ngctl -f- <<-SEQ
mkpeer ipacct ctl ctl
name .:ctl ${nodename}
### хук для входящего трафика
mkpeer ${nodename}: ksocket ${hookprefix}_in inet/raw/divert
name ${nodename}:${hookprefix}_in ${nodename}_in
msg ${nodename}_in: bind inet/0.0.0.0:3021
### хук для исходящего трафика
mkpeer ${nodename}: ksocket ${hookprefix}_out inet/raw/divert
name ${nodename}:${hookprefix}_out ${nodename}_out
msg ${nodename}_out: bind inet/0.0.0.0:3022
rmhook .:ctl
SEQ
ipfw add 64022 tee 3022 ip from room101 to any via ${IFACE}
/sbin/kldload ng_netflow
ngctl -f- <<-SEQ
mkpeer tee dummy right2left
name .:dummy divert_tee_in
mkpeer divert_tee_in: echo right echo
mkpeer divert_tee_in: ksocket left inet/raw/divert
name divert_tee_in:left divert_sock_in
msg divert_sock_in: bind inet/0.0.0.0:3021
disconnect dummy
mkpeer divert_tee_in: ipacct left2right rl0_in
name divert_tee_in:left2right ng_ipacct
SEQ
/sbin/kldload ng_ipacct > /dev/null 2>&1
/sbin/kldload ng_ipfw > /dev/null 2>&1
ngctl -f- <<-SEQ
mkpeer ipfw: ipacct 333 rl0_in
name ipfw:333 rl0_ip_acct
connect ipfw: rl0_ip_acct: 444 rl0_out
SEQ
ipfw add 100 ngtee 333 ip from any to any in
ipfw add 200 ngtee 444 ip from any to any out
Также существует директива netgraph, которую можно использовать совместно с ng_echo, аналогично тому, как это делалось в приведенном выше примере с правилом divert. Проиллюстрируем случай входящего трафика.
/sbin/kldload ng_ipfw > /dev/null 2>&1
ngctl -f- <<-SEQ
mkpeer ipfw: tee 333 left
name ipfw:333 rl0_tee
mkpeer rl0_tee: ipacct left2right rl0_in
mkpeer rl0_tee: echo right qqq
SEQ
Данному примеру будет соответствовать правило ipfw:
ipfw add 100 netgraph 333 ip from any to any in
Попавший в приведенные правила файервола пакет либо будет принят, либо продолжит путешествие по правилам ipfw, в зависимости от значения sysctl переменной net.inet.ip.fw.one_pass (1 - пакет считается принятым, 0 - сравнение продолжается). При этом автор патча сообщает, что такой способ доставки трафика в netgraph более эффективен, чем трюки с tee.
Также отметим, что в случае работы сетевых интерфейсов в режиме моста, мост должен быть фильтрующим, чтобы пакеты попадали в файервол. Приведенные методы также должны работать и с модулем ng_netflow. Добавлю, что описанные решения были проверены на маршрутизаторах NanoWall. Надеюсь, эта статья окажется полезной.
PS. А еще добавлю, что с 2006 года в netgraph появились ноды ng_ipfw, связывающая пакетный фильтр ipfw и подсистему netgraph, а также ng_nat, позволяющая делать ядерный NAT. Возможно, позже напишу и об этом.