Мы — долго запрягаем, быстро ездим, и сильно тормозим.



www.lissyara.su —> www.lissyara.su —> My config FreeBSD - 2

'FreeBSD с нуля' или 'Пособие на память - 2'

Автор: Fomalhaut.


ОГЛАВЛЕНИЕ

1. "СБОРНИКИ" полезностей "всё в одном"
2. Первичная настройка доступа по SSH
3. Утилита для работы в пакетами: pkgng
4. Порты: установка, настройка, удаление программ

  • а) Конфигурирование порта
  • б) Установка порта
  • в) Обновление портов
  • г) Смена версий программ
  • д) Удаление портов
  • е) Удаление неиспользуемых зависимостей
  • ё) Аудит безопасности портов
    5. Подсветка синтаксиса (less, man)
    6. Установка FreeBSD через SSH
  • а) Запуск локального сервера sshd
  • б) Запуск удалённосго скрипта по сети
    7. Виртуальные оконные менеджеры
    8. Отсылка локальной почты
  • а) штатный SendMail
  • б) SSMTP вместо SendMail
    9. NFS (network file system)
  • а) сервер
  • б) клиент
  • в) автоматическое монтирование
    10. Параметры sysctl
    11. Fibre Channel
  • а) В базовой системе
  • б) Во FreeNAS
  • в) Дополнительная информация
    12. Infiniband

    1. "СБОРНИКИ" полезностей "всё в одном"

    Unix Toolbox
    Очень полезные команды Linux на одном листе
    Полезные команды FreeBSD

    2. Первичная настройка доступа по SSH

    Написано да-авно для себя и перенесено из ЖЖ. :)
    Т.к. юникс/линуксами только недавно вплотную стал заниматься, то многое, что делал впервой, забывается, если не записать где-то. Вот решил в ЖЖ оформить: может кому еще пригодится.
    Произвожу установку FreeBSD 8.1 на сервер IBM System x3550 с 2,5" SAS "винтами".
    Условимся, что все команды, названия файлов и, тем более, опции команд, даются в тексте именно такими, какие должны быть: в требуемом описываемой ситуацией регистре. И как обычно: $ означает, что пользователь с обычными правами (не полными, естественно), # - права пользователя root.
    Устанавливаем систему через пункт Standart (описание установки - отдельная тема, хорошо освещенная в Инете и книгах). Главное - установить sshd, чтобы потом можно было отнести сервер в серверную и поставить в стойку, дабы разумени... шумом своим не мешал нам. Будем подключаться к нему по сети по протоколу SSH.
    Остальный программы будем ставить по необходимости из портов.
    После установки производим настройку пользователя, которым будем подключаться к серверу по SSH: FreeBSD удаленно не дает доступ полный доступ пользователям по команде
    $ su
    

    , если они не входят в группу wheel.
    Для этого регистрируем нужных пользователей в FreeBSD командами adduser (проще и рекомендованей) или pw (для опытных пользователей).
    После этого вводим:
    $ vi /etc/groups
    

    Появляется окошкоредактора vi с файлом /etc/groups.
    Курсор перемещаем в конец строчки, в начале которой пишется wheel - по умолчанию выглядит так (курсор останавливается на последнем символе):
    wheel:*:0:root
    

    Нажимаем A (курсор смещается за последний символ) и через запятую дописываем нужных нам пользователей). Получится примерно такое:
    wheel:*:0:root,IvanovRP,FrolovSA
    

    Кроме это его есть команды: x (удаление выделенного курсором символа), a (вставка со следующего, за выделенным, символа).
    После окончания ввода для сохранения изменений и выхода набираем ZZ и всё.
    Если воспользоваться редактором ee, то там проще:
    $ ee /etc/groups
    

    Естественно, добавлять сюда надо ТОЛЬКО тех пользователей, которые должны иметь удаленный доступ. Соображения безопасности.


    Для удаленного входа запускаем приложение, позволяющее подключаться по протоколу SSH (например PuTTY). Первое подключение к серверу вызовет предложение принять сертификат сервера для шифрования траффика.
    Но для того, чтобы подключиться по SSH к соотв.системе, на ней должен быть запущен демон sshd. Он может быть запущен двумя способами:
    1. сразу системой стартовых скриптов rc.d через конфигурационный файл /etc/rc.conf, добавив в него:
    sshd_enable="YES"
    

    2. через супердемона inetd, раскомментировав соответствующую строку в его конфигурационном файле /etc/inetd.conf (для IPv4 и IPv6):
    #ssh    stream  tcp     nowait  root    /usr/sbin/sshd          sshd -i -4
    #ssh    stream  tcp6    nowait  root    /usr/sbin/sshd          sshd -i -6
    

    А inetd, в свою очередь, запускается через тот же /etc/rc.conf:
    inetd_enable="YES"
    



    Удаленный вход с правами пользователя root проходит в два этала:
    1. На запрос 'login as:' вводим имя пользователя, затем жмем Enter и на запрос 'Password:' - пароль этого пользователя. Если всё правильно - получаем права данного пользователя.
    2.Вводим команду
    $ su
    

    и на запрос 'Password:' - пароль пользователя root.
    Всё - удаленно можно делать практически всё. :):):)

    3. Утилита для работы в пакетами: pkgng

    С выходом версии 10.0 многое в проекте FreeBSD изменилось. Конечно, эти новшества были "обкатаны" на всех тех сборках, что были до RELEASE (альфы, беты, кандидат-релизы), но это сборки именно для тестирования.
    На данный момент при обновлении ПО, установленного из портов, отображается информация, что старые утилиты для работы с пакетами с сентября работать не будут и к тому времени необходимо перевести все установленные системы версий 8, 9 и 10 на работу с новой системой работы с пакетами: pkgng. Старая система для работы с пакетами (состоящая из утилит pkg_info, pkg_add, pkg_delete, pkg_create, pkg_version, pkg_update с общим названием pkg_install) с вышеуказанной даты работать не будет.
    Для перехода на необходимо установить саму утилиту:
    $ cd /usr/ports/ports-mgmt/pkg
    $ make install clean
    

    Либо, если при первом вызове pkg этой утилиты в системе не было установлено, то система предложить её установить. Соглашаемся.
    Теперь всё готово для перехода на pkgng.
    Сделаем ("на всякий пожарный") архив с информацией по установленным пакетам в старом формате:
    $ cd /var/db/pkg/
    $ tar zcvf /var/db/pkg-old.tar.gz
    

    Для указания того, что мы перешли на новую системы, в /etc/make.conf пропишем следующее:
    # указание программам, например, portupgrade,
    # что необходимо использовать pkgng
    WITH_PKGNG=yes
    # указание, чтобы при обновлении пакетов не выводилась
    # информация о необходимости перехода на pkgng
    NO_WARNING_PKG_INSTALL_EOL=yes
    

    И переведём базу из старого формата в новый специальной утилитой:
    $ pkg2ng
    # если используется portupgrade, то ещё необходимо
    $ pkgdb -fu
    

    В конце работы утилиты pkg2ng вероятно будет выдано сообщение:
    pkg: PACKAGESITE in pkg.conf is deprecated. Please create a repository configuration file

    Для решения этой проблемы восстановил файл pkg.conf "по умолчанию":
    $ mv /usr/local/etc/pkg.conf /usr/local/etc/pkg.conf-0
    $ cp /usr/local/etc/pkg.conf.sample /usr/local/etc/pkg.conf
    

    Создадим конфигурационный файл для работы с удалёнными репозитариями:
    $ mkdir -p /usr/local/etc/pkg/repos
    $ touch /usr/local/etc/pkg/repos/FreeBSD.conf
    

    И в этот файл /usr/local/etc/pkg/repos/FreeBSD.conf впишем:
    FreeBSD: {
       url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
       mirror_type: "srv",
       enabled: yes
    }
    

    И обновим базу пакетов:
    $ pkg update
    # после этого можно использовать поиск
    $ pkg search mysql
    

    Теперь в каталоге /var/db/pkg/ появились новые файлы с данными о пакетах в форматах SQLIte и XML:
    $ ls -l /var/db/pkg/
    total 16148
    -rw-r--r--  1 root  wheel   7610368 16 мар 12:13 local.sqlite
    -rw-r--r--  1 root  wheel  36670464 12 мар 10:28 repo-FreeBSD.sqlite
    -r--r--r--  1 root  wheel   3140957 16 мар 12:15 vuln.xml
    

    , где
    local.sqlite - база установленных пакетов и портов в формате pkgng;
    repo-FreeBSD.sqlite - данные об удалённых репозиториях (появится при первом использовании);
    vuln.xml - данные аудита безопасности (появится при использовании pkg audit.
    Всё, теперь старые утилиты из pkg_install будут сообщать, что вместо них необходимо использовать pkg.
    Для избавления "от старых привычек" удалим (теперь уже посредством pkgng) ранее используемые утилиты. Например, мой список был таков:
    $ pkg delete pkg_cutleaves
    $ pkg delete portaudit
    

    Функционал этих утилит "вшит" теперь в pkg:
    # вместо pkg_cutleaves
    $ pkg autoremove
    # вместо portaudit
    $ pkg audit -F
    

    Дополнительно: ссылка 1, ссылка 2, ссылка 3, ссылка 4, Использование пакетного менеджера PKGNG во FreeBSD
    И ещё о новшествах: OptionsNG.

    4. Порты: установка, настройка, удаление программ

    Обслуживание (установка, обновление, удаление) программ с помощью системы портов - главное удобство BSD систем. А многие пользователи BSD говорят - существенное преимущество BSD систем перед Linux.

    а) Конфигурирование порта

    Для конфигурирования порта перед его установкой необходимо предварительно зайти в каталог порта и там уже сконфигурировать его:
    $ cd /usr/ports/databases/mysql55-server/
    $ make config
    

    Сброс конфигурации порта на стандартную:
    $ make rmconfig
    

    Не у всех портов есть необходимость в конфигурировании.
    Если необходимо посмотреть, в какой конфигурации установлена программа, то это можно сделать, посмотрев результаты работы команд:
    $ ldd `which postfix`
    

    где вместо postfix задается имя просматриваемой программы, а результатом является список используемых подключаемых библиотек; и
    $ cd /usr/ports/mail/postfix
    $ make showconfig
    

    Результатом работы которой будет список опций компиляции, которые были использованы установлены при запуске make config перед компиляцией программы.

    б) Установка программ из портов

    Предварительно необходимо установить порты на систему, где стоит FreeBSD. Для этого может понадобится найти, где находится порт устанавливаемой программы:
    $ cd /usr/ports/
    $ make search name="bash"
    

    А можно по другому:
    $ whereis bash
    

    После этого можно устанавливать программы. Для этого достаточно зайти в каталог программы, скомпилировать и установить программу.
    Например, для установки командного интерпретатора bash надо выполнить следующее:
    1. переходим в каталог программы:
    $ cd /usr/ports/shells/bash/
    

    2. компилируем и чистим каталог порта (перед компиляцией, в зависимости от устанавливаемой программы, может быть выдано окошко с настройкой конфигурации программы: добавление/удаление модулей/возможностей; надо будет выбрать нужно и 'Ok'). Если не было выдано сообщений об ошибке - программа установлена и готова к работе или предварительной настройке, о чем обычно выдается соответствующее сообщение.
    $ make install clean
    

    3. Если необходимо, чтобы bash был загружаемым по умолчанию для какого-то пользователя, то:
    $ chpass -s /usr/local/bin/bash <user_name>
    

    Всё: после очередной регистрации в данной системе пользователю, указанному в параметре <user_name> будет автоматически загружен командный процессор bash.
    Стоит, однако, сказать, что кроме себя программы устанавливают (или могут затребовать) дополнительные компоненты, программ, библиотеки, требуемые им для работы. Поэтому, если после установки программы глянуть список установленных программ, то можем увидеть что-то подобное:
    $ pkg_info
    bash-3.2.33 The GNU Project's Bourne Again SHell
    cvsup-without-gui-16.1h_2 General network file distribution system optimized for CVS
    gettext-0.16.1_3 GNU gettext package
    libiconv-1.11_1 A character set conversion library
    libtool-1.5.24 Generic shared library support script

    Где cvsup-without-gui-16.1h_2 - программа поддержки CVS-репозитория, а все остальные программы и библиотеки относятся к bash.
    Собственно не только bash-у они могут быть необходимы для работы.
    Для просмотра зависимостей порта совершенно не обязательно устанавливать порт. Достаточно зайти в каталог порта и выполнить соотв команду для вывода списка зависимостей порта.
    $ cd /usr/ports/<путь_к_порту>/<имя_порта>
    $ make pretty-print-build-depends-list
    

    Еще ситуация: бывает, что ранее установленная программа скомпилирована не с той функциональностью, которая необходима в данный момент. У меня, например, был установлен postfix в "чистом" виде, т.е. без дополнений для работы с другими программами (MySQL, PostgreSQL, OpenLDAP и пр.), а надо было обеспечить поддержку OpenLDAP.
    Сама переустановка... Что может быть проще! :)    Только перед обновлением рекомендуется сохранить каталог /usr/local/etc/postfix/ где-нибудь - это каталог с основными конфигурационными файлами postfix.
    Перед обновлением необходимо перейти в каталог порта обновляемой программы (для примера - postfix)
    $ cd /usr/ports/mail/postfix
    

    и уж после этого выполнить
    $ make config
    

    Настроить требуемую конфигурацию и
    $ make clean all reinstall clean
    

    В случае, если программа отказывается устанавливаться, т.к. её старая копия еще активна, то предварительно необходимо удалить старую установку (см. ниже).

    в) Обновление программ

    Для обновления установленных портов существует множество методов и утилит. Лично по моему мнению, на данный момент очень удобно пользоваться портом portupgrade:
    $ cd /usr/ports/ports-mgmt/portupgrade
    $ make install clean
    

    Перед использование рекомендуется обновить базу портов до актуальной.
    Просмотр портов, требующих обновления:
    $ pkg_version -v | grep "need"
    apache-2.0.63_3                     <   needs updating (port has 2.0.64)
    glib-2.24.2                         <   needs updating (port has 2.26.1_1)
    mrtg-2.16.4,1                       <   needs updating (port has 2.17.0,1)
    mysql-client-5.1.51_1               <   needs updating (port has 5.1.54_1)
    mysql-server-5.1.51_1               <   needs updating (port has 5.1.54_1)
    portupgrade-2.4.6_4,2               <   needs updating (port has 2.4.8_1,2)
    

    Список всех установленных пакетов без описания:
    $ pkg_info | awk '{ print $1 }'
    

    Список зависимостей, требуемых приложением, и ещё не установленных в системе:
    $ pkg_info -xL portupgrade | grep man
    

    Через portupgrade:
    # вывод подробной информации об обновлениях порта и зависимостей (-r)
    $ portupgrade -nr <имя_порта>
    # интерактивное (-i) обновление порта и зависимостей (-r)
    $ portupgrade -ir <имя_порта>
    

    Другие возможности: ссылка1, ссылка2.

    г) Смена версий программ

    При возникновении необходимости смены версии программы, установленной из портов первоначально надо проверить базу портов на противоречивость и исправить, если таковые есть:
    $ pkgdb -Ff
    

    Непосредтственно смена версии (в примере, perl 5.16 на perl 5.20):
    $ cd /usr/ports/
    # при использовании пакетов
    $ pkg set -o lang/perl5.16:lang/perl5.20
    # при использовании портов
    $ portupgrade -o lang/perl5.20 -f perl-5.16.\*
    # Иногда возникает необходимость при обновлении
    # предварительно отключить проверку конфликтов
    $ env DISABLE_CONFLICTS=1
    

    И последний штрих - обновление рекурсивно всех пакетов, для которых perl - основной:
    $ cd /usr/ports/
    # при использовании пакетов
    $ pkg install -Rf lang/perl5.20
    # при использовании портов
    $ portupgrade -fr lang/perl5.20
    

    По окончании версия ПО сменена и сопутствующие компоненты - тоже.

    д) Удаление программ

    И последнее, но не менее важное, чем предыдущие пункты: удаление программы, утилиты, библиотеки производится командой
    $ make deinstall
    

    в каталоге соответствующей программы. Либо
    $ pkg_delete <name_programm>
    

    в любом месте - не обязательно в каталоге соответствующей программы.
    Одно 'но': удаление конфигурационный и иных файлов, кроме исполняемых, остается ручной работой, поэтому желательно, чтобы где-то это фиксировалось на случай возможного 'отката'.
    Правда и для этого случая за годы развития FreeBSD появились как новые утилиты, так и расширились возможности старых.
    Так, например, можно удалить сразу всё (пакеты и остатки от них (библиотеки и пр.)):
    $ pkg_delete -av
    $ cd /usr/ports
    $ portsclean -CDL
    

    Здесь использована очень полезная утилита portsclean, которая позволяет очень качественно вычищать остатки деинсталлированных портов, пакетов и ненужные библиотеки или устаревшие пакеты:
    portsclean -C # Чистка /usr/ports/*/*/work каталогов
    portsclean -D # Удаляет все неактуальные искодники из /usr/ports/distfiles
    portsclean -CDLP # удалит work каталоги в коллекции портов, удалит неактуальные
                  # дистфайлы, удалит неактуальные библиотеки, а также неактуальные
                  # версии пакаджей в /usr/ports/packages/All
    

    Так же можно воспользоваться хорошим описанием пакета утилит portupgrade: Хитрости работы с портами в FreeBSD, использование portupgrade (freebsd install port nfs).
    И ещё немного от Лиссяры.

    е) Удаление неиспользуемых зависимостей

    Общая информация.
    Специализированные утилиты:
    1. pkg-orphan (perl-овый скрипт):

  • -a - добавить порт в список сохраняемых;
  • -k - просмотр списка сохраняемых пакетов;
  • -l - просмот списка пакетов, от которых ничего не зависит;
    2. pkg-tree:
  • -v - зависимости зависимостей;
  • -t - чтобы показывать только верхнего уровня пакетов;
  • -b - чтобы показать только нижний уровень пакеты;
  • -tq - даст список верхнего уровня пакетов без их зависимостей, установка только этих пакетов должны установить всех установленных пакетов;
    3. pkg_cutleaves:
  • -lc - выод списка кандидатов на удаление (надо внимательно сделить, чтобы не удалить нужное);
  • -x - учитывать исключения (педварительно занесённые в /usr/local/etc/pkg_leaves.exclude - одна строка - один пакет);
  • -R - удалить рекурсивно все зависимости удаляемого пакета, если их никто, кроме этого пакета, не использует;
    3. pkg_rmleaves;
    4. pkg_info (есть и у него полезные ключи):
  • -r позволяет показать зависимости указанного порта;
  • -R позволяет показать зависимости от указанного порта.
    Здесь только некоторые клчи приведены: за деталями лучше обратиться к "манам". В качестве небольшого бонуса дополнительные ссылки для этих команд: pkg-orphan, pkg-tree, pkg_cutleaves, pkg_rmleaves.

    ё) Аудит безопасности портов

    Для автоматического контроля проблем с безопасностью у установленных в системе портов (вместо постоянного штудирования соответствующих рассылок) создана специальная утилита portaudit:
    $ cd /usr/ports/ports-mgmt/portaudit
    $ make install clean
    

    Утилитой пользоваться очень просто:
    $ portaudit -Fa
    

    т.е. сказать ей, чтобы была скачана свежая база (F) и проверены все порты (a). Более полное описание параметров по русски: ссылка. Или, конечно, оригинальные "маны". :)

    5. Подсветка синтаксиса (less, man)"

    Для более удобного чтения текста в less предусмотрено несколько стилей написания. Но все они выводятся одним цветом, что не очень удобно.
    Между тем можно использовать переопределение переменных утилиты less для установки своих цветовых предпочтений:
    # Полужирный текст
    LESS_TERMCAP_md 'Esc-последовательность' # начало
    LESS_TERMCAP_me 'Esc-последовательность' # окончание
    # Подчеркнутый текст
    LESS_TERMCAP_us 'Esc-последовательность' # начало
    LESS_TERMCAP_ue 'Esc-последовательность' # окончание
    # Выделенный текст (инфобокс)
    LESS_TERMCAP_so 'Esc-последовательность' # начало
    LESS_TERMCAP_se 'Esc-последовательность' # окончание
    # Мерцающий текст
    LESS_TERMCAP_mb 'Esc-последовательность' # начало
    LESS_TERMCAP_me 'Esc-последовательность' # окончание
    

    Зная коды цветов можно указать свои цвета. Например, вариант для csh:
    setenv LESS_TERMCAP_mb '^[[0m^[[33m'
    setenv LESS_TERMCAP_md '^[[0m^[[33m'
    setenv LESS_TERMCAP_me '^[[0m^[[36m'
    setenv LESS_TERMCAP_se '^[[0m^[[37m'
    setenv LESS_TERMCAP_so '^[[0m^[[38m'
    setenv LESS_TERMCAP_ue '^[[0m^[[32m'
    setenv LESS_TERMCAP_us '^[[0m^[[31m'
    

    Здесь указывается (но не обязательно) специальный символ "^[", который вводится кодом символа 027 после нажатия комбинации клавишь Ctrl-O, например, в ee (FreeBSD), nano (Linux).
    Или другой вариант цветовой схемы для bash:
    export LESS_TERMCAP_mb=$'\033[01;36m'
    export LESS_TERMCAP_md=$'\033[01;32m'
    export LESS_TERMCAP_me=$'\033[0m'
    export LESS_TERMCAP_mu=$'\033[01;37m'
    export LESS_TERMCAP_se=$'\033[0m'
    export LESS_TERMCAP_so=$'\033[01;44;33m'
    export LESS_TERMCAP_ue=$'\033[0m'
    export LESS_TERMCAP_us=$'\033[01;36m'
    

    После правки конфигов оболочек не обязательно перелогиниваться: достаточно сделать команду (для bash):
    $ source ~/.bashrc
    

    Теперь читать текст стало значительно приятней. :)

    6. Установка FreeBSD через SSH

    а) Запуск локального сервера sshd

    Грузимся с инсталляционного диска, выходим в консоль.
    Создаем каталог и монтируем раздел /etc:
    $ mkdir /tmp/etc
    $ mount_unionfs /tmp/etc /etc
    

    Разрешаем вход под root в SSH:
    $ sed -i.bak -e 's/\#PermitRootLogin\ no/PermitRootLogin\ yes/g' \
    /etc/ssh/sshd_config 
    

    Или делаем тоже самое через редактор ee (он имеется на установочном диске), открыв файл /etc/ssh/sshd_config и установив параметр (по умолчанию "no"):
    PermitRootLogin yes
    

    Задаем пароль для root:
    $ passwd root
    

    Задаем адрес для интерфейса re0 и шлюз "по умолчанию":
    # прямым указание
    $ ifconfig re0 inet 192.168.1.143 netmask 255.255.255.0 up
    # или через DHCP
    $ dhclient re0
    $ route add default 192.168.1.1
    

    Запускаем демон SSH сервера:
    $ /etc/rc.d/sshd onestart
    

    Теперь можно логиниться по SSH на адрес 192.168.1.143:
    $ ssh root@192.168.1.143
    

    Принимаем ключ и логинимся. Всё - теперь можно не напрягаться в локальной консоли сервера. :)

    7. Виртуальные оконные менеджеры

    Fomalhaut: Кстати, Кот, как можно подключившись по ССШ к серверу запустить компиляцию, закрыть соединение, а стервер себе продолжает спокойно компилять?
    MATPOCKuH: дык эта. 3 варианта
    MATPOCKuH: 1. nohup 2. sysutils/screen 3. sysutils/tmux

    Устанавливаем screen:
    $ cd /usr/ports/sysutils/screen
    $ make install clean
    $ rehash
    

    Создаём и открываем на редактирование конфигурационный файл .screenrc (по умолчанию он не создаётся):
    # для всех пользователей
    $ ee /usr/local/etc/screenrc
    # только для текущего пользователя
    $ ee ~/.screenrc
    

    Заполняем примерным содержимым:
    ###################################
    ### Screenrc configuration file ###
    ###################################
    
    # Приветственное сообщение off|on
    startup_message off
    
    ### включаем utf8, ага
    # defutf8 on
    ### настройка режим управления потоком окна.
    # defflow on
    ### включает login-режим (для обновления /var/run/utmp)
    # deflogin on
    
    ### Визуальный биппер (on|off)
    # vbell on
    ### то, что он бипер пишет в строке статуса
    vbell_msg "Bz-z-z...  "
    ### сообщение если в фоновом окне bell character, ^G
    bell_msg "Bell %n"
    ### сообщение если есть активность в наблюдаемом окне
    activity "Activity on %n"
    
    ### по умолчанию детатчится при разрыве связи с терминалом
    autodetach on
    ### как же мы без скринсейвера
    idle 30 eval "screen cmatrix -f -o -u 10" "idle 0"
    # "Красивые" подписи
    nethack on
    
    ### Количество строк истории хранить в буфере
    defscrollback 2000
    
    ### --- Строка состояния в screen (hardstatus) ---
    ### Из-за даты-времени в правом нижнем углу были проблемы с последними
    ### версиями screen: статус-строка дублировалась.
    ### Без дата-времени проблема исчезла
    # hardstatus alwayslastline "%{=b}%{g}Window: %{b}%w %=%{kG}%с %D %Y-%m-%d"
    hardstatus alwayslastline "%{=b}%{g}Window: %{b}%w %="
    ### Расшифровка:
    ### здесь (я беру параметры в одинарные кавычки):
    ### '%{=b}' - черный цвет фона строки. 
    ### '%{g} Window: ' - слово 'Window: ' зеленоe
    ### '%{b}%w' - список запущенных окон (звездочкой указыжется активное окно)
    ### '%=' - все, что идет после этого выравнивается по правому краю
    ### '%{kG}%с' - показывает время в 24-часовом формате
    ###             (%C%A - 12часовой с PM|AM)
    ### '%D, %Y-%m-%d' - показывает дату
    
    ### --- Привязки специальных клавиш ---
    ### отделить сессию от текущего терминала
    # bindkey -k k7 detach
    ### уничтожить текущую сессию F8
    # bindkey -k k8 kill
    ### создать новое окно F9
    # bindkey -k k9 screen
    ### вернуться к предыдущему окну F11
    # bindkey -k F1 prev
    ### перейти к следущему окну F12
    # bindkey -k F2 next
    
    ### --- Удаляем некоторые ненужные или небезопасные комбинации ---
    bind .
    bind ^\
    bind \\
    bind ^h
    bind h
    

    Можно ещё добавить создание при запуске необходимых окон:
    screen -t htop 0 htop
    screen -t mc 1 mc
    screen -t finch 2 finch
    

    В файле .screenrc и в "командном" режиме доступны следующие команды (их можно ввести в процессе работы программы, путем нажатия 'Ctrl-a :'):

  • acl-команды, определяющие доступ к сессии, привилегии - как для пользователей, так и для групп;
  • bind-команды - привязка  клавиш;
  • команды оформления;
  • другие команды.
    Для управления можно использовать параметры командной строки:
    $ screen --help
    

    Наиболее важные:
    # Подключение к отсоединённой сессии [pid] или в первому screen:
    $ screen -d -r [pid.tty.host]
    # Присоединиться к активному screen. Удобно для обучения
    $ screen -x
    # Вывод списка отсоединённых screen без запуска новой копии screen
    $ screen -list
    # удалить остатки о "мёртвых" менеджерах
    $ screen -wipe
    

    Так же доступен большой "парк" комбинаций горячих клавишь.
    Кратких список наиболее употребимых (остальное - в "манах"):
    Комбинация
    Описание
    Ctrl+a c создание нового окна
    Ctrl+a a переключение между последними активными окнами
    Ctrl+a <НОМЕР> выбор окна по номеру. Ctrl+a (p|n) - циклическое перемещение между окнами. p - prev
    Ctrl+a " список окон для переключения
    Ctrl+a A изменить заголовок окна (Аналогично вводу команды title при нажатии 'Ctrl+a')
    Ctrl+a C очистить окно
    Ctrl-a n|p следующее|предыдущее окно (next|prev)
    Ctrl+a F подогнать размер окна под текущий размер терминала
    Ctrl+a H протоколирование окна в файл screenlog.<НОМЕР ОКНА>
    Ctrl+a K уничтожить окно
    Ctrl+a M режим слежения за активностью в окне. Если в момент этого вы находитесь в другом окне - в подсказке будет выведено: 'activity in window <НОМЕР ОКНА>'
    Ctrl+a r переключение режима переноса по словам. (wrap)
    Ctrl+a S очень интересный режим работы: сплит (текущее окно разделяется на две части и в обоих можно открыть по новому окну)
    Ctrl+a TAB переключение между окнами
    Ctrl+a Q выход из режима сплит
    Ctrl+a Esc режим скроллинга (он же режим копирования: для копирования подведите курсор к нужному месту и нажмите пробел)
    Ctrl+a ] вставка выделенной области
    Ctrl+a x запереть менеджер. При вкомпиленной поддержке PAM - для разблокировки нужно ввести пароль пользователя от которого запущен менеджер. В обратном случае пароль для разблокировки будет запрошен при блокировании
    Ctrl-a k закрыть текущее окно с подтверждением
    Ctrl-a ? задать вопрос (очень полезно)

    Для того, чтобы в screen работала мышь, надо в конфигурационном файле соответствущего шелла указать следующее:
    # для bash в ~/bashrc
    export TERM=xterm-256color
    # для csh в ~/.cshrc
    setenv TERM xterm-256color
    

    В дополнение: ссылка 1.
    Для графических программ существует свой аналог виртуального оконного менеджера: Xpra.

    8. Отсылка локальной почты

    а) штатный SendMail

    Указываем адрес пересылки для настраиваемого алиаса в файле /etc/aliases. Например, для root-а раскомментируем и подправим:
    root:   odmin@mydomain.ru
    

    Не забываем перстроить db файл исходя из нового состояния /etc/aliases:
    $ newaliases
    

    Если целевой почтовый сервер (в данном случае domain.ru) доступен и определяется через DNS нормально, то больше ничего делать не надо.
    Но если целевой почтовый сервер недоступен или он по DNS определяется по другому имени и адресу, чем доступен вам (например, если NAT-ом представлен в Интернет-е) настроим установленный MTA (Mail Transport Agent), установленный в системе. По умолчанию в FreeBSD установлен sendmail, поэтому для него в файле /etc/mail/mailertable:
    mydomain.ru		esmtp:[192.168.1.4]
    

    И сохранив этот файл перестроим его:
    $ makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
    

    Всё, теперь на свой адрес odmin@mydomain.ru будем получать все сообщения, что будут отправляться root-у локально.

    б) SSMTP вместо SendMail

    Если необходимо только лишь отсылать почтовые сообщения (например, сообщения для root на свой почтовый ящик), то нет смысла для этого настраивать и использовать sendmail - тяжеловесный, сложный в настройке.
    Есть несколько вариантов, один из которых лично мне понравился своей простотой и лёгкостью - ssmtp:
    $ cd /usr/ports/mail/ssmtp
    $ make install clean
    

    Перед использованием ssmtp надо отключить sendmail, устанавливаемый и запускаемый "по умолчанию". Для этого надо в /etc/rc.conf вписать (или извенить этот параметр, если он был указан):
    sendmail_enable="NO"
    sendmail_submit_enable="NO"
    sendmail_outbound_enable="NO"
    sendmail_msp_queue_enable="NO"
    

    Для удаления sendmail из списка рабочих процессов теперь надо либо перезагрузиться (что не есть "unix-like"), либо завершить его процессы:
    $ killall sendmail
    

    Для того, чтобы система воспринимала ssmtp, как MTA (хотя он не MTA в его полном смысле) надо внести следующие исправления в файл /etc/mail/mailer.conf:
    sendmail        /usr/local/sbin/ssmtp
    send-mail       /usr/local/sbin/ssmtp
    mailq           /usr/local/sbin/ssmtp
    newaliases      /usr/local/sbin/ssmtp
    hoststat        /usr/local/sbin/ssmtp
    purgestat       /usr/local/sbin/ssmtp
    


    В некоторых источниках два последних параметра указывают по другому:
    hoststat	/usr/bin/true
    purgestat	/usr/bin/true
    



    Теперь осталось создать конфигурационные файлы, которые можно взять из примера:
    $ cd /usr/local/etc/ssmtp
    $ cp ssmtp.conf.sample ssmtp.conf
    $ cp revaliases.sample revaliases
    

    Пример содержания файла /usr/local/etc/ssmtp/ssmtp.conf:
    root=server@mydomain.ru               # от кого шлём письма
    mailhub=smtp.gmail.com:587            # сервер, принимающий нашу почту
    rewriteDomain=host-local.mydomain.ru  # 
    hostname=host-local.mydomain.ru       # имя хоста (желательно указать реальное)
    FromLineOverride=YES                  # Поле From: может задавать MUA
    UseSTARTTLS=YES                       # используем зашифрованное соединение
    AuthUser=gmail_user@gmail.com         # авторизация: имя пользователя
    AuthPass=P@s$w0rd                     # авторизация: пароль
    Debug=NO                              # режим отладки
    

    Прописываем алиасы для ssmtp в файле /etc/local/ssmtp/revaliases:
    # локальный_пользователь:исходящий_адрес:почтовый_сервер_отсылки
    root:myserver@mydomain.ru:mail.mydomain.ru
    

    В профиле пользователей исправляем "имена". Через vipw - специальную утилиту для таких случаев, которая по окончании редактирования сделает доп.операции, чтобы изменения были проведены корректно. Если имена не исправить, то, например, от root будут поступать с именем "Charlie &".
    Настройка завершена. Проверяем работу программы:
    # mail root
    Subject: test ssmtp
    test ssmtp
    .
    EOT
    

    Или так:
    $ echo "Test message" | mail -s Test mail@mail.ru
    

    Если письмо пришло - всё завершено. Нет - надо разбираться, а для отладки можно использовать параметр Debug=YES.

    9. NFS (network file system)

    В мире unix/linux есть много разных сетевых файловых систем. Но самое распространённое и универсальное - NFS.
    Данная ФС построена состоит из двух частей: сервера и клиента. Подробней о каждом.

    а) сервер

    Для работы NFS сервера необходимо запустить три демона: rpcbind, nfsd, mountd. Их параметры указываются в файле /etc/rc.conf:
    # Демон удалённого вызова процедур (rpcbind)
    # -h - использовать только указанный адрес
    rpcbind_enable="YES"
    rpcbind_flags="-h 192.168.1.1"
    # Основной демон - nfsd
    # -u : использовать протокол UDP
    # -t : использовать протокол TCP (можно использовать и TCP и UDP одновременно)
    # -n : максимальное число одновременно подключенных клиентов
    # -h : использовать только указанный адрес
    nfs_server_enable="YES"
    nfs_server_flags="-u -t -n 5"
    # Демон монтированя (mountd): принимает подключения от клиентов
    # Запускается автоматически при опции nfs_server_enable="YES"
    # -r : для обслуживания файлов а не только каталогов
    # -l : регистрация всх запросов на монтирование
    # -n : для возможности монтированя из-под Windows
    # -p : на каком порту запускать
    # -h : использовать только указанный адрес
    mountd_enable="YES"
    mountd_flags="-r -p 12345 -h 192.168.1.1"
    

    В случае ручного запуска только первые два необходимо стартовать: mountd запускается автоматически при запуске nfsd:
    # Порядок имеет значение!!!
    $ service rpcbind start # onestart при первом запуске
    $ service nfsd start # onestart при первом запуске
    

    А вот при изменениях файлов описаний экспортируемых каталогов необходимо перезапускать именно mounted:
    $ service mountd onereload
    # или
    $ killall -1 mountd
    # или
    $ kill -HUP `cat /var/run/mountd.pid`
    

    Некоторым приложениям (например, mutt) для корректной работы необходима возможность блокировки файлов (file locking). В таком случае в файл /etc/rc.conf необходимо добавлять и на сервере и на клиенте:
    # Демон сблокировки (rpc.lockd)
    rpc_lockd_enable="YES"
    rpc_statd_enable="YES"
    

    Если экспортируемая ФС насположена на ZFS, то для экспорта необходимо воспользоваться соответствующими свойствами: sharefs, sharenfs:
    $ zfs share=on syspool/src
    $ zfs unshare -a
    $ zfs sharenfs="-alldirs -ro mycomp" syspool/src
    $ zfs sharenfs="-alldirs -ro -network 192.168.1 -mask 255.255.255.0" syspool/ports
    $ zfs sharenfs="-alldirs -maproot=root mycomp" syspool/distfiles
    $ zfs inherit sharenfs syspool/home # сброс параметра sharenfs на 'по умолчанию'
    

    -alldirs нужен для того, чтобы можно было смонтировать влоенные каталоги шары.
    Указанные "шары" будут автоматически прописаны в файле /etc/zfs/exports.
    Если экспортируемая ФС расположена не на ZFS или надо "расшарить" каталог, вложенный в одну из ZFS ФС, то можно воспользоваться стандартный вариантом: указание параметров експорта в файле /etc/export.
    Для указания списков доступа удобно использовать файл /etc/netgroup, где группы описываются в таком формате:
    # <имя_группы> (узел,пользователь,домен) [(,,,)]
    myhost (192.168.1.17,,) (mycomp,user,) (mycomp2,user2,domain) (,,domain2)
    

    Например, в файле /etc/export:
    # Экспорт.ФС  Опции                   Кому предоставлен доступ
    /root         -alldirs -maproot=root  myhost
    /             -alldirs -maproot=root  -network 192.168.1.0 -mask 255.255.255.0
    /var          -alldirs -maproot=root  -network 192.168.1.0 -mask 255.255.255.0
    

    Если все все сделано верно, то команда mount покажет параметр «NFS exported» для раздела:
    $ mount
    /dev/da0s1a on / (ufs, asynchronous, NFS exported, local)
    devfs on /dev (devfs, local, multilabel)
    /dev/da0s1d on /var (ufs, asynchronous, NFS exported, local)
    

    Проверить, какие ресурсы открыты локально:
    $ showmount -e
    

    Дополнительная информация: ссылка 1, ссылка 2, ссылка 3, ссылка 4

    б) клиент

    Для работы NFS-клиента необходимо запустить два демона: rpcbind и nfsclient. Их параметры указываются в файле /etc/rc.conf:
    nfs_client_enable="YES"
    # флаги идентичны серверной части
    nfs_client_flags="-n 4"
    

    Теперь можно посмотреть, какие ресурсы открыты на удалённом сервере:
    $ showmount --all 192.168.1.1 # удалённые шары
    

    Выбрать и смонтировать необходимые:
    $ mount_nfs 192.168.1.1:/ /var/nfs/root
    $ mount_nfs 192.168.1.1:/var /var/nfs/var
    

    в) автоматическое монтирование

    Bog BOS: autofs - автоматическое монтирование файловых систем по запросу
    Bog BOS: Пакет утилит для автоматического монтирования файловых систем am-utils (amd)
    Administration Guide Draft/NFS


    10. Параметры sysctl

    Для подстройки ("тюнинга") системы через параметры ядра используется утилита sysctl.
    Типы переменных ядра:
    Название группы
    Описание
    kern Основные настройки ядра
    vm Настройки подсистемы виртуальной памяти
    vfs Настройки файловой системы
    net Настройки сети
    debug Настройки отладки
    hw Настройки "железа" сервера
    machdep Настройки (зависят от аппаратной платформы)
    user Информация о пользовательских возможностях
    p1003_1b Параметры POSIX
    compat Совместимость с другими операционными системами
    security Настройки безопасности
    dev Информация о "железе" сервера

    Параметры ядра можно применять непосредственно (они действуют только до перезагрузки):
    $ sysctl security.bsd.see_other_uids=1
    

    Либо указывать (на постоянное применение) в файле конфигурации /etc/sysctl.conf.
    Просмотреть актуальные значения параметров ядра:
    # всех
    $ sysctl -A
    # одной группы (на примере security)
    $ sysctl -A security
    

    Удобно grepить. :)

    11. Fibre Channel

    а) В базовой системе

    Т.к. технология FiberChannel применяется в вычислительных системах, не применяемых обычно :) дома (сетях хранения данных (SAN), системах виртуализации (для подключения систем хранения данных) и пр. весьма не дешёвых "железках"), то информации по данному вопросу достаточно мало. Очень со многим приходится разбираться самому: искать программы и прошивки  на сайтах производителей HBA, адаптировать их для работы в своём Линуксе и т.д.). Поэтому как бы не хотелось обратного, но возможны ошибки и несогласованности и данную информацию надо проверять в каждом конкретном случае.
    Параметры ядра:
    ###=-- Базовые
    device         scbus           # SCSI bus (required for SCSI)
    device         pass            # Passthrough device (direct SCSI access)
    device         da
    device         ctl             # CAM Target Layer
    ###=-- Дополнительные
    # device         targ            # SCSI Target Mode Code
    # device         targbh          # SCSI Target Mode Blackhole Device
    
    ###=-- Поддержка Fibre Channel HBA: QLogic QLA2340 (ISP2312) ---------------
    device         isp             # Qlogic family
    options        ISP_TARGET_MODE
    # options        ISP_DEFAULT_ROLES=1
    # options        VFS_AIO
    

    Собственно, важна только опция ISP_TARGET_MODE, остальные указаны больше для понимания иных необходимых параметров, но они уже указаны по умолчанию.
    Управление в FreeBSD:
    $ camcontrol devlist -v
    $ zfs create -V 100gb -o volblocksize=4K -o primarycache=metadata syspool/fcshare
    $ ctladm create -b block -B 4096 -o file=/dev/zvol/syspool/fcshare -o vendor=FreeBSD -o product="FC Disk" -S FC0001 -d FC0001ID
    $ ctladm port -o on -t fc
    $ ctladm realsync off
    $ ctladm portlist
    # или (старый вариант)
    $ ctladm port -l
    $ ctladm devlist -v
    $ ctladm lunlist
    

    ВАЖНО: После перезагрузки системы все вышеприведённые параметры, указанные утилитой ctladm пропадут: они не сохраняются. Поэтому для автоматизации их применения надо в файл /etc/rc.local добавить соответствующие строки:
    ctladm create -b block -B 4096 -o file=/dev/zvol/syspool/fcshare -o vendor=FreeBSD -o product="FC Disk" -S FC0001 -d FC0001ID
    ctladm port -o on -t fс
    ctladm realsync off
    

    б) Во FreeNAS

    Все необходимые LUN создаются через web-интерфейс, как iSCSI. Утилита ctladm, через которую всё это реализуется, предоставит всё их через FC, если выполнить команды:
    $ ctladm port -o on -t fc
    $ ctladm realsync off
    

    После этого данные команды надо вписать в файл /etc/rc.local и создать загрузку (т.е., фактически, создать снимок ФС с такими изменениями (иначе они не сохранятся).

    в) Дополнительная информация

    FreeBSD FibreChannel SAN with ZFS and VMWare with Snapshotting
    FreeBSD 10 as FC target
    SCSI target over FC на FreeBSD, как сделать FC Storage с ZFS бекэндом
    QLogic 2340 isp target mode
    Настраиваем работу Fibre Channel (Solaris)
    FC target support in FreeNAS 9.1.0
    So you want to test FC target mode?
    FreeNAS FC Target
    FreeBSD: QLogic 2340 isp target mode

    11. Infiniband

    Скрипт для сборки Infiniband-модулей ядра (FreeBSD):
    #!/bin/sh -e
    
    cd /usr/src/sys/modules
    for module in mlx4 ibcore mlx4ib ipoib; do
        cd $module
        make
        make install
        sync    # In case kldload causes a crash
        kldload $module || true
        auto-append-line ${module}'_load="YES"' /boot/loader.conf $0
        cd ..
    done
    kldstat
    

    Скрипт для конфигурирования конфига ядра с поддержкой Infiniband и его сборки (FreeBSD):
    #!/bin/sh -e
    
    
    ##########################################################################
    #   Function description:
    #       Pause until user presses return
    ##########################################################################
    
    pause()
    {
        local junk
        
        printf "Press return to continue..."
        read junk
    }
    
    cd /usr/src/sys/$(uname -p)/conf
    if [ ! -e IB ]; then
        cp GENERIC IB
    fi
    
    if ! fgrep -q OFED IB; then
        cat << EOM >> IB
    
    # IPOIB is causes severe performance probelms.  Mellanox is rewriting
    # the driver as of Mar 2014 with expected ETA summer 2014.
    
    options        OFED            # Infiniband protocol stack and support
    options        SDP             # Sockets Direct Protocol for infiniband
    # options        IPOIB_CM        # Use connect mode ipoib
    
    # device         ipoib           # IP over IB devices
    device         mlx4ib          # ConnectX Infiniband support
    device         mlxen           # ConnectX Ethernet support
    device         mthca           # Infinihost cards
    
    EOM
    fi
    
    cd /usr/src
    
    if ! fgrep WITH_OFED /etc/src.conf; then
        printf "WITH_OFED='yes'\n" >> /etc/src.conf
    fi
    
    # Build world first
    if [ ! -e world-built ]; then
        make buildworld
        touch world-built
    fi
    
    # Build kernel
    if [ ! -e kernel-built ]; then
        make buildkernel KERNCONF=IB
        make installkernel KERNCONF=IB
        touch kernel-built
    fi
    
    cat << EOM
    
    Rebooting to single user mode.  Run ib-setup-single-user.
    
    EOM
    
    pause
    nextboot -o "-s" -k kernel
    shutdown -r now
    

    Или "готовые" параметры ядра:
    ###=-- ATA/SCSI peripherals ------------------------------------------------
    ###=-- Базовые
    device         scbus           # SCSI bus (required for SCSI)
    device         pass            # Passthrough device (direct SCSI access)
    device         da
    device         ctl             # CAM Target Layer
    ###=-- Дополнительные
    # device         targ            # SCSI Target Mode Code
    # device         targbh          # SCSI Target Mode Blackhole Device
    
    ###=-- Поддержка Infiniband HCA: Mellanox InfiniHost III Lx (MHES18-XTC) ---
    device         mlx4ib          # ConnectX Infiniband support
    device         mlxen           # ConnectX Ethernet support
    device         mthca           # Infinihost cards
    device         ipoib           # IP over IB devices
    options        OFED            # OpenFabrics Enterprise Distribution
    options        OFED_DEBUG_INIT
    options        SDP             # Sockets Direct Protocol
    options        SDP_DEBUG
    options        IPOIB           # IP over Infiniband
    options        IPOIB_DEBUG
    options        IPOIB_CM        # IPoIB connect mode
    

    Так же в /etc/make.conf добавить параметр:
    WITH_OFED=YES
    

    После пересборки системы появляются необходимые модули ядра и система видит Infiniband интерфейсы Mellanox.
    FreeBSD: Infiniband
    Acadix: InfiniBand
    blog.lexa.ru: 10G и Infiniband
    blog.lexa.ru: Q: Infiniband и FreeBSD



    размещено: 2010-12-12,
    последнее обновление: 2019-06-19,
    автор: Fomalhaut



  • Хостинг HOST-FOOD

    2014-07-27, lissyara
    gmirror

    Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
    2013-08-20, zentarim
    Scan+Print server FreeBSD 9

    Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
    подписка

        вверх      
    Статистика сайта
    Сейчас на сайте находится: 7 чел.
    За последние 30 мин было: 31 человек
    За сегодня было
    2786 показов,
    275 уникальных IP
     

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    нпф достойное будущее Санкт-Петербург

    Время генерации страницы 0.0712 секунд
    Из них PHP: 72%; SQL: 28%; Число SQL-запросов: 27 шт.
    Исходный размер: 167091; Сжатая: 31754