Archive for the ‘FreeBSD’ Category

Разметка диска и создание файловой системы с помощью bsdlabel и newfs (FreeBSD)

Пятница, Август 19th, 2011

Вчера пытался установить удаленно через kvm Freebsd на материнской плате Intel S3420GP. Два винта были объеденные  в зеркало, хотелось разбить на три слайса 70G, 70G, 300G. Две 70-ки под «/», «/usr», «/var», для того что бы можно было загрузится с предыдущей копии в случае не удачного обновления. 300-ка под «/tmp», «swap», «/home». Не получилось, sysinstall выдавал ошибку вида: «Unable to make device node for /dev/ar0s1a in /dev! The creation of filesystems will be aborted.»

(далее…)

Portmaster — шпаргалка по ключам

Вторник, Март 29th, 2011

Portmaster — это утилита во FreeBSD для управления портами, использующая только структуру самих портов, без дополнительных надстроек или использования сторонних языков. С помощью нее можно обновлять, часть или все порты.

Общие флаги:

--force-config   Выполнить команду 'make config' для всех портов (перекрывается -G)
-C   Не выполнять команду 'make clean' до сборки пакетов
-G   Позволяет не выполнять 'make config'
-H   Cкрыть подробности сборки и установки в log-файле
-K       Не выполнять 'make clean'  после сборки пакетов
-B   Предотвращает создание резервного пакета установленного порта
(обычно до установки делается резервная копия, на которую откатывается в случае неудачи,
после удачной установки резервная копия удаляется)
-b       Создание и сохранение резервного пакета установленного порта
-g        Создать пакет из нового порта
-n       Проходит все шаги установки, но не инсталлирует ни каких портов
( я думаю удобно при отладке используя  ключ "-K" и в случаи удачи
запустить снова portmaster с ключом "-C" для установки без сборки
-t   Тщательные рекурсивные зависимости использует all-depends-list.
РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ ТОЛЬКО В СЛУЧАЕ НЕОБХОДИМОСТИ.
(recurse dependencies thoroughly, using all-depends-list.
RECOMMENDED FOR USE ONLY WHEN NEEDED, NOT ROUTINELY. When applied to the
--clean-distfiles option it allows a distfile to be valid if it
matches any up to date port, not just the ones that are installed.)
-v   Подробный вывод
-w   Сохранять старые подключаемые библиотеки до деинсталляции
[-R] -f всегда пересобирать порты (перекрывается -i)
-i    Интерактивная мода обновления, спрашивать пересобирать ли порты
-D    Не очищать архивы исходников (distfiles)
-d    Всегда отчищать архивы исходников (distfiles)
-m arguments for make
 any arguments to supply to make(1)
-m    Аргументы make, для того что бы узнать аргументы читайте man make(1)
-x  avoid building or updating ports that match this pattern.  Can be
 specified more than once.  If a port is not already installed the
exclude pattern will be run against the directory name from
 /usr/ports.
-x    Используется для исключения установки или обновления портов.
Можно использовать несколько раз в одной команде. Путь задается относительно каталога /usr/ports.
--no-confirm Не запрашивает пользователя подтверждения списока портов
для установки или обновления перед сборкой
--no-term-title	 Не обновлять заголовок xterm
--no-index-fetch Пропустить скачивание INDEX файла
--index   use INDEX-[7-9] exclusively to check if a port is up to date
--index-first use the INDEX for status, but double-check with the port
--index-only do not try to use /usr/ports. For updating ports when no /usr/ports
directory is present the -PP|--packages-only option is required.  See
the ENVIRONMENT section below for additional requirements.
--delete-build-only удалить порты собранные только для удовлетворения зависимости,
после успешной сборки.
-P|--packages использовать пакеты если это возможно, иначе собирать порты
-PP|--packages-only Выдавать ошибку и останавливается если пакет недоступен,
"-PP" должна быть одна в строке,
например вы не можете использовать "-PPav"
--packages-build Использовать пакеты для удовлетворения всех зависимостей.
--packages-if-newer Использовать пакет если он новее чем уже установленный,
даже если пакет не является последним согласно дереву портов
--always-fetch Всегда скачивать пакет, даже если он уже доступен локально
--local-packagedir=<path> Указать путь где локальные пакеты могут быть найдены.
Эта опция должна указать на полный путь структуры каталогов, создаваемой таким же образом,
который который был создан с помощью 'make package' (или 'portmaster -g').
То есть, файлы пакета содержатся в <path>/All (ВНИМАНИЕ!!! All с большой буквы.),
символьные ссылки LATEST_LINK <path>/Latest каталог,
и символьные ссылки в папку <path>/All в категориях и подпапках,
таких как <path>/devel, <path>/ports-mgmt, и т.д. (как на ftp-шнике freebsd.org)
--packages-local использовать пакеты только из тех, что указаны
директивой --local-packagedir
--delete-packages после установки пакета, удалить его.

Особенности:

-a      Проверка всех портов и обновление по мере необходимости.
--show-work   Показывать какие из зависимых портов не установленные (подразумевает "-t" )
-o <new port dir in /usr/ports> <installed port>
 replace the installed port with a port from a different origin
-o <new port dir in /usr/ports> <installed port>   заменить существующий порт
другим портом (обычно перейти на новую версию)
[-R] -r имя/glob      каталога порта в /var/db/pkg восстановить указанный порт,
и все порты, которые зависят от его
-R            используется с -r или -f опциями, чтобы пропустить порты, обновленные ранее.
Когда использующийся с "-r" это также предотвратит восстанавление родительского порта,
если это, и все его зависимости
-l              список всех установленных портов по категориям
-L             список всех установленных портов по категориям, и поиск обновлений
--list-origins    список директорий относительно /usr/ports. Этот список предназначен
для передачи в portmaster либо на другой машине или для перестановки всех портов. 
См. примеры ниже.
 [--force-config|-G] [-aftv] -F    только скачать дистрибутивы (distfiles)
-n  отвечать "нет" на все вопросы пользователю
-y  отвечать "да" на все вопросы пользователю
[-n|y] [-b] [-D|d] -e имя/glob для каталога порта в /var/db/pkg удаляют порт,
используя pkg_delete, и дополнительно удаляют весь distfiles.
Вызов "-s" после удаления порта удаляет и все зависимости которые более не требуются.
[-n|y] [-b] [-D|d] -s   удалить неиспользуемые более порты зависимостей
[-t] [-n] --clean-distfiles  удаляет неиспользуемые distfiles-файлы установленных портов,
если используется "-t" то для всех портов, а не только установленных.
[-t] -y --clean-distfiles тоже что и выше, но удаляет все distfiles-файлы без предупреждения
[--index|--index-only] [-n] --clean-packages  предложит удалить устаревшие пакеты.
Опция --index-only требуется, если не дерево портов доступно.
[--index|--index-only]
               "-y --clean-packages" делает то же самое, что и выше, но удаляет все устаревшие файлы
без предупреждения.
[-n|y] [-v] --check-depends       cross-check и обновления информации зависимостей
для всех портов
[-n|y] [-v] --check-port-dbdir     Проверит устаревшие записи в /var/db/ports
-h|--help    Показать помощь
--version    Показать номер версии

Переменные среды

Каталог на который указывает переменная PACKAGES
(по умолчанию /usr/ports/packages) будет использоваться для хранения
и резервного копирования новых пакетов. При использовании 'make package'
с опцией -g, инфраструктура портов сохранит пакеты в ${PACKAGES}/All
иначе PKGREPOSITORY. При использовании -b опции portmaster хранит
свои резервные пакеты в ${PACKAGES}/portmaster-backup так,
чтобы вы могли создать и резервный пакет и пакет недавно установленного порта,
даже если у них одинаковая версия в разных папках.
При использовании опции --packages* файлы пакета будут загружены
в ${PACKAGES}/portmaster-download.  portmaster будет использовать
переменные PACKAGESITE и PACKAGEROOT (по умолчанию http://ftp.freebsd.org).
portmaster пытается использовать обе эти переменные как же
как это делает pkg_add (1).
Переменная UPGRADE_TOOL установленная в положение "portmaster"
и переменные UPGRADE_PORT и UPGRADE_PORT_VER устанавливаются в полное
имя пакета и версии.(The UPGRADE_TOOL variable is set to "portmaster",
and the UPGRADE_PORT  and UPGRADE_PORT_VER variables are set to the full
package name string  and version of the existing package being replaced, if any.)
При использовании опции --index-only переменная PACKAGES должна
содержать имя папки в которой у суперпользователя есть права на запись.
Другие полезные переменные:
     MASTER_SITE_INDEX       (по умолчанию http://www.FreeBSD.org/ports/)
     FETCHINDEX              (по умолчанию fetch -am -o)
     INDEXDIR                (по умолчанию $PORTSDIR, или $TMPDIR для --index-only)
     INDEXFILE               (по умолчанию версия FreeBSD)
Если Вы используете нестандартные настройки OPTIONS для создания пакета
и хотите использовать опцию --index-only без дерева портов, вы должны генерировать свой собственный INDEX файл так, чтобы зависимости соответствовали.
Если вы хотите настроить свою среду сборки на основе на портов,
посмотрите /usr/ports/ports-mgmt/portconf
Для логирования используйте переменную PM_LOG указав в ней полный путь до файла.
По умолчанию portmaster создает резервные пакеты установленных портов прежде,
чем он выполнит pkg_delete (1) во время обновления. Если создания пакета не удается
это рассматривается как серьезная ошибка и предлагается пользователю.
Однако для заданного сценарием использования portmaster это может быть проблемой.
В ситуациях, где пользователь АБСОЛЮТНО УВЕРЕН, что не возможность создания
резервного пакета не должна приводить к фатальной ошибке,
переменная PM_IGNORE_FAILED_BACKUP_PACKAGE
может быть определена через rc файл.
Для тех, кто хочет чтобы определенные порты всегда компилировались,
а не  устанавливались из пакетов, переменная PT_NO_INSTALL_PACKAGE
может быть определена в соответствии с make(1), можно установить в /usr/local/etc/ports.conf
если используется /usr/ports/ports-mgmt/portconf, или в /etc/make.conf

ФАЙЛЫ

/usr/local/etc/portmaster.rc
$HOME/.portmasterrc
        Дополнительные системные и пользовательские конфигурационные файлы.
        Набор переменных в getopts подпрограмме сценария может быть определен в этих файлах,
        чтобы включить опции. Эти файлы будут считанны главным portmaster процессом,
        все переменные в них будут экспортироваться.

/var/db/pkg/*/+IGNOREME
         Если этот файл существует в папке порта, который уже установлен,
         поведение будет следующим:
               1. Порт будет проигнорирован везде.
               Это включает обновления зависимости, даже если нет никакого каталога для порта в /usr/ports и нет никакой записи для этого в/usr/ports/MOVED. Если используется опция "-v" то
о факте игнорирования, будет сообщено.
               2. Если используется опция "-L"  и новая версия существует, существование
файла +IGNOREME будет упомянуто.
               3. Если вы сделаете регулярное обновление порта, или если используется опция "-a",
то вас спросят, хотите ли вы обновить порт так или иначе.

/var/db/pkg/*/PM_UPGRADE_DONE_FLAG
                Указывает на последующие опции "-a", "-f", or "-r" которые включают опцию "-R"
                что порт был уже востановлен, таким образом, это может быть безопасно проигнорировано
                (Indicates to a subsequent -a, -f, or -r run which includes the -R option that a port has already
                 been rebuilt, so it can be safely ignored if it is up to date.)

/tmp/port_log-*
                 Если используется опция "-H", а установка или обновление не удалось,
                 результаты сборки и установки будут сохранены в этом файле.
                 Замените значение TMPDIR в вашей среде если это требуется.

EXIT STATUS
                  portmaster утилита возвращает 0 в случае успешного завершения
                  и > 0, если произошла ошибка.

ADVANCED FEATURE: SU_CMD (если используете sudo то переведете сами, лень...)
     The ports infrastructure has limited support for performing various operations as an unpriviliged user.
It does this by defining SU_CMD, which  is typically su(1).  In order to support complete management
of your ports as an unprivileged user, escalating to "root" privileges only when necessary,
portmaster can use sudo(1) to handle the escalated privileges.  To accomplish this you must have
the following directories configured so that the unprivileged user can access them:

     1. WRKDIRPREFIX - This is usually set to /usr/ports/category/port/work, however it is suggested
that you configure another directory outside  your ports tree for access by the unprivileged user,
and assign this  variable to that value in your /etc/make.conf.

     2. DISTDIR - This is usually set to /usr/ports/distfiles. This directory can be safely set up for access
by the unprivileged user, or a new directory can be specified as above.

     3. TMPDIR - Usually /tmp,
         but can also be set to another directory in your shell environment if  desired.

     It is further assumed that the following directories will be owned by
root:
     /var/db/pkg
     /var/db/ports
     LOCALBASE - Usually /usr/local
     PACKAGES - Usually /usr/ports/packages
     PKGREPOSITORY - Usually ${PACKAGES}/All

     You will then need to install and configure sudo(1).  This can easily be done with /usr/ports/security/sudo.  Then you will need to define  PM_SU_CMD in your /etc/portmaster.rc file,
or your $HOME/.portmasterrc file.  For example:
           PM_SU_CMD=/usr/local/bin/sudo
     You can optionally define the PM_SU_VERBOSE option as well to notify you     each time portmaster
uses the PM_SU_CMD.  This is particularly useful if   you are experimenting with a tool other than sudo(1) to handle the privilege escalation, although at this time sudo(1) is the only supported  option.
     PLEASE NOTE: You cannot upgrade the sudo(1) port itself using this  method.

Примеры

Обновление одного порта:
           portmaster fooport-1.23
           portmaster fooport
           portmaster foo/fooport
Использование пакетов собранных на официальном сайте через переменную среды PACKAGESITE:
Для этого в файл /root/.cshrc прописываем строку примерно такого вида(все зависит от вашей версии):
setenv PACKAGESITE http://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/
все теперь можно использовать ключи "-P", "-PP", "--packages-build" и пакеты будут браться с сервера ftp.freebsd.org:
            portmaster --packages-build fooport-1.23
Использование пакета если такой имеется:
           portmaster --packages fooport-1.23
Создайте порт локально, но использовать пакеты для удовлетворения зависимостей,
после сборки удалить зависимости установленные зависимости:
           portmaster --packages-build --delete-build-only fooport-1.23

Обновление системы с использованием только пакетов, доступные локально:
           portmaster -PP --local-packagedir= -a

Обновление всех портов, которые нуждаются в обновлении:
           portmaster -a

Обновление всех портов, которые нуждаются в обновлении, и удалить устаревшие
distfiles файлы после обновления:
           portmaster -aD
           portmaster --clean-distfiles

Более сложные задачи (см. подробнее описание вариантов выше):
           portmaster -r fooport-1.23
           portmaster -o emulators/linux_base-fc4 linux_base-8-8.0_15
           portmaster -x cvsup -f -a
           portmaster -a -x gstreamer -x linux

Только напечатать порты, у которых есть доступные обновления:
           portmaster -L | \
           egrep -B1 '(ew|ort) version|Aborting|installed|dependencies| \
           IGNORE|marked|Reason:|MOVED|deleted' | grep -v '^--'

Использование portmaster что бы сделать полную переустановку всех установленных портов:
           1. portmaster --list-origins > ~/installed-port-list
           2. Обновите дерево портов
           3. portmaster -ty --clean-distfiles
           4. portmaster --check-port-dbdir
           5. portmaster -Faf
           6. pkg_delete '*'
           7. rm -rf /usr/local/lib/compat/pkg
           8. Сохраните все файлы из /usr/local которые вы хотите потом восстановить,
              например файлы конфигураций в /usr/local/etc
           9. В ручную проверьте /usr/local и /var/db/pkg
              и убедитесь что они пусты
           10. Переустановите portmaster
           11. portmaster `cat ~/installed-port-list`

Вы, вероятно, хотите использовать опцию "-D" для установки, а  затем выполнить
--clean-distfiles [-y]снова. Возможно будет полезна опция  --force-config при установке новых портов.

Так же вы можете использовать portmaster -a -f -D, чтобы сделать "на месте"
обновление установленных портов. Если этот процесс прерван по какой-либо причине,
вы можете использовать portmaster -a -f -D -R, чтобы избежать установку портов,
уже обновленных (установленных) на предыдущем шаге. Однако первый метод
(удалить все и переустановить), предпочтен.

Переброс (forwarding) портов с помощью IPFW. FreeBSD 8.1

Пятница, Октябрь 29th, 2010

Для настройки прозрачного прокси потребовалось правило ipfw вида:

ipfw add 1000 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80 out via eth0

Но оно выдавало ошибку:

ipfw: getsockopt(IP_FW_ADD): Invalid argument

Решено было пересобрать модуль ядра ipfw.ko

Для этого:

1. Делаем копию ядра (хотя нам нужен только модуль  ipfw.ko) но на всякий случай:

cp -r /boot/kernel /boot/kernel.generic_8.1

2. Добавляем в файл /etc/make.conf строку вида:

CFLAGS+= -DIPFIREWALL -DIPFIREWALL_NAT -DIPFIREWALL_FORWARD -DIPFIREWALL_DEFAULT_TO_ACCEPT -DIPSTEALTH -DIPDIVERT -DDUMMYNET

3. пересобираем модуль:

cd /usr/src/sys/modules/ipfw
make clean && make cleandir && make obj && make depend && make all && make install && make clean && make cleandir

Все.

Как узнать pid запускаемой программы из скрипта.

Вторник, Сентябрь 21st, 2010

Для примера я написал скрипт test.sh, где ищем pid для запускаемой команды sleep в место нее может быть запущена любая программа.

$ cat test.sh
#!/bin/sh
#в переменной $$ находится pid этого скрипта
echo "pid скрипта = "$$
#Для примера запустим команду sleep на 5 мин. в переменной $! будет pid запущенной нами команды
sleep 300 &
pid=$!
echo "pid="$pid
ps waux | grep $pid | grep -v grep
#или так, в этом примере sleep будет 10 мин для отличия
sleep 600 1>/dev/null 2>&1 &
pid=$!
echo "pid="$pid
ps waux | grep $pid | grep -v grep

Запустим скрипт test.sh:

$ sh test.sh
pid скрипта = 9959
pid=9960
rrv       9960  0.0  0.0   9728   828 pts/2    S+   20:58   0:00 sleep 300
pid=9964
rrv       9964  0.0  0.0   9728   824 pts/2    S+   20:58   0:00 sleep 600

Ломаем пароли Authorization: Basic

Понедельник, Сентябрь 20th, 2010

Имеем: Доступ до роутера.

Требуется: получить доступ до сайта пользователя с Basic авторизацией

Решение:
1. на роутере выполняем команду

tcpdump -i em3 -p -s 0 -w /home/rrv/tcpdump.txt \(dst host XX.XX.XX.XX and dst port 80\)

тем самым мы сохраним в файл /home/rrv/tcpdump.txt дамп общения с сервером ip=XX.XX.XX.XX и портом 80

2. спустя некоторое время ищем в файле строку авторизации:

tcpdump -s 0 -A -r /home/rrv/tcpdump.txt | less

Находим строку вида:

 Authorization: Basic QWRtaW46VG9wU2VjcmV0

Теперь раскодируем:

echo "QWRtaW46VG9wU2VjcmV0" | openssl enc -base64 -d
Admin:TopSecret

Все 🙂 Логин: Admin пароль: TopSecret

Читаем BIOS. Определение названия материнской платы.

Среда, Февраль 10th, 2010

Возникла необходимость узнать название материнской платы на удаленном сервере, стоящим на площадке провайдера.
Решением оказалось чтение BIOS-а командой:

 # dd if=/dev/mem bs=64k skip=15 count=1 | strings | less

(далее…)

Уменьшение места зарезервированного для root на партиции.

Четверг, Февраль 12th, 2009

Сегодня столкнулся с проблемой. Подключил большой диск к файловому серверу, для создания временного backup-а с виндовой тачки через samb-у, и выяснилось, что мне не хватает процентов 5 места. Обидно…
Вспомнил, что FreeBSD резервирует 8% партиции под суперпользователя.
Чтение man newfs указало, что есть ключик -m free-space это для новой партиции, но на существующей партиции, можно использовать tunefs. (далее…)

Portsnap за proxy

Вторник, Декабрь 30th, 2008

В общем был у меня сервачек в одной канторе, все было хорошо пока я в очередной раз обнавляя порты получил следующую ошибку:

#  portsnap fetch
Looking up portsnap1.FreeBSD.org mirrors... none found.
Fetching snapshot tag... fetch: http://portsnap1.FreeBSD.org/snapshot.ssl: No address record

(далее…)