Конфигурация ядра
Вам придется собрать свое ядро с применением включенной опции "Мост" и патча фильтрования моста (а также firewall-а, сети и т.п., если у вас еще это не встроено). Вам, как минимум, потребуются следующие опции ядра:
Литература
Я прочитал достаточно большой объем информации до того, как пришел к полностью работающему варианту. Часть информации оказалась полезной, но не совсем корректной.
был первым инструментом, примененным в настройках. К сожалению, его использование не включает в себя firewall.
"Мини-Howto: Мост+Firewall" вначале казался именно тем, что мне нужно. Однако теперь я считаю, что этот документ не совсем корректен. При помощи этого документа у меня вроде бы все заработало, но, в конце концов, я понял, что совсем не нужно разделять свою подсеть на две половины, как советует этот мини-HOWTO, и потом отказался от этого метода. Если вы все-таки будете читать этот документ, то отнеситесь к нему с изрядной долей критики.
Патч "Фильтр моста" - ключ к запуску всего. Как ни странно, информация на сайте предлагает вам использовать советы "Мини-Howto: Мост+Firewall" . Чтобы все запустить, вам эти советы не понадобятся. Понадобится лишь этот патч.
"Howto: IPCHAINS" бесценен при настройке собственно firewall. Я не пытаюсь в этом документе детально описывать настройку firewall - лишь упомяну о вещах, которые отличаются, в связи с использованием моста, описанного здесь.
Мини-HOWTO: Мост + Firewall + DSL
Derek Ney
derek@hipgraphics.com
Перевод: Станислав Рогин, ASPLinux
Настройка моста+firewall на Linux-системе, использующей DSL-соединение
Мосты, Firewall-ы, и DSL-соединения
До недавних пор наша сеть была подключена к Интернету, при помощи модема и протокола PPP. Я установил на шлюз сети firewall, используя IPChains (cмотрите "Мини-HOWTO: IPChains"), и все работало прекрасно. Недавно мы перешли на использование DSL-соединения. Я думал, что все будет очень просто - переключить firewall на DSL-соединение, и все будет работать, как раньше, однако я ошибался. На полную настройку и запуск мне понадобилось три дня. Я прочел огромный объем сопутствующей информации в сети, которая порой противоречила одна другой. Этот документ был создан потому, что, как я предполагаю, в будущем DSL станет значительно более распространен, и мои советы могут понадобиться многим. Я надеюсь, при помощи этого Мини-HOWTO, вы сможете сэкономить значительное время.
Я предполагаю, что эти советы можно применить и к нуль-модемной конфигурации, но это лишь предположение - я ничего не знаю о нуль-модемных соединениях.
Настройка
Полная настройка состоит из следующих шагов:
Настройка оборудования (и проверка того, что оно работает)
Патч и конфигурирование ядра
Настройка сети (ifconfig, маршрутизация, мост)
Настройка firewall
Настройка Firewall
Вы все еще не настроили firewall (если таковой вам нужен) для предотвращения неавторизованного доступа к локальной сети. Патч "Фильтрование моста"
, который вы установили, позволяет вам использовать новое встроенное правило "bridgein" в команде ipchains. Это правило используется, когда пакет передается по мосту от eth0 к eth1, или наоборот. Это правило не используется, когда пакет назначается самому firewall-у; вместо этого вам надо использовать правило input. Я не буду углубляться в детали настройки firewall; для этого читайте Howto: ipchains.
Настройка локальных машин
На каждой локальной машине вам надо просто правильно настроить IP-адрес, маску сети и использовать DSL-маршрутизатор в качестве шлюза по умолчанию. Firewall/мост будет направлять пакеты к DSL-маршрутизатору и от него.
Настройка моста
Вам понадобится утилита конфигурирования моста (автор Alan Cox) - она позволит контролировать работу моста, встроенного в ядро при включенной опции CONFIG_BRIDGE. BRCFG распространяется в виде исходных текстов и заранее скомпилированных исполняемых файлов. Я не знаю, с каким ядром были собраны эти файлы, но у меня все несколько разошлось, когда я попытался собрать их с include-файлами моего ядра (2.2.13). Поэтому, к сожалению, эти исходные тексты пришлось немного подправить. Ниже приведен сам патч:
Настройка оборудования
Вам понадобятся две сетевые карты. Самая большая проблема, с которой я столкнулся, возникла после того, как я выбрал первый попавшийся PCI-слот для второй карты на материнской плате, и оказалось, что этот слот использовал то же прерывание, что и первая карта. Я вообще не знал, что из-за этого могут возникнуть проблемы (на этот предмет не было никакой информации, и я думал, что все будет нормально работать). Обе карты тихо умерли (без индикации каких-либо ошибок) и перестали вообще передавать и принимать пакеты. Обычно, когда вы пытаетесь изменить конфигурацию, последнее, что делаете - меняете слоты карт. Я не знаю, существует ли эта проблема для всех сетевых карт, или только для наших, но я бы никому не советовал использовать общие прерывания. Драйвер, который мы будем использовать, выдает на экран IRQ каждой сетевой карты при загрузке системы. Существует большое количество советов, как заставить ядро обнаружить несколько сетевых карт (смотрите "Howto: Ethernet" , раздел Использование нескольких сетевых карт на одной машине); однако, мне это не понадобилось (мое ядро обнаруживало обе карты без каких-либо аргументов).
Затем вам надо подключить вторую карту к DSL-модему (или к тому, что соединяет вас с внешним миром) и убедиться, что это соединение работает. Вы должны дать команду ifconfig для второй карты с соответствующим IP-адресом и увидеть работающий ping до маршрутизатора на дальнем конце подключения к глобальной сети. Таким образом вы проверите, можно ли вы посылать пакеты по DSL-соединению. Например, в нашей сети нужно сделать следующее:
ifconfig eth1 192.168.2.130 netmask 255.255.255.192 broadcast 192.168.2.191
чтобы настроить вторую карту. А затем
Общий обзор настроек
Этот мини-HOWTO предназначен для ситуаций, когда ваш Linux является шлюзом/firewall. В системе установлены две сетевых карты. Одна из карт подключена к внешнему миру (в нашем случае это DSL-модем), и ничто больше к нему не подключено. Вторая карта находится в нашей локальной сети.
Заметьте, что я описываю все с моих позиций: машина i386 (ABIT BP6 MOBO, с 2-мя Celeron-ами), RedHat 6.0 с ядром версии 2.2.13, и DSL-модем, подключенный к маршрутизатору, и две сетевых карты Netgear FA310TX. В вашем случае все может отличаться.
Также учтите, что некоторые шаги, описанные здесь, оставляют вашу сеть незащищенной от потенциальных атак извне (до полного запуска firewall). Если для вас это неприемлемо - вам придется применить дополнительные меры безопасности.
Пример конфигурации
В процессе описания настроек я буду предполагать, что у вас установлены две сетевых карты, имеется внешнее DSL-соединение (DSL-модем подключен к одной из сетевых карт), и локальная сеть, подключенная ко второй сетевой карте. Я называю карту, подключенную к DSL-модему "eth1", а карту локальной сети - "eth0". Имена карт в системе зависят от того, в какой слот они включены.
Я также предполагаю, что вам выделена подсеть IP-адресов 192.168.2.128-191, т.е маска сети будет - 255.255.255.192, а DSL-маршрутизатор имеет адрес 192.168.2.129. Все эти значение - фиктивные, они здесь приведены исключительно для иллюстрации сути настройки. Я буду использовать IP-адрес 192.168.2.130 для firewall-машины (на обеих сетевых картах), хотя я выяснил, что можно иметь и различные адреса для сетевых карт, если вам это необходимо.
изолировать локальную сеть от глобальной
Чтобы достигнуть нашей цели - изолировать локальную сеть от глобальной (к которой мы подключены при помощи DSL), используя нашу Linux-машину - необходимы две сетевых карты. Одна карта подключена к локальной сети, вторая - к глобальной. Единственная машина, которая может свободно общаться с окружающим миром - это наш Linux. Все остальные машины должны общаться с внешним миром через firewall, установленный на Linux.
Настройка системы состоит из двух частей, выполняющих разные задачи:
Маршрутизация пакетов между глобальной и локальной сетями (мост)
Фильтрация ненужных, неразрешенных и опасных пакетов (firewall)
В "Мини-Howto: Мосты" приведены подробные инструкции, решающие первую проблему - маршрутизацию пакетов между двумя сторонами сети (локальной и глобальной). Это проделывается следующим способом: обе карты переводятся в режим "promisc", в котором они обрабатывают все пакеты, проходящие по сети, и передают пакеты на другую сторону моста, если там находится их получатель. Эта процедура прозрачна для сети - другие компьютеры даже не видят мост, потому что он даже не имеет IP-адреса. Но это - неполное решение проблемы. Мне нужно, чтобы firewall имел IP-адрес (для административных функций, если не более), и, что гораздо важнее, код моста в ядре перехватывает и передает пакеты до того, как они попадут в firewall, и поэтому в этой ситуации firewall не работает.
Выяснилось, что возможно одновременно назначить IP-адреса сетевым картам и использовать их в качестве моста. Несмотря на то, что в "Мини-Howto: Мосты"
это не делается (ну, на самом деле, там используются внутренние адреса) - все прекрасно работает. Это полностью разрешает первую проблему. Чтобы решить вторую, мы установим патч ядра (он находится по адресу http://ac2i.tzo.com/bridge_filter/), который позволяет применять правила firewall к пакетам, проходящим через сеть, добавляя в таблицу firewall новое правило "bridgein".
Соединяем все вместе
Итак, теперь у нас имеются две сетевые карты, вновь собранное ядро и установленный пакет brcfg. Теперь вам понадобится стартовый скрипт, запускающий все это при загрузке системы. Я использовал загрузочные скрипты в стиле RedHat (/etc/rc.d). Специфические данные: сетевые адреса и маски я поместил в файл /etc/sysconfig/network:
Совместное использование прерываний
Как я уже упоминал в разделе "Настройка оборудования", нежелательно использовать одно и тоже прерывание для обеих сетевых карт, как, наверно, и нежелательно разделять их IRQ и с другими устройствами.
Странные сообщения команды ipchains -X
Те изменения, котрые мы внесли в ядро патчем "Фильтрование моста" приводят к тому, что команда ipchains -X, выдает следующую ошибку:
Суть проблемы
Передо мной встала следующая проблема: настроить систему так, чтобы код firewall-а в ядре (управляемый ipchains) мог быть использован для фильтрации пакетов, идущих между глобальной и локальной сетью. Мне также требовалось, чтобы локальные машины были "видны" в глобальной сети (не исключая работы firewall). Вроде, казалось, IP-маскарадинг (смотрите HOWTO: IP-маскарадинг) - наиболее простое решение в моей ситуации. Но все оказалось не так просто.
Автоматизация процесса
Теперь, когда вы узнали какие модули и опции нужны, вы можете автоматизировать процесс, занеся эту информацию в /etc/conf.modules. После этого, при запуске программы, которая использует драйвер, модули будут загружаться автоматически. Для этого я пишу:
# TV alias char-major-81 bttv pre-install bttv modprobe -k tuner; modprobe -k msp3400 options bttv radio=1 card=3 options tuner type=2 |
Замените модули и опции для вашей карты. (Запустите /sbin/depmod -a для того, чтобы удостовериться, что ваша информация не устарела.)
Использование версий 0.6.x
Если вы хотите использовать версию 0.6.x , сначала возьмите ее с сайтов, указанных выше, разверните ее командой
tar -xvzf bttv-0.6.x.tar.gz
зайти в созданный каталог . su и набрать
make
(Вы можете не следовать указаниям из файла INSTALL, касательно редактирования makefiles.) Затем для их установки
make install
И в завершении
/sbin/depmod -a
для изменения информации о зависимости модуля.
Настройка ядра
Ядро должно быть правильно настроено для того, чтобы поддерживать карту. Большинство новых дистрибутивов Linux идут вместе с необходимыми модулями, поэтому, если вы сможете найти у себя videodev.o, bttv.o, и tuner.o в каталоге /lib/modules/2.x.x/misc, то у вас уже все установлено.
Если нет, то придется перекомпилировать ядро с
CONFIG_VIDEO_DEV
и
CONFIG_VIDEO_BT848
желательно в качестве загружаемых модулей. Прочтите Linux Kernel HOWTO (http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html) для уточнения деталей перекомпилирования.
значения аргументов для всех модулей
Пункты отмеченные значком "*" есть только в драйверах 0.6.4h
videodev.o это основной модуль video4linux module, все видеодрайверы (включая bttv)регистрируются здесь. i2c.o общий модуль поддержки i2c. Он выполняет большинство функций управления шиной i2c, и все остальные модули (кроме videodev.o)используют его аргументы insmod: scan=1 обнаружение устройств на шине i2c verbose=0 уменьшает объем сообщений, выдаваемых драйвером i2c_debug=1 этот ключ предназначен для отладки вся информация, передаваемая по шине, записывается в системный журнал bttv.o драйвер bt848 (микросхемы оцифровки) аргументы insmod: remap=adr переназначить память Bt848 на адрес, равный adr>20 triton1=0/1 для совместимости с Triton1 Triton1 автоматически распознается pll=0/1/2 установки pll 0: не использовать PLL 1: установлена микросхема 28 MHz 2: установлена микросхема 35 MHz radio=0/1 карта поддерживает радио card=n тип карты 0: Автоопределение 1: Miro 2: Hauppauge (старая карта bt848) 3: STB 4: Intel 5: Diamond 6: AVerMedia 7: MATRIX Vision MV-Delta 8: FlyVideo 9: TurboTV 10: Hauppauge (новые карты bt878) 11: MIRO PCTV pro 12: Terratec/Vobis TV-Boostar 13: Newer Hauppauge WinCam (bt878) 14: MAXI TV Video PCI2 15: Terratec TerraTV+ 16: Aimslab VHX 17: PXC200 18: AVermedia98 19: FlyVideo98 (новые карты FlyVideo) *20: Zoltrix TV-Max *21: iProTV *22: ADS Technologies Channel Surfer TV *23: Pixelview PlayTV (bt878) *24: Leadtek WinView 601 *25: AVEC Intercapture *26: LifeView FlyKit w/o Tuner *27: Intel Create and Share PCI параметры remap, card, radio и pll поддерживают до четырех, разделенных запятыми, аргументов (если у вас несколько карт). Параметры CARD и PLL определяются по умолчанию в файле Makefile msp3400.o Драйвер для микросхем обработки звука msp34xx. Вам придется использовать этот модуль, если у вас стереокарта. аргументы insmod: debug=1/2 выводить отладочную информацию в системный журнал, 2 - более подробно. *tea6300.o Драйвер для звукового чипа tea6300. Если у вас стереокарта, а драйвер msp3400.o не работает, то попытайтесь использовать этот. Этот чип используется на большинстве TV/FM-карт фирмы STB (обычно взятых с распродаж излишков Gateway). аргументы insmod: debug=1 выводить отладочную информацию в системный журнал. *tda8425. o Драйвер для звукового чипа tda8425. Этот драйвер был встроен в bttv.c, поэтому если ваш драйвер раньше работал, а сейчас перестал - загрузите этот модуль. аргументы insmod: debug=1 выводить отладочную информацию в системный журнал. *tda9855.o Драйвер для чипа стерео-декодера/аудио-процессора tda9855. аргументы insmod: debug=1 выводить отладочную информацию в системный журнал. *dpl3518.o Драйвер для процессора Dolby Pro Logic dpl3518a аргументы insmod: debug=1 выводить отладочную информацию в системный журнал. tuner.o Драйвер тюнера. Используйте этот драйвер, если хотите работать со встроенным в карту тюнером... аргументы insmod: debug=1 выводить отладочную информацию в системный журнал. type=n задать тип чипа тюнера, где n равно: 0:Тюнер Temic PAL 1:Тюнер Philips PAL_I 2:Тюнер Philips NTSC 3:Тюнер Philips SECAM 4:отключить поддержку тюнера 5:Тюнер Philips PAL 6:Тюнер Temic NTSC 7:Тюнер Temic PAL *8:Тюнер Alps TSBH1 NTSC *9:Тюнер Alps TSBE1 PAL i2c_chardev.o создает символьное устройство для доступа к шине i2c. Работает только с версией 2.1.x и автоматически не собирается. |
Проигрыватели
Теперь, когда ядро и устройства настроены, а модули загружены, вам понадобится приложение, при помощи которого можно просмотреть видео с вашей карты. Их существует множество:
bttvgrab - Обеспечивает высококачественную оцифровку, пригодную для записи
http://moes.pmnet.uni-oldenburg.de/bttvgrab/
Gnome-o-Vision - Программа для просмотра для среды Gnome (в данный момент находится в стадии разработки)
http://cvs.gnome.org/lxr/source/gnomovision/
kwintv - Программа для просмотра телепрограмм, основанная на Qt, для среды KDE
http://www.mathematik.uni-kl.de/~wenk/kwintv/
wmtune - Радио тюнер для ТВ/радио карт основанный на bttv
http://home.pages.de/~fionn/archive/wmtune-1.0_bttv.tar.bz2
wmtv - WindowMaker TV dock.app
http://www.student.uwa.edu.au/~wliang/
XawTV - программа для просмотра телепрограмм и несколько утилит
http://www.in-berlin.de/User/kraxel/xawtv.html
XtTV - Простенькая программа для ТВ/видео под Linux/X Windows
http://home.pages.de/~rasca/xttv/
Еще есть интересный драйвер для карты FlyVideo98 на http://wolf.ifj.edu.pl/~jochym/FlyVideo98/
Обязательно прочтите документацию, перед тем как использовать эти приложения. Большинство из них требует для работы тщательной настройки!
Создание файлов /dev
Теперь вам надо создать несколько файлов в каталоге /dev. Наберите ls /dev/video*; ls /dev/radio* , чтобы проверить, существуют ли эти файлы. Если нет, то вам придется их создать. Номер устройства у этих файлов, в основном, равен 81, другие номера устройств зависят от их типа (видео, радио и т.д.). Для более подробной информации загляните на страничку Video4Linux API по адресу (http://roadrunner.swansea.uk.linux.org/v4lapi.shtml).
В каталоге driver есть скрипт MAKEDEV, который создаст четыре видео устройства. Вы можете сделать это и сами, если у вас есть карта для оцифровки видео. Как пользователь root наберите:
mknod /dev/video0 c 81 0
chmod 666 /dev/video0
ln -s /dev/video0 /dev/video
mknod /dev/radio0 c 81 64
chmod 666 /dev/radio0
ln -s /dev/radio0 /dev/radio
Возможно у вас есть приложения, которые потребуют устройства видеотекста и VBI. Тогда вам следует набрать следующие команды:
mknod /dev/vtx0 c 81 192
chmod 666 /dev/vtx0
ln -s /dev/vtx0 /dev/vtx
mknod /dev/vbi0 c 81 224
chmod 666 /dev/vbi0
ln -s /dev/vbi0 /dev/vbi
The BTTV Mini-HOWTO
Eric Sandeen
eric_sandeen@bigfoot.com
Перевод: Михаил Корепанов, ASPLinux
В этом документе дается описание всего программного и аппаратного обеспечения, необходимого для использования в Linux карты оцифровки видеоизображения или ТВ-тюнера, основанных на чипсете bt8x8.
Требования к аппаратному обеспечению
Из файла bttv README:
Bttv - это драйвер для карт оцифровки видео, использующих семейство чипов Conexant (http://www.conexant.com) Bt848. Среди них Bt848, Bt848A, Bt849, Bt878 и Bt879. Основным отличием этих карт у разных производителей является тип тюнеров и наличие дополнительных устройств. Например, некоторые карты Hauppauge имеют дополнительный декодер Videotext и/или микросхему декодирования звука. Но не все из дополнительных устройств поддерживаются bttv. Единственные различия между платами различных изготовителей - типы блоков настройки и наличие дополнительных компонентов на платах. Например, несколько карт от компании Hauppauge имеют дополнительно декодер видеотекста и/или звуковой декодер. Только некоторые из этих дополнительных компонентов поддерживаются bttv. Также отличаются типы (композитный или S-Video) и количество входов.
Поддерживаются следующие карты:
AverMedia TV98
http://www.aver.com/products.html
AVerMedia TV-Phone
http://www.aver.com/lite/products/avertvphone.html
Diamond DTV2000
http://www.diamondmm.com/products/current/dtv-2000.cfm
Hauppauge Win/TV pci (and other Hauppauge cards)
IDS Imaging FALCON
Lifeview Flyvideo II
http://www.lifeview.de/lifeview/html/produkte.htm#karte
Matrix Vision MV-Delta
miroVIDEO PCTV
Osprey-100
http://www.mmac.com/products/osprey/osprey100.html
STB TV PCI
http://www.stb.com/products/multimedia/tvpci/tvpci.html
Terratec TERRA TV+
http://www.terratec.de/produkte/terratv/terratv_info.htm
Videologic Captivator PCI
http://www.videologic.com/Productinfo/capt_pci.htm
Если вы узнаете, что и другие карты поддерживаются драйвером, то пожалуйста напишите мне об этом и я дополню этот список.
Требования к программному обеспечению
Для использования ТВ тюнера под Linux, вам понадобятся соответствующие драйверы ядра, начиная с версии ядра 2.2.0, драйверы bttv входят в состав дистрибутива ядра.
Иначе вы можете взять драйвер tbe, который будет работать с ядрами 2.0.35 и более поздними. Однако, он не гарантирует работу с ядром более старым, чем 2.0.x. Драйверы bttv можно взять на http://www.thp.uni-koeln.de/~rjkm/linux/bttv.html, а самая последняя их версия размещена у Gerd Knorr по адресу http://www.in-berlin.de/User/kraxel/xawtv.html В них добавлена поддержка звуковых чипов, таких как TEA6300, TDA8425, и DPL3518.
Если вы новичок в обращении с драйвером bttv, я бы вам посоветовал просто взять ядро с этим драйвером. Если у вас возникнут с ним проблемы или окажется, что он не поддерживает вашу карту, то возьмите драйвер версии 0.6 по адресу, указанному выше. Если вы уже имели дело с этим драйвером, то возьмите у Gerd Knorr драйвер версии 0.7 , который будет работать с ядром 2.4. Драйверы серии 0.7 можно получить еще на http://www.in-berlin.de/User/kraxel/xawtv.html.
Этот документ описывает драйверы, идущие с ядром 2.2.14, с упоминанием некоторых возможностей версии 0.6 , а версия 0.7 здесь совсем не затронута.
Установка аппаратного обеспечения
(Спасибо William Burrow за эту главу.)
Если вы боитесь самостоятельно открывать корпус своего компьютера, то сначала прочтите данное HOWTO, соберите всю информацию о карте: тип тюнера, номера использующихся микросхем и т.д. А затем позовите того, кто может вам правильно установить карту.
Иначе, откройте корпус и установите карту в нужный слот. Выберите тот PCI слот, который поддерживает режим PCI bus master (если ваша материнская плата поддерживает эти режимы не на всех слотах).
Существует два способа подключить вашу карту оцифровки видео и звуковую карту. Подсоедините аудио кабель вашего CD-ROM к аудио входу видео карты, затем аудио выход с видео карты к аудио входу тюнера или CD-ROM. Иначе вам надо соединить внешний разъем 1/8'' аудио выхода видео карты к такому же разъему входа на аудиокарте. Если вы не хотите пропускать звук через аудиокарту или у вас ее попросту нет, то подсоедините активные колонки к аудио выходу видеокарты. (Некоторые новейшие карты bt878 не имеют аудио разъемов, так как они непосредственно посылают оцифрованный звук шине PCI.)
Для проверки работоспособности карты очень удобно использовать внешний источник видеосигнала. Многие карты имеют композитный вход, вход S-Video и, если есть тюнер, то вход RF. Для каждого из этих входов существует свой разъем.
Загрузка модулей
У драйвера bttv есть множество модулей с различными опциями, как описано в приложении. Но с таким количеством модулей и опций вы можете справиться сами. Для того,чтобы сбросить буферы на диск, напечатайте
sync; sleep 1; sync
Затем с правами пользователя root, используя команду insmod, попробуйте загрузить модули. Первые два модуля довольно просто загрузить, так как они обычно не требуют указания опций:
insmod videodev
insmod i2c
Теперь можно загрузить сам модуль драйвера bttv:
modprobe bttv
По умолчанию модуль bttv сам определяет тип карты. Просмотрите /var/log/messages , чтобы увидеть то, что он обнаружил. Если он не правильно определил тип, вам надо будет добавить опцию card=n в конце вышеуказанной строки, где n это карта из последующего списка. (Карты с 0 по 19 поддерживаются драйверами ядра, а bttv-0.6.4h поддерживает еще с 20 по 27) По желанию вы можете добавить опцию radio=1, если у вашей карты есть функция FM тюнера.
Bzip2 mini-HOWTO
David Fetter
david@fetter.org
Перевод: Михаил Корепанов, ASPLinux
В этом документе содержится информация о том, как пользоваться новым архиватором bzip2. Копию этого документа в формате sgml можно найти здесь и здесь.
Где получить руководство Bzip2-HOWTO на родном языке
Франкоязычные пользователи возможно захотят воспользоваться документацией, переведенной Arnaud Launay. Веб-версия находится здесь, а ftp здесь. Почту для Arnaud можно посылать по этому адресу.
Есть перевод, выполненный Tetsu Isaji, на японский. Домашняя страничка Isaji находится по этому адресу, а письма ему можно посылать на этот адрес.
Также существует шведский перевод, выполненный Linus цkerlund. Контактный адрес Linus находится здесь.
Они размещены на официальных сайтах
Они размещены на официальных сайтах (смотрите главу "Как получить bzip2").
Использование bzip2 для преобразования из других форматов
Нижеследующая программа, написанная на языке perl, берет файлы, запакованные в других форматах (.tar.gz, .tgz. .tar.Z, and .Z в данном случае), и переархивирует их для повышения степени сжатия. Исходный текст программы на языке perl имеет все виды документации по тому, что она делает, и как она делает то, что она делает. Последняя версия берет на входе файлы, указанные в командной строке. Если аргументы не указаны в командной строке, программа переупаковывает файлы в текущем каталоге.
#!/usr/bin/perl -w
####################################################### # # # Программа берет сжатые файлы в текущем каталоге # # и преобразует в файлы bzip2. Она поддерживает .tgz # # расширения преобразуя их в .tar.bz2 # # # ####################################################### $counter = 0; $saved_bytes = 0; $totals_file = '/tmp/machine_bzip2_total'; $machine_bzip2_total = 0; @raw = (defined @ARGV)?@ARGV:; foreach(@raw) { next if /^bzip/; next unless /\.(tgz|gz|Z)$/; push @files, $_; } $total = scalar(@files); foreach (@files) { if (/tgz$/) { ($new=$_) =~ s/tgz$/tar.bz2/; } else { ($new=$_) =~ s/\.g?z$/.bz2/i; } $orig_size = (stat $_)[7]; ++$counter; print "Repacking $_ ($counter/$total)...\n"; if ((system "gzip -cd $_ |bzip2 >$new") == 0) { $new_size = (stat $new)[7]; $factor = int(100*$new_size/$orig_size+.5); $saved_bytes += $orig_size-$new_size; print "$new is about $factor% of the size of $_. :",($factor=0)?"saved ":"lost " , abs($saved_bytes) , " bytes of storage space :" , ($saved_bytes>=0)?")":"(" , "\n" ; unless (-e '/tmp/machine_bzip2_total') { system ('echo "0" >/tmp/machine_bzip2_total'); system ('chmod', '0666', '/tmp/machine_bzip2_total'); } chomp($machine_bzip2_total = `cat $totals_file`); open TOTAL, ">$totals_file" or die "Can't open system-wide total: $!"; $machine_bzip2_total += $saved_bytes; print TOTAL $machine_bzip2_total; close TOTAL; print "That's a machine-wide total of ",`cat $totals_file`," bytes saved.\n"; |
Использование bzip2 совместно с grep
Следующая утилита, которую я называю bgrep, является небольшой модификацией zgrep, поставляемой вместе с Linux. Вы можете использовать grep без предварительной распаковки файлов.
#!/bin/sh
# bgrep -- программа которая позволяет пользоваться grep без предварительной распаковки файлов PATH="/usr/bin:$PATH"; export PATH prog=`echo $0 | sed 's|.*/'` case "$prog" in *egrep) grep=${EGREP-egrep} ;; *fgrep) grep=${FGREP-fgrep} ;; *) grep=${GREP-grep} ;; esac pat="" while test $# -ne 0; do case "$1" in -e | -f) opt="$opt $1"; shift; pat="$1" if test "$grep" = grep; then # grep is buggy with -e on SVR4 grep=egrep fi;; -*) opt="$opt $1";; *) if test -z "$pat"; then pat="$1" else break; fi;; esac shift done if test -z "$pat"; then echo "grep through bzip2 files" echo "usage: $prog [grep_options] pattern [files]" exit 1 fi list=0 silent=0 op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` case "$op" in *l*) list=1 esac case "$op" in *h*) silent=1 esac if test $# -eq 0; then bzip2 -cd | $grep $opt "$pat" exit $? fi res=0 for i do if test $list -eq 1; then bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i r=$? elif test $# -eq 1 -o $silent -eq 1; then bzip2 -cd "$i" | $grep $opt "$pat" r=$? else bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" r=$? fi test "$r" -ne 0 && res="$r" done exit $res |
Использование bzip2 совместно с less
Для разархивирования на лету файлов, сжатых bzip2, например, для использования "less", до того, как их разархивировать bunzip2, вы можете сделать файл lesspipe.sh (man less) следующим образом:
#!/bin/sh # Это процессор для 'less'. Это используется когда установлена переменная окружения # variable is set: LESSOPEN="|lesspipe.sh %s" case "$1" in *.tar) tar tvvf $1 2>/dev/null ;; # Просмотр списка различных файлов архивированных tar *.tgz) tar tzvvf $1 2>/dev/null ;; # Эта строка работает со старой версией tar: *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;; # Эта строка работает с обновленной версией tar: # *.tar.bz2) tyvvf $1 2>/dev/null ;; *.tar.gz) tar tzvvf $1 2>/dev/null ;; *.tar.Z) tar tzvvf $1 2>/dev/null ;; *.tar.z) tar tzvvf $1 2>/dev/null ;; *.bz2) bzip2 -dc $1 2>/dev/null ;; # Корректный просмотр файлов *.Z) gzip -dc $1 2>/dev/null ;; *.z) gzip -dc $1 2>/dev/null ;; *.gz) gzip -dc $1 2>/dev/null ;; *.zip) unzip -l $1 2>/dev/null ;; *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src FILE=`echo $FILE | cut -d ' ' -f 2` if [ "$FILE" = "troff" ]; then groff -s -p -t -e -Tascii -mandoc $1 fi ;; *) cat $1 2>/dev/null ;; # *) FILE=`file -L $1` ; # Проверяет файл на двоичный формат , если так -- просматривает при помощи 'strings' # FILE1=`echo $FILE | cut -d ' ' -f 2` # FILE2=`echo $FILE | cut -d ' ' -f 3` # if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \ # -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then # strings $1 # fi ;; esac |
Использование bzip2 совместно с Netscape под X.
tenthumbs@cybernex.net утверждает:
Я также нашел способ заставить Linux Netscape использовал bzip2 для Content-Encoding так, как он использует gzip. Добавьте нижеследующее в $HOME/.Xdefaults или $HOME/.Xresources
Я использую опцию -s потому, что я бы лучше уменьшил скорость распаковки, ослабив загрузку оперативной памяти. Но вы можете этим не воспользоваться.
Netscape*encodingFilters: \ x-compress : : .Z : uncompress -c \n\ compress : : .Z : uncompress -c \n\ x-gzip : : .z,.gz : gzip -cdq \n\ gzip : : .z,.gz : gzip -cdq \n\ x-bzip2 : : .bz2 : bzip2 -ds \n |
Использование bzip2 совместно с tar
Ниже приводятся три способа использования bzip2 с архиватором tar.
Использование bzip2 совместно wu-ftpd
Спасибо Arnaud Launay, за идею, позволяющую снизить траффик. Следующее должно входить в /etc/ftpconversions для того, чтобы была возможность выполнять архивирование и разархивирование на лету, при помощи bzip2. Удостоверьтесь, что путь (like /bin/compress) правильный.
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP :.bz2: : :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2 : : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2 : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP : : :.tar.bz2:/bin/tar -c -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2 |
Домашняя страничка Bzip2 находится
Домашняя страничка Bzip2 находится в Великобритании. Зеркало для США находится здесь.
Компилирование bzip2 для вашей машины
Если у вас gcc 2.7.*, исправьте следующую строку:
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops |
на
CFLAGS = -O2 -fomit-frame-pointer |
Это заменяет -O3 на -O2 и опускает ключ -funroll-loops. Вы, возможно, захотите добавить еще флаги -m* (например -m486).
Неупотребление ключа -funroll-loops, является обязательным условием. Иначе gcc 2.7 соберет неправильную программу, или, в лучшем случае, большую и медленную. Для других компиляторов (lcc, egcs, gcc 2.8.x) установки по умолчанию стоят правильно.
После всего, выполните команду make и установите, как описано в README.
Наиболее простой в установке:
Этот способ не предусматривает никакой дополнительной установки. Чтобы разархивировать tar-архив foo.tar.bz2, запакованый bzip2, находящийся в текущем каталоге, надо
Настройка emacs для одного пользователя:
Благодарим Ulrik Dickow, ukd@kampsax.dk, системного программиста Kampsax Technology:
Если вы не являетесь системным администратором и хотите, чтобы bzip2 работал автоматически, просто добавьте следующее в файл .emacs.
;; Automatic (un)compression on loading/saving files (gzip(1) and similar) ;; We start it in the off state, so that bzip2(1) support can be added. ;; Code thrown together by Ulrik Dickow for ~/.emacs with Emacs 19.34. ;; Should work with many older and newer Emacsen too. No warranty though. ;; (if (fboundp 'auto-compression-mode) ; Emacs 19.30+ (auto-compression-mode 0) (require 'jka-compr) (toggle-auto-compression 0)) ;; Now add bzip2 support and turn auto compression back on. (add-to-list 'jka-compr-compression-info-list ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'" "zipping" "bzip2" () "unzipping" "bzip2" ("-d") nil t]) (toggle-auto-compression 1 t) |
Настройка emacs для всех:
Я написал следующий патч на jka-compr.el, который переводит bzip2 в режим авто-архивирования.
Простой в установке, прост в использовании , нет необходимости в root-правах:
Благодарим Leonard Jean-Marc за подсказки. Также спасибо Alessandro Rubini за разграничение bash и csh.
В файле .bashrc вы можете поместить строчку типа:
Так же прост в использовании, но требует наличия root-прав.
Обновите tar в соответствии с последней версией GNU, на данный момент это 1.13.10. Вы можете это сделать на GNU's ftp site или каком-либо зеркале.
ЧАСТЬ I: Сеть дома?
Большинство из нас пользуются Интернетом на работе. Тем не менее, часто необходим доступ к сети из дома или другого места вне работы. Возможно, работать из дома дешевле, чем из здания компании. Думаю, лучшее решение - установить на сервер Linux программное обеспечение, позволяющее производить call-back. При помощи технологии call-back, появляется возможность перезвонить на определенный телефонный номер за счет компании. Я попытаюсь описать, как это работает. Сначала определенный пользователь звонит на сервер Linux. Затем пользовательская сторона кладет трубку. В это время Linux звонит пользователю. Пользователь снова аутентифицируется. И мы получаем соединение с сервером, причем пользователь платит только за первое короткое соединение, за остальное платит компания. Двойная проверка и некоторые возможности в программе, поддерживающей call-back, не позволяют посторонним пользователям воспользоваться деньгами компании. Кроме того, мы можем ограничить доступ только пределами внутренней сети или только Интернетом (Call-back очень гибок). Ниже я попытаюсь представить настройку call-back сервера под Linux и расскажу, как настроить свой компьютер для этой операции.
ЧАСТЬ II: Первые шаги с вашим модемом.
Разные администраторы предпочитают разные модемы. Однако, во время покупки модема, вам нужно придерживаться определенных правил:
Не покупайте Win-Modem, т.к. он не работает под Linux
Внешний модем работает быстрее, чем внутренний.
Внутренний ISA модем лучше PCI (вы можете использовать PCI слот для чего-нибудь другого)
Не покупайте Plug&Play модем. Если он уже у вас есть, отключите Plug&Play и настройте модем на свободный COM порт (Plug&Play-HOWTO).
Если у нас есть нужный модем, мы должны настроить систему. Для этого мы должны проверить на каком он порту, и сделать символьный линк между файлом устройства и /dev/modem. Например, если у нас модем на COM2, мы пишем:
ln -s /dev/cua1 /dev/modem
Проверяем
lrwxrwxrwx 1 root uucp 9 Sep 19 19:10 /dev/modem -> /dev/cua1
Если модем на другом порту, надо запомнить, что
/dev/cua0 is com1
/dev/cua1 is com2
/dev/cua2 is com3
/dev/cua3 is com4
Для новых ядер:
/dev/ttyS0 is com1
/dev/ttyS1 is com2
/dev/ttyS2 is com3
/dev/ttyS3 is com4
Теперь можно проверить наши настройки при помощи minicom.
ЧАСТЬ III: Звоним на Linux
Для начала, нам нужно настроить параметры ядра - проверяем, установлена ли поддержка ppp. Если поддержка не включена (ни внутри ядра, ни в виде модуля), то нам нужно пересобрать ядро (Kernel-HOWTO). Хорошо. Теперь у нас правильное ядро, и нам нужно поставить программное обеспечение. Поддержка call-back - это часть программ mgetty-sendfax и ppp. Вы можете найти их в вашем дистрибутиве. Т.к. в процессе call-back происходит двойная аутентификация, мы должны создать пользователя, от имени которого запускается ppp на сервере.
pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin
Затем меняем пароль. Информацию о пароле надо добавить в файл /etc/ppp/pap-secrets (подробнее см. man pppd):
pppuser * password_for_pppuser *
Этот пользователь не имеет програмной оболочки - вместо этого запускается файл /etc/ppp/ppplogin. Мы можем сделать его самостоятельно. Например, при помощи vi /etc/ppp/ppplogin:
#!/bin/sh
exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2
где 192.168.1.1 - адрес сервера, 198.168.1.2 - адрес нашей машины. Выставляем атрибуты файла, делая его запускаемым. Мы используем демон ppp, поэтому нам надо задать параметры его работы. Редактируем файл /etc/ppp/options:
netmask 255.255.255.0
proxyarp
lock
crtscts
modem
Опция proxyarp очень важна, если вы хотите иметь доступ в Интернет. Остальные опции используются для управления модемом. Если вы уберете опцию proxyarp, то вы сможете работать только с локальной сетью сервера. См. PPP-HOWTO и man pppd для более подробной информации. Теперь нам надо настроить модем. Чтобы наш сервер был готов к приему звонков, добавим строку в файл /etc/inittab (для COM2):
s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
Для COM1 она выглядит примерно так:
s0:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
Дайте команду init q. Если в журналах не появилось сообщений об ошибках, переходим к следующему шагу. Мы должны вернуться в каталог /etc/ppp и создать файл options.ttyS1 (для модема на COM1 - options.ttyS0):
IP_local: IP_remote
для нашей сети это будет:
192.168.1.1:192.168.1.2
Теперь проверим файл /etc/mgetty+sendfax/login.config
на предмет наличия в ней строки:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug
Остальные строки могут начинаться с #.
И наконец, чтобы ppp работало от пользователя pppuser, мы должны установить флаг suid для pppd:
chmod u+s /usr/sbin/pppd
это даст:
-rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd
Я думаю, что очень неплохо добавить эту команду в cron, потому что у меня возникли проблемы с правами после перезапуска моего сервера. Наш сервер будет работать в качестве маршрутизатора. Нам надо разрешить ядру пересылать IP-пакеты. Для этого в файл /etc/rc.d/rc.local добавим следующую строку:
echo "1" > /proc/sys/net/ipv4/ip_forward
Если у вас дистрибутив RedHat или ему подобный, то вы можете изменить в файле/etc/sysconfig/network строку FORWARD_IPV4=false на FORWARD_IPV4=true.
Для проверки позвоним на Linux, используя для этого скрипт. Если мы делаем это из MS Windows, поставим галочку "вызвать окно терминала после соединения". Входим как pppuser с его паролем. Надеюсь, что все будет работать нормально.
ЧАСТЬ IV: Linux звонит к нам
Мы уже можем позвонить к Linux, и настало время, чтобы Linux позвонил к нам. Это не очень сложно. Нам нужно отредактировать два файла. Создадим файл /etc/mgetty+sendfax/callback.conf и пока оставим его пустым.
Теперь настало время узнать номера телефонов наших пользователей, чтобы сервер сам звонил к ним. Для этого вносим в файл /etc/mgetty+sendfax/login.conf следующее:
call - - /usr/sbin/callback - S 123456
где call - это псевдо-пользователь, нужный для того, чтобы начать соединение. Строка в /etc/mgetty+sendfax/login.conf
запускает программу, звонящую на указанный телефонный номер (в нашем случае это 123456). Похожая процедура может быть выполнена для другого пользователя. Я попробую объяснить, как это работает. Когда мы звоним на сервер, он предлагает нам пройти аутентификацию, и мы входим как псевдо-пользователь `call'. Скрипт на нашем компьютере вешает трубку, и мы ждем. На сервере запускается программа /usr/sbin/callback, которая перезванивает нам. Мы снова проходим проверку, но теперь в качестве пользователя pppuser, и после этого устанавливается ppp-соединение. Все. Настройка рабочей станции очень проста. Если у вас MS Windows, вы должны установить удаленный доступ сети и в свойствах модема найти "установка связи-->дополнительно-->строка инициализации", где прописываем.
&c0s0=1
Закрываем окно, звоним и заходим на сервер как описано выше. Если мы хотим использовать Linux, мы должны написать скрипт. Довольно сложно написать один хороший скрипт на все случаи жизни, т.к. правильная конфигурация ppp имеет первичное значение. Скрипты, описанные ниже (автор A. Gozdz), я предложил бы поместить в один каталог. Более подробную информацию читайте в PPP-HOWTO.
ДЛЯ SLACKWARE:
Конфигурационный файл ppp (модем на COM2) /etc/options
ЧАСТЬ V: Выводы
Настройка call-back ничуть не сложна, и я не знаю лучшего пути настроить доступ кроме как через сервер. Настройка, представленная выше - это результат большого количества попыток. Все то же самое может быть сделано по-другому - после прочтения всех материалов, относящихся к этой теме (man pppd, HOWTO-NET4).
Мини-HOWTO: Обратный звонок
Pawel Skonecki
stona@fizyka.umcs.lublin.pl
Перевод: Павел Гашев, ASPLinux
Этот документ описывает установку call-back в Linux. Хочу поблагодарить Анну за терпение.