*NIX
Подписаться на эту рубрику по RSS
Как сделать загрузочную USB флешку с FreeBSD на Mac OS
Сегодня будет экзотика - расскажу как сделать загрузочную USB флешку с FreeBSD на Mac OS X. Да нормальная тема, учитывая что понадобилось организовать OpenVPN сервер и хочется стабильности - один раз настроил и забыл, так как DSR-500N о котором писал ранее, проявил себя не с лучшей стороны, не пережив аварийного отключения электричества.
Железка, на которой будет крутиться данный сервер не менее экзотическая - Lenovo IdeaCentre Q190, вот она:
Для начала качаем дистрибутив с www.freebsd.org. На данный момент имеем последний FreeBSD 10.1-RELEASE, выбираем файл в имени которого присутствует memstick (для платформы i386 это будет FreeBSD-10.1-RELEASE-i386-memstick.img).
Неверная кодировка при распаковке архивов ZIP и RAR
Снова речь пойдет о уже довольно старенькой, но все еще популярной Ubuntu 10.04. Проблема возникает при распаковке RAR или ZIP-архивов, полученных от win-пользователей - вместо русских букв имеем "крякозяблики".
Исправить ситуацию довольно просто, установив корректный p7zip:
$ sudo add-apt-repository ppa:frol/zip-i18n
$ sudo apt-get update
$ sudo apt-get install libnatspec0 p7zip-full
Теперь русские имена файлов в RAR и ZIP-архивах должны отображаться правильно.
CanoScan LiDE 110 в Ubuntu 10.04
Статья про очередную экзотику, но ведь и об этом кому-то надо писать, не всё же поднимать популярные темы. Это скорее даже не статья, а просто заметка.
Значит, имеем сканер Canon CanoScan LiDE 110, Ubuntu 10.04 и огромное желание заставить их работать вместе. В свежей версии Ubuntu всё работает "из коробки", так что статья актуальна именно для старенькой версии 10.04, 10.10 или для любого иного схожего дистрибутива Linux.
Для начала проверим определение сканера системой с помощью команд lsusb или scanimage -L. Примерный вывод команды lsusb приведен ниже (остальные usb устройства для наглядности не показаны):
$ lsusb Bus 001 Device 004: ID 04a9:1909 Canon, Inc.
Однако команда scanimage -L ничего оптимистичного не выдала. Отсюда делаем вывод, что физически система его видит, но утилита Sane, в той версии, которую имеем в дистрибутиве, его не поддерживает. Необходимо пересобрать некоторые библиотеки и установить последнюю версию Sane, чем сейчас и займемся:
$ sudo add-apt-repository ppa:robert-ancell/sane-backends $ sudo apt-get update $ sudo apt-get install libsane sane-utils
Подключаем внешний диск к FreeNAS 8.02. Неожиданная проблема с NTFS
Понадобилось тут создать резервную копию с сетевого накопителя, развернутого на FreeNAS 8.02 на внешний жесткий диск (USB разумеется). Система довольно приятная (хотя 7-ая ветка, на мой взгляд была лучше), есть и shell через web-морду и всякие графики мотиринга и прочие плюшки, а вот некоторые простые вещи приходится делать через одно место...
Диск подоткнул, система его благополучно увидела, дала ему имя da1 - все довольны, всем хорошо. Хорошо было не долго... при попытке смонтировать диск в файловую систему:
[root@freenas ~]# mount -t ntfs /dev/da1s1 /mnt/usbhdd/
Failed to mount '/dev/da1s1': Opetion not supported Access is denied because the NTFS journal file is unclean. Choices are: A) Shutdown Windows properly. B) Click the 'Safely Remove Hardware' icon in the Windows taskbar notification area before disconnecting the device. C) Use 'Eject' from Windows Explorer to safely remove the device. D) If you ran chkdsk previously then boot Windows again which will automatically initialize the journal. E) Submit 'force' option (WARNING: This solution it not recommended). F) ntfsmount: Mount the volume read-only by using the 'ro' mount option. Mount failed.
В общем понятно, что беда, а предложения как с ней жить дальше странные. Полазив по форуму поддержки, понял - придется подключить диск несколько иначе:
[root@freenas ~]# mkdir /mnt/usbhdd
[root@freenas ~]# ntfs-3g /dev/da1s1 /mnt/usbhdd
Где-то видел упоминание, что ntfs-3g не понимает путей длиннее 255 символов (может какой древней версии), но честно говоря сам не проверял, врать не стану. Если кто проверит и напишет, буду рад.
IPFW: ограничение скорости Internet (часть 2)
В первой части статьи IPFW: ограничение скорости Internet я описал основы построения каналов и потоков в сети DUMMYNET. Пришла пора рассмотреть конкретный пример работающей в небольшой сети, где все пользователи в равной степени делят один единственный канал связи.
Имеем DSL-соединение, потому канал асинхронный, скорость закачки - 5 Mbit/s, скорость отдачи - 512 Kbit/s.
Первым делом нам понадобится добавить поддержку DUMMYNET в ядро системы, заодно включим ядерный NAT и файрвол (считаю, что на шлюзе эти опции необходимы, в противном случае что это за шлюз такой получается):
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_NAT
options DUMMYNET
options HZ=1000
Подробно расписывать как собирать ядро я не буду - в блоге об этом уже писалось, да и в сети не проблема найти. Прейдем к настройке. В конфигурацию вашего файерволла /etc/rc.firewall добавляем наши правила:
IPFW: ограничение скорости Internet (часть 1)
Минули времена, когда Интернет был очень дорог и строго лимитированным. Сейчас задачи стали другими и на смену ограничений количества траффика пришла пора ограничивать скорость канала.
Наверняка, всем знакома ситуация, когда какой-либо ушлый пользователь в локалке "забивал" весь канал скачиванием торрентов или особо тяжелых файлов в несколько потоков. Вот и решил я умерить аппетиты таких несознательных товарищей, распределив ширину Internet канала "по справедливости", чтобы никто никому не мешал. В этом нам помогут каналы (pipe) фиктивной сети DUMMYNET. Система, как и прежде, FreeBSD - привыкайте к хорошему.
Впрочем, "справедливость" может быть разной, как в жизни (все равны, но кое-кто ровнее). Хватит предисловий, для начала давайте определимся что же такое DUMMYNET...
DUMMYNET - это системное средство, которое дает возможность управления сетевым трафиком, проходящим через различные сетевые интерфейсы, путем применения имитации различной ширины полосы пропускания, ограничения размера очереди, имитации задержек и потерь пакетов.
Стало легче? Думаю нет, потому начнем с самого начала...
Немного теории. Что такое pipe (каналы) и queue (очереди).
Прежде чем перейти непосредственно к настройке, следует разобраться что же такое pipe (каналы) и queue (очереди) DUMMYNET. Без знания основ, нормально настроить ничего не получится. Честно говоря, понимание сути работы каналов и очередей пришло не сразу, потому подробнее остановимся на этом вопросе.
FreeNX - терминальный сервер на FreeBSD
Имеется задача организовать работу 1С бухгалтерии с компьютеров под управлением Windows, MacOS и Linux. База 1С лежит на серваке с FreeBSD и раздается по сети для виндусовых клиентов посредством SAMBA.
Занавес... уже понятно, что в этом зоопарке без извращений не обойтись.
Спрашивается зачем всё так усложнять... ведь гораздо проще реализовать работу с 1С на единой системе, конкретно под неё заточенной, а именно Windows.
Однако стоимость такого решения не вызывает приятных ощущений у руководства, да и простые варианты, явно не наш выбор, тем более после Mac на Windows как-то не тянет.
Перейдем к практике. Известно, что 1С 7.7 не работает ни на Linux, ни тем более на MacOS, а жаль... Единственный, на мой взгляд, рабочий вариант - организация терминального сервера, на котором будет выполняться 1С, а результат работы отображаться на клиентских машинах.
Изменение даты создания файла в *nix
Потребовалось сменить дату создания нескольких файлов во FreeBSD, думал дел на 5 минут и честно говоря встрял... с ходу решить эту простую задачку как-то не сложилось. Пришлось поискать и результатом поисков явилась команда touсh, изменяющая временные штампы файла.
Честно говоря совсем не повседневная команда, потому и пришлось покопаться.
touch -t 201201130000 myfile
Опция -t задает новое значения для изменяемого временного штампа. Время устанавливается десятичным числом следующего вида:
[[ВВ]ГГ]ММДДччмм[.СС]
(ВВ - век, ГГ - год, ММ - месяц, ДД - день, чч - часы, мм - минуты, СС - секунды). Если ВВ не задан, то год ВВГГ берется из диапазона 1969-2068. Если СС не задано, то берется 0.
Проблема с SAMBA. Error Broken pipe
Жила-была одна бухгатерия, по старой русской традиции жила на 1С v7.7. Но пришли времена перемен и стали они переезжать на восьмёрку... Вот тут сказочка закончалась и начались суровые будни.
Хранением баз данных для 1С v8.1 и 8.2 (зачем-то сразу две версии используются - секретные программеры 1С меня в детали не посвятили) по прежнему занимался сервачок под управлением FreeBSD 7, с установленой SAMBA-3.0.36
Собственно пока бухгалтерия работала на семерке, нареканий не было, а вот новое творение компании 1С, время от времени стало вываливаться то на одной, то на другой машине. После чего приходилось индексировать базы.
Проброс портов в ядерном IPFW NAT
Обещанное продолжение статьи про настройку IPFW NAT в FreeBSD 8, работающего на уровне ядра системы. Из заголовка не трудно понять, что речь сегодня пойдет о том, как организовать проброс портов. Рассказывать, для чего вообще используется перенаправление портов здесь не стану - раз тема заинтересовала, то и определенные знания есть. Возможно, позже и напишу небольшой обзор для начинающих.
В сети достаточно много подробных инструкций, как настроить NAT во FreeBSD, используя демон natd. А вот про настройку ядерного NAT информацию найти достаточно сложно. Как-то эта тема обходится вниманием, видимо кто настраивал сам не спешит делиться своими наработками. Вообще, последнее время, замечаю мало интересных технических статей... так что буду, по мере сил, продолжать вносить свой маленький вклад в дело продвижения Open Source и FreeBSD в частности.
Для простоты продолжим настраивать открытый firewall - чтобы не загромождать пример правилами блокировки. Первым делом проверим в конфиге rc.conf следующие строки (интерфейс, смотрящий в интернет vr0):
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="vr0"
firewall_type="OPEN"
Синтаксис написания правил ядерного IPFW NAT следующий:
ipfw [-q] nat number config config-options
Консольный оконный менеджер Screen. Работаем в терминале с удобством.
Было время, когда параллельно основному месту работы, я подрабатывал удаленно в техподдержке у одного хостинг-провайдера (занимались в основном выделенными серверами на FreeBSD). Так вот там я узнал и стал активно использовать одну замечательную консольную программу - screen.
Screen – это полноэкранный оконный менеджер, который позволяет разделить физический терминал между несколькими независимыми процессами (обычно интерактивными облочками)
Да уж... определение из man звучит несколько заумно и вовсе не способствует приливу энтузиазма для изучения. Значит придется самому раскрыть некоторые прелести этой, без сомнения, нужной и удобной программы.
Чем может помочь screen при работе на удаленных серверах по ssh?
Наверное самым удобным, лично для себя, считаю возможность в любой момент покинуть активную ssh-сессию и в дальнейшем возобновить её.
Поясню на примере - допустим вы начали пересобирать ядро, или запустили какой-то длительный процесс, но дождаться его завершения нет возможности. Screen позволяет отключиться от текущего сеанса не прерывая выполняемой работы. В любой момент вы имеете возможность продолжить работу так, как будто вы и не отключались. Кроме того, при внезапном разрыве ssh соединения с сервером screen-сессия не прерывается, что очень удобно при работе по слабым каналам связи (к примеру GSM модемы).
Делаем резервную копию системы FreeBSD
Удивительно, аномально жаркое лето прошлого года, сервера организаций, с которыми сотрудничаю, пережили спокойно. В этом году техника решила испытать моё терпение - за не полных 2 месяца (июль и август) посыпалось три винта в разных серверах. Для любителей искать закономерности замечу, что все винты разных производителей. Два их них удалось поднять средствами FreeBSD. Для реанимации было достаточно запуска команды fsck в однопользовательском режиме для каждого раздела диска.
Сборка ядра FreeBSD. Если что-то пошло не так...
# make installkernel KERNCONF=NEW_KERNEL
В основном, процесс сборки, обновления и установки нового ядра FreeBSD проходит довольно гладко. Однако иногда бывает что-то пойдет не так, (увлёкшись чисткой лишнего, можно исключить и что-то нужное из состава ядра). Кстати, и на моей практике такое случалось пару раз. Ситуация осложнялась тем, что сервера находились удаленно и физического доступа к консоли сервера для принятия мер по оживлению системы нет.
Тут выхода два - либо самому ехать, либо объяснять по телефону как и что нужно сделать. И успех этой операции полностью зависит от вменяемости человека на другом конце провода. Собственно поэтому и решил написать статью, всегда проще дать ссылку, чем объяснять человеку на слух. Заодно расскажу про некоторые меры предосторожности при сборке нового ядра во FreeBSD.
read (subshell_pty…): No such file or directory (2)
При запуске mc (Midnight Commander) выскочило сообщение:
read (subshell_pty…): No such file or directory (2)
Отправим процессу сигнал продолжения работы (CONT). При получении сигнала CONT процесс возобновит свою работу с того момента как он был остановлен. В качестве shell у меня используется bash как в примере ниже.
killall -CONT bash
В результате этой манипуляции MC благополучно ожил.
FATAL: xcalloc: Unable to allocate 1 blocks of 4120 bytes!
После сборки нового SQUID (в моем случае 3.1.10) и запуска его в работу, в логах стал замечать такую неприятную вещь:
FATAL: xcalloc: Unable to allocate 1 blocks of 4120 bytes!
Причем такая ситуация происходила с завидной регулярностью, пару часов работает и привет - перезапускаемся с такой ошибкой. В общем проблему удалось решить уменьшив параметр cache_mem в конфиге. Заодно поправил и maximum_object_size_in_memory.
cache_mem 64 MB
maximum_object_size_in_memory 32 KB
Аварийный запуск системы из командной строки GRUB
Краткая инструкция по загрузке Windows и Linux из командной строки GRUB на случай каких-либо неполадок. Сразу оговорюсь, что сам grub2 должен запускаться, если же вы не можете попасть в консоль grub2, то вам скорее всего потребуется переустановка grub.
Запуск Linux с помошью командной строки GRUB
Нам понадобится написать всего 3 строчки: "set root", "linux" и "initrd" и в конце дать команду "boot".
set root=(hd0,5)
linux /boot/vmlinuz-2.6.32-generic root=/dev/sda5
initrd /boot/initrd.img-2.6.32-generic
boot
Почему FreeBSD а не Linux
Некоторые читатели моего блога интересуются почему я пишу в основном о FreeBSD и мало уделяю внимания Linux. Видимо пришло время рассказать чем мне так нравится FreeBSD на серверах. Данная статья не коим образом не умаляет достоинств Linux систем, я лишь попытаюсь изложить некоторые моменты, которые, возможно, кому-то помогут определиться с выбором ОС для своего сервера.
Первой системой, доставшейся мне "в наследство" от прежнего сиcадмина была Red Hat 6. В то время я ещё совершенно не был знаком ни с Linux, ни тем более с FreeBSD. Вернее знания мои заканчивались пробной установкой какого-то дистрибутива Linux на десктоп... а тут сразу рабочий сервер завода в полное распоряжение и крутись как знаешь.
Cтатическая маршрутизация в FreeBSD
Не так давно нужно было объединить 2 сети - обеспечить видимость серверов. Как-то до этого времени задач по маршрутизации не стояло. Эта небольшая статья о том как сделать статическую маршрутизацию на FreeBSD. Пример сети возьмем из хендбука:
RouterA - наш компьютер с FreeBSD, он же является маршрутизатором в Интернет. Его маршрут по умолчанию для связи с внешним миром 10.0.0.1. Собственно на его примере и покажу настройку маршрутизации.
RouterB в качестве шлюза использует 192.168.1.1, что видно из схемы.
Для начала посмотрим таблицу маршрутизации на RouterA (команда netstat -nr):
% netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0/24 link#1 UC 0 0 xl0 192.168.1/24 link#2 UC 0 0 xl1
IPFW NAT в FreeBSD 8
Сегодня речь пойдет о NAT, а точнее о kernel nat (IPFIREWALL_NAT). На новом сервере решил опробовать свеженькую FreeBSD 8 для организации выхода в интернет.
Изначально о встроенном в ядро NAT не помышлял и cделал по старинке, использую демон NATD. Всё замечательно заработало, однако при запуске сервера в реальную работу вылезло одно не приятное "но".
При подключении по SSH на сервер наблюдались жуткие тормоза программ, использующих псевдографику, например MC прорисовывал панельки в течение минуты! Такая же ситуация наблюдалась и в sysinstall. Медленный заход в MC мог наблюдаться например, если не правильно указаны или не верно настроены DNS адреса, но здесь был не тот случай, да и характер прорисовки экрана иной. Причем локально с консоли всё работало шустро. Выяснилось, что при отключении NATD скорость работы по SSH восстанавливается.
Честно говоря природу данного явления так и не выяснил. Зато решил опробовать встроенный в ядро NAT (эта возможность появилась начиная c 7 версии FreeBSD).
Настройка PPPoE-соединения во FreeBSD
О настройке PPP соединения в FreeBSD я уже писал на страницах блога - настройка ADSL PPPoE соединения в FreeBSD. Данная статья во многом её повторяет и создана с одной лишь целью - помощь в подключении к новому региональному провайдеру Мега-НН.
Впрочем, подойдет и для любого другого провайдера, предоставляющего доступ к Интернет посредством PPPoE-соединения по имени и паролю.
Для начала следует привести файл /etc/ppp/ppp.conf к такому виду:
default: set log Phase tun command megann: set device PPPoE:msk0 set authname ISP_login set authkey ISP_password set dial set login enable dns add default HISADDR