Archive for the ‘Администрирование’ Category

FreeBSD два провайдера. setfib

Вторник, 13 сентября, 2011

Имеем два провайдера:

IP1: 1.2.3.4 GW1: 1.2.3.1 сетевая карта bce0
IP2: 5.6.7.8 GW2: 5.6.7.1 сетевая карта bce1

Желание:

пользователей squid выводить в интернет через второго провайдера. (далее…)

Ubuntu. Аналог гостевого аккаунта Windows.

Четверг, 25 августа, 2011

Попросили меня настроить Ubuntu для работы в интернет кафе, то есть что бы после перезагрузки все настройки пользователя вернулись к исходным но скачанные файлы оставались в папке Загрузки.

Все просто, воспользуемся aufs и tmpfs. (далее…)

Смена часового пояса в Ubuntu

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

Интерактивная смена часового пояса из консоли выполняется командой:

dpkg-reconfigure tzdata

DD примеры.

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

Нашел на просторах иностранного интернета.

  1. Создание ISO образа компакт диска
    dd if=/dev/cdrom of=image.iso bs=2k
  2. Создание образа с дискеты
    dd if=/dev/fd0 of=floppy.img
  3. Залить образ обратно на дискету
    dd if=floppy.img of=/dev/fd0 bs=18k
  4. Создание файла reallylargefile размером 1Gb заполненный случайными данными
    dd if=/dev/random of=reallylargefile count=2M
  5. Тоже, что и выше, но более быстрое но менее криптоустойчивое :
    dd if=/dev/urandom of=reallylargefile count=2M
  6. Тоже что и выше, но быстрее за счет увеличения размера блока:
    dd if=/dev/urandom of=reallylargefile count=256k obs=4096
  7. Создание файла размером 10Gb с именем virtualpartition, заполненный нулями, и доступный как ext2 виртуальный раздел:
    dd if=/dev/zero of=virtualpartition bs=1M count=10k
    mke2fs virtualpartition
    (ответить yes, когда ругнется, что это не блочное устройство)
    dd if=/dev/zero of=virtualpartition bs=1M count=10k
    mkdir /mnt/virtual
    mount -o loop virtualpartition /mnt/virtual/
  8. Создать файл 10Gb без выделения реального пространства (если операционная система это поддерживает)
    dd if=/dev/zero of=sparsefile.img bs=1 seek=10G count=0
  9. Скопировать первый раздел первого жесткого диска в файл partitionone
    dd if=/dev/hda1 of=partitionone
  10. Чтобы скопировать первый IDE-жесткий диск на второй IDE-жесткий диск (устройства подставляйте свои), т.е. клонировать диск, включая файловые системы, таблицы разделов и главную загрузочную запись
    dd if=/dev/hda of=/dev/hdb
  11. Смотрим, что делает dd, запускаем в другой консоли
    ps aux | grep «dd if» | grep -v grep | awk ‘{system («kill -s USR1 «$2)}’
    В консоли где работает dd будим видеть примерно следующие
    4518809+0 записей считано
    4518808+0 записей написано
    скопировано 2313629696 байт (2,3 GB), 242,181 c, 9,6 MB/c

Внимание следующие примеры опасны, разберитесь что вы делаете прежде чем тупо копировать!!!

  1. Заполняет первый жесткий диск нулевыми байтами, стирая его
    дд if=/dev/zero of=/dev/hda
  2. Это перезаписывает первые несколько блоков, первого жесткого диска из файла, это приводит к потере таблицы разделов
    дд if=funnysong.mp3 of=/dev/hda
  3. Полностью затирает диск данными со звуковой карты 🙂
    дд if=/dev/dsp of=/dev/hda
  4. Перезапись всего диска псевдослучайными данными
    дд if=/dev/urandom of=/dev/hda
  5. Замена всех вхождений строки «Top Secret» на «Доступно!!» на диске /dev/sda (обратите внимание, что количество букв должно совпадать)
    дд if=/dev/sda | sed ‘s/Top Secret/Доступно!!/g’ | dd of=/dev/sda

Описание тут:
www.opennet.ru/man.shtml?topic=dd&category=1&russian=0
www.opennet.ru/man.shtml?topic=dd&category=8&russian=0
www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506

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

Пятница, 19 августа, 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.»

(далее…)

Восстановление сети в Windows после вирусной атаки

Четверг, 31 марта, 2011

Сегодня один из компов в сети поймал вирус который снес сеть, после удаления вируса сетевая служба так и не поднялась, решение:

netsh int ip reset c:\tmp\reset_ip_log.txt
netsh winsock reset c:\tmp\reset_winsock_log.txt

Перезагрузка и все восстановилось.
p.s. можно посмотреть логи c:\tmp\reset_ip_log.txt и c:\tmp\reset_winsock_log.txt

На сервере Windows 2003 это не помогло, пришлось переустановить протокол TCP/IP, читать тут.

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

Вторник, 29 марта, 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, чтобы избежать установку портов,
уже обновленных (установленных) на предыдущем шаге. Однако первый метод
(удалить все и переустановить), предпочтен.

Подключение с Winwows 7 к сетевому принтеру подключенному к Windows XP

Четверг, 23 декабря, 2010
Сегодня, купили в офис ноутбук с Win7 (64), с первого раза не удалось настроить сетевые принтеры, не подключенные к samba-cups, не подключенные к WinXP. На одном из форумов нашел решение:
  1. Устанавливаем требуемый принтер локально, например выбрав подключение через LPT-порт
  2. Пуск -> Устройства и принтеры
  3. Кликаем правой кнопкой мыши на принтере и выбираем «Свойства принтера» (обратите внимание, не просто «Свойства»)
  4. Выбираем вкладку порты, нажимаем «Добавить порт», выбираем «Локальный порт» и нажимаем «Новый порт»
  5. В окошко «Введите имя порта» вводим сетевое имя компьютера, например:
    \\host10\HPLaserJet
    или через ip
    \\192.168.0.10\HPLaserJet
  6. Внимание! Если у вас не поднят домен, то на компьютере под WinXP должен быть такой же пользователь, что и на Win7, либо поднята гостевая учетка. В общем как всегда.

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

Пятница, 29 октября, 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 запускаемой программы из скрипта.

Вторник, 21 сентября, 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