Exim + Dovecot + MySQL

1. Устанавливаем Exim:

cd /usr/ports/mail/exim
make install clean

Опции (с заделом на будущее)

[x] CONTENT_SCAN Enable exiscan email content scanner     
[x] DAEMON Install scripts to run as a daemon            
[x] DISABLE_D_OPT Disable macros overrides using option -D
[x] DKIM Enable support for DKIM                    
[x] DNSSEC Enable DNSSEC validation                 
[x] DOCS Build and/or install documentation         
[x] EMBEDDED_PERL Enable embedded Perl interpreter  
[x] ICONV Enable header charset conversion           
[x] LMTP RFC2033 SMTP over command pipe transport    
[x] OCSP Enable OCSP stapling                       
[x] PRDR Enable Per-Recipient-Data-Response support 
[x] SUID Install the exim binary suid root    
──────────────────────────── SMTP Authorization
[x] AUTH_CRAM_MD5 Enable CRAM-MD5 authentication mechanisms
[x] AUTH_DOVECOT Enable Dovecot authentication mechanisms
[x] AUTH_PLAINTEXT Enable plaintext authentication
[x] AUTH_SPA Enable Secure Password Authentication 
[x] SASLAUTHD Enable use of Cyrus SASL auth daemon
[x] PAM Enable PAM authentication mechanisms
[x] PASSWD Enable /etc/passwd lookups     
───────────────────────────── Lookup support
[x] CDB Enable CDB-style lookups          
[x] DNSDB Enable DNS-style lookups         
[x] DSEARCH Enable directory-list lookups 
[x] LSEARCH Enable wildcarded-file lookups
[x] MYSQL Enable mysql lookups                   
─────────────────────── Supported storage formats
[x] MAILDIR Enable Maildir mailbox format      
[x] MAILSTORE Enable Mailstore mailbox format  
[x] MBX Enable MBX mailbox format              
───────────────────────────── TLS support
(*) TLS TLS support                      

Редактируем conf файл

cd /usr/local/etc/exim
ee /configure
# CONF EXIM + MYSQL + DOVECOT + CLAMAV + POSTFIX + DSPAM
# Авторизация - довекот. квоты, кламав, БД в мускуле, dspam

# Имя нашей почтовой системы - HELO
primary_hostname = mail.tst-amo.pp.ua

# хост/БД/пользователь/пароль
mysql_servers = localhost/postfix/pOstFix/myPassWord

# Список доменов нашей почтовой системы
domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain`\
 WHERE `domain`='${domain}' AND `active`='1'}}

# Логгирование
log_selector = +all
#log_file_path = /var/log/exim/%D-%slog # Логирование будет вида 20160924-mainlog and 20160924-rejetlog
log_file_path = /var/log/exim/%slog

# Список доменов, для которых наша почтовая система является резервной
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` \
 WHERE `domain`='${domain}' AND `active`='1'}}

hostlist relay_from_hosts = localhost : 127.0.0.1 : 192.168.1.0/24

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_mime = acl_check_mime

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным! :)
# Итак, указываем местоположение сокета clamd.
acl_smtp_data = acl_check_data
av_scanner = clamd:/var/run/clamav/clamd.sock

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама...
#spamd_address = 127.0.0.1 783

# SSL
tls_certificate = /etc/ssl/certs/dovecot.pem
tls_privatekey = /etc/ssl/private/dovecot.pem

# Отключаем IPv6
disable_ipv6

#порт smtp
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465

# Дописываем домены отправителя и получателя, если они не указаны
qualify_domain = tst-amo.pp.ua
qualify_recipient = tst-amo.pp.ua

allow_domain_literals = false
exim_user = mailnull
exim_group = mail

never_users = root

# Проверять прямую и обратную записи узла отправителя по DNS
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите :)
#host_lookup = *

# Отключаем проверку пользователей узла отправителя по протоколу ident
# * то будет проверять все
# identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто?
#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# Запрещаем использовать знак % для явной маршрутизации почты
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все)
#percent_hack_domains =

# Настройки обработки ошибок доставки, используются значения по умолчанию
# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 2h
timeout_frozen_after = 14d

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.1.0/24

# Через какое время повторять попытку доставки
# замороженного сообщения
auto_thaw = 1h

# Приветствие сервера
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
#smtp_banner = "$primary_hostname, SUPER-PUPER MAIL SERVER"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер
smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.
smtp_accept_max_per_connection = 45

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку
split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки
remote_max_parallel = 15

return_size_limit = 10K

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))
helo_allow_chars = _

syslog_timestamp = no

# Лимит размера сообщения (50 мегабайт default)
message_size_limit = 1000M

################
### конфигурация ACL для входящей почты
begin acl

# Эти правила срабатывают для каждого получателя

acl_check_rcpt:

# принимать сообщения которые пришли с локалхоста,
# не по TCP/IP

accept hosts = :

# Запрещаем письма содержащие в локальной части
# символы @; %; !; /; |. Учтите, если у вас было
# `percent_hack_domains` то % надо убрать.
# Проверяются локальные домены

deny message = "incorrect symbol in address"
 domains = +local_domains
 local_parts = ^[.] : ^.*[@%!/|]

# Проверяем недопустимые символы для
# нелокальных получателей:

deny message = "incorrect symbol in address"
 domains = !+local_domains
 local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

# Принимаем почту для постмастеров локальных доменов без
# проверки отправителя (я закомментировал, т.к. это -
# основной источник спама с мой ящик).

accept local_parts = postmaster
 domains = +local_domains

# Запрещщаем, если невозможно проверить отправителя
# (отсутствует в списке локальных пользователей)
# У себя я это закоментил, по причине, что некоторые
# железяки (принтеры, & etc) и программы (Касперский, DrWEB)
# умеют слать почту, в случае проблем но не умеют ставить
# нужного отправителя. Такие письма эта проверка не пускает.
# require verify = sender

# Запрещаем тех, кто не обменивается приветственными
# сообщениями (HELO/EHLO)

deny message = "HELO/EHLO require by SMTP RFC"
 condition = ${if eq{$sender_helo_name}{}{yes}{no}}

# Принимаем сообщения от тех, кто аутентифицировался:
# Вообще, большинство конфигов в рунете - это один и тот же
# конфиг написанный Ginger, в котором этот пункт расположен
# внизу. Но при таком расположении рубятся клиенты с adsl,
# ppp, и прочие зарезанные на последующих проверках. Но это
# ж неправильно! Это мои пользователи из дома! Потому
# я это правило расположил до проверок.

accept authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO
deny message = "Your IP in HELO - access denied!"

hosts = * : !+relay_from_hosts : !81-196.lissyara.su
 condition = ${if eq{$sender_helo_name}\
 {$sender_host_address}{true}{false}}

# Рубаем тех, кто в HELO пихает мой IP (2500 мудаков за месяц!)
deny condition = ${if eq{$sender_helo_name}\
 {$interface_address}{yes}{no}}
 hosts = !127.0.0.1 : !localhost : *
 message = "main IP in your HELO! Access denied!"

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
deny condition = ${if match{$sender_helo_name}\
 {\N^\d+$\N}{yes}{no}}
 hosts = !127.0.0.1 : !localhost : *
 message = "can not be only number in HELO!"

# Рубаем хосты типа *adsl*; *dialup*; *pool*;....
# Нормальные люди с таких не пишут. Если будут
# проблемы - уберёте проблемный пункт (у меня клиенты
# имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
deny message = "your hostname is bad (adsl, poll, ppp & etc)."
 condition = ${if match{$sender_host_name} \
 {adsl|dialup|pool|peer|dhcp} \
 {yes}{no}}
# Задержка. (это такой метод борьбы со спамом,
# основанный на принципе его рассылки) На этом рубается
# почти весь спам. Единственно - метод неприменим на
# реально загруженных MTA - т.к. в результате ему
# приходится держать много открытых соединений.
# но на офисе в сотню-две человек - шикарный метод.
#
# более сложный вариант, смотрите в статье по exim и
# курьер имап. Т.к. там метод боле умный (просто правил
# больше :), то можно и на более загруженные сервера ставить)

warn
# Cтавим дефолтовую задержку в 30 секунд
 set acl_m0 = 0s

warn
# ставим задержку в 0 секунд своим хостам и
# дружественным сетям (соседняя контора :))
 hosts = +relay_from_hosts:192.168.1.0/24:194.44.219.160/28
 set acl_m0 = 0s
warn
# пишем в логи задержку (если оно вам надо)
 logwrite = Delay $acl_m0 for $sender_host_name \
 [$sender_host_address] with HELO=$sender_helo_name. Mail \
 from $sender_address to $local_part@$domain.
 delay = $acl_m0

# Проверка получателя в локальных доменах.
# Eсли не проходит, то проверяется следующий ACL,
# и если непрошёл и там - deny
accept domains = +local_domains
 endpass
 message = "In my mailserver not stored this user"
 verify = recipient

# Проверяем получателя в релейных доменах
# Опять-таки если не проходит -> следующий ACL,
# и если непрошёл и там - deny
accept domains = +relay_to_domains
 endpass
 message = "main server not know how relay to this address"
 verify = recipient

# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.
deny message = you are in blacklist: $dnslist_domain --> $dnslist_text
 dnslists = opm.blitzed.org : \
 # cbl.abuseat.org : \
 # bl.csma.biz : \
 dynablock.njabl.org

# Разрешаем почту от доменов в списке relay_from_hosts
accept hosts = +relay_from_hosts

# Если неподошло ни одно правило - чувак явно ищет
# открытый релей. Пшёл прочь. :)
deny message = "relay not permitted"

##############
# Проверка вложений
acl_check_mime:
deny message = Это сообщение содержит опасное вложение
 condition = ${if match{$mime_filename}{\N(?i)\.zip$\N}}
 decode = default
 condition = ${if match{${run{/usr/bin/unzip -l $mime_decoded_filename}}}{\N(?i)\.(exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys)\n\N}}
 log_message = forbidden attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients

deny message = Это сообщение содержит опасное вложение
 condition = ${if match{$mime_filename}{\N(?i)\.rar$\N}}
 decode = default
 condition = ${if match{${run{/usr/bin/unrar l $mime_decoded_filename}}}{\N(?i)\.(exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys)\n\N}}
 log_message = forbidden attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
accept

#########

# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.

acl_check_data:

# Заблокированные аккаунты
 deny senders = /usr/local/etc/exim/deny_senders
 message = "DENY!!! Your address is: $sender_address in the black list!!!"
 # logwrite = Rejected from $sender_address to $local_part@$domain by blacklist.
 log_message = Rejected from $sender_address to $local_part@$domain by blacklist.

# Проверка на вирусы
 deny message = In email found VIRUS ($malware_name)
 malware = *

# accept by default
 accept

###############
begin routers

check_malware:
 driver = redirect
 condition = ${if def:h_X-Quarantine-Me-Malware: {1}{0}}
 headers_remove = Subject
 headers_add = Subject: [CLAMAV: $acl_m2] $h_Subject
 data = postmaster@tst-amo.pp.ua
 file_transport = address_file

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
 driver = dnslookup
 domains = ! +local_domains
 transport = remote_smtp
 ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
 no_more

# Смотрим алиасы
system_aliases:
 driver = redirect
 allow_fail
 allow_defer
 data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
 `address`='${quote_mysql:$local_part@$domain}' OR \
 `address`='${quote_mysql:@$domain}'}}

# Те, что находятся /etc/mail/aliases

system_aliases2:
 driver = redirect
 allow_fail
 allow_defer
 data = ${lookup{$local_part}lsearch{/etc/aliases}}
 user = mailnull
 group = mail
 file_transport = address_file
 pipe_transport = address_pipe

# DSPAM ROUTERS
dspam_addspam_router:
 driver = accept
 domains = +local_domains
 local_part_prefix = spam-
 transport = dspam_addspam_transport

dspam_notspam_router:
 driver = accept
 domains = +local_domains
 local_part_prefix = notspam-
 transport = dspam_notspam_transport

dspam_spamscan_router:
 driver = accept
 domains = +local_domains
 no_verify
 condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
 {!eq {$received_protocol}{local}} } {1}{0}}"
 transport = dspam_spamcheck_transport
 require_files = /usr/local/bin/dspam
 address_test = false
 user = mailnull
 group = mail

local_delivery_spam_router:
 driver = accept
 domains = +local_domains
 condition = ${if match{$h_X-DSPAM-Result:}{Spam}}
 transport = local_delivery_spam_transport
 no_more
 user = mailnull
 group = mail

# LOCAL DELIVERY
# Роутер для вирт польз MySQL
dovecot_user:
 driver = accept
 condition = ${lookup mysql{SELECT `goto` FROM \
 `alias` WHERE \
 `address`='${quote_mysql:$local_part@$domain}' OR \
 `address`='${quote_mysql:@$domain}'}{yes}{no}}

transport = dovecot_delivery
 cannot_route_message = Unknown user

# Роутер для системных
#localuser2:
# driver = accept
# check_local_user
# #transport = dovecot_delivery
# transport = local_delivery
# transport_current_directory = /
# cannot_route_message = Unknown user

##################
begin transports

remote_smtp:
 driver = smtp

# DSPAM TRANSPORT
dspam_addspam_transport:
 driver = pipe
 command = "/usr/local/bin/dspam --user \
 $local_part@$domain --class=spam --source=error"
 return_path_add = false
 return_fail_output = true
 log_output = true
 home_directory = "/var/db/dspam"
 current_directory = "/var/db/dspam"
 user = mailnull
 #user = dspam
 group = mail

dspam_notspam_transport:
 driver = pipe
 command = "/usr/local/bin/dspam --user \
 $local_part@$domain --class=innocent \
 --source=error --deliver=innocent %u"
 return_path_add = false
 return_fail_output = true
 log_output = true
 home_directory = "/var/db/dspam"
 current_directory = "/var/db/dspam"
 #user = dspam
 user = mailnull
 group = mail

dspam_spamcheck_transport:
 driver = pipe
 command = /usr/local/bin/dspam --deliver=innocent \
 --user "$local_part@$domain" -- %u

#user = dspam
 user = mailnull
 group = mail
 return_path_add = false
 log_output = true
 return_fail_output = true
 headers_remove = X-DSPAM-Result

local_delivery_spam_transport:
 driver = pipe
# Команда перемещения писем распознанных как спам в каталог спама
# у меня этот каталог Junk
 command = /usr/local/libexec/dovecot/deliver -d \
 $local_part@$domain -m Junk
 message_prefix =
 message_suffix =
 delivery_date_add
 envelope_to_add
 return_path_add
 log_output
 user = mailnull
 group = mail

# Транспорт для виртуальных получателей из Dovecot (MySQL)
dovecot_delivery:
 driver = pipe
 command = /usr/local/libexec/dovecot/dovecot-lda -e -d $local_part@$domain -f $sender_address -a $original_local_part@$original_domain
 return_path_add
 log_output = true
 delivery_date_add
 envelope_to_add
 user = mailnull
 group = mail
 return_output

# Транспорт для системных пользователей
# Does not work sieve!
#local_delivery:
# driver = appendfile
# maildir_format
# maildir_tag = ,S=$message_size
## directory = /home/mail/$domain/$local_part
# directory = /var/vmail/$local_part/Maildir
# create_directory
# delivery_date_add
# envelope_to_add
# return_path_add
# group = mail
# mode = 0660
# no_mode_fail_narrower

address_pipe:
 driver = pipe
 return_output

address_file:
 driver = appendfile
 delivery_date_add
 envelope_to_add
 return_path_add

address_reply:
 driver = autoreply

begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h

begin rewrite

###############
begin authenticators

# Для системных пользователей через EXIM
#LOGIN:
# driver = plaintext
# public_name = LOGIN
# server_prompts = "Username:: : Password::"
# server_condition = "${if pam {$auth1:$auth2}{yes}{no}}"
# server_set_id = $auth1

#PLAIN:
# driver = plaintext
# public_name = PLAIN
# server_condition = "${if pam {$auth2:$auth3}{yes}{no}}"
# server_set_id = $auth2


# Аутентификация через dovecot
dovecot_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

dovecot_cram_md5:
driver = dovecot
public_name = CRAM-MD5

server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

########################

2. Ставим dovecot

cd /usr/ports/mail/dovecot2
make install clean

 

 

 

image_pdfimage_print

cucipop – настраиваем POP3

Для нашего случая для запуск в работу cucipop будет достаточно элементарных действий.
Итак мы его запустим через суперсервер inetd, потому что для этого нам нужно просто раскоментровать одну строку и перезапустить inetd, и все 🙂
Находим в файле inetd.conf и раскоментируем (убираем # перед ним) данную ниже строку:

pop3 stream tcp nowait root /usr/local/libexec/cucipop cucipop -aY

И перезапускаем inetd.

#/etc/rc.d>/etc/rc.d/inetd restart
Stopping inetd.
Starting inetd.
#/etc/rc.d>
image_pdfimage_print

FreeBSD обновление версии 10.1 до 10.2

Обновление версии 10.1 до 10.2 (работает для 11.1 и до 11.4)

В начале обновляем текущую версию.

# freebsd-update fetch install
# shutdown -r now

после перезагрузки

# freebsd-update upgrade -r 10.2-RELEASE
# freebsd-update install
# shutdown -r now

после перезагрузки

# freebsd-update install
# shutdown -r now

Пересобрать порты:

# portsnap fetch update
# portmaster -af

Проверить ошибки:

# egrep -i 'err|warn|cri' /var/log/messages

На этом всё.

 

Обновление FreeBSD 11.4 до FreeBSD 12.2:

Обновляем текущую версию:

# freebsd-update fetch install
# shutdown -r now

Запускаем обновление:

# freebsd-update upgrade -r 12.2-RELEASE

На вопрос:

Does this look reasonable (y/n)?y

Нажимаем y.

И запускаем опять:

# freebsd-update install
# shutdown -r now

Запускаем обновление списка с репозитория:

# pkg update

и

# pkg bootstrap -f

Принудительное обновление всех установленных пакетов заменит пакеты свежими версиями из репозитория, даже если номер версии не увеличился. Это необходимо из-за изменения версии ABI при обновлении между основными версиями FreeBSD. Принудительное обновление можно выполнить, выполнив:

# pkg-static upgrade -f

Пересобираем все установленные порты с помощью команды:

# portmaster -af

Запускаем еще раз:

# freebsd-update install
# shutdown -r now

Все, проверяем логи.

PS. У меня не стартонул amavisd, apache24, postgres из-за необновившейся библиотеки… Здесь комманды которые помогли в решении:

# /usr/ports/devel/autoconf
# make all-depends-list

****

# make deinstall reinstall clean

****
# pkg install --dry-run apache2424

****

# pkg check -d -n -a

****

# pkg delete mod_php73-7.3.25

****

p5-GSSAPI “You are using OpenSSL from ports and have selected > GSSAPI from base, please select another GSSAPI value.”

Solution:
cd /usr/ports/security/p5-GSSAPI
make config
choose one from this options will help:
GSSAPI_MIT
or
GSSAPI_HEIMDAL
make clean
make install clean

****

# ldd /usr/local/libexec/apache24/mod_ssl.so

****

# find / -name mod_ssl.so -print

****

# php -m

****

Debug amavisd:

# /usr/local/sbin/amavisd -u vscan -g vscan -d 5,all -c /usr/local/etc/amavisd.conf debug

****

# netstat -an | grep LIST

****

# mysql -u postfix -p

Обновление FreeBSD 11.2 до версии FreeBSD 12.1

How to Update to FreeBSD 12.1

 

Обновление FreeBSD 11.2 до 12

Обновление ядра и мира (краткая инструкция)

Прочитать!!! /usr/src/Makefile

#freebsd-update fetch
#freebsd-update install
cd /usr/src
# make buildworld
# make buildkernel KERNCONF=WEB
# make installkernel KERNCONF=WEB
# shutdown -r now

загрузка в single user

# mount -a -t ufs
# mergemaster -p
# cd /usr/src
# make installworld
# mergemaster
# reboot

Перекомпиляция ядра командой

make kernel KERNCONF=WEB

По необходимости, удаляем старые библиотеки:

freebsd /# cd /usr/src && make check-old
freebsd /# yes | make delete-old
freebsd /# yes | make delete-old-libs

чистим за собой /usr/obj

freebsd /# cd /usr/obj && chflags -R noschg * && rm -rf *

В принципе вроде все.

Обновление FreeBSD от и до
Как часто бывает, зацепив одну, на первый взгляд, маленькую тему, с желанием быстро все узнать и все настроить, приходится закапываться в дремучие дебри и читать не одну статью и/или мануал. Так и получилось у меня в этот раз. Изначально было желание просто узнать, как обновлять порты (или исходные тексты портов) чтоб при желании, устанавливать не устаревшее ПО, но пришлось закопаться немного по глубже.
Эта статья предназначена только для новичков во FreeBSD, опытные профи тут вообще ни чего нового, думаю, для себя не найдут. По этому, если вы на «ты» с этой системой, можете смело пропускать дальнейший текст.
Информации на эту тему хватает, но из 6-10 заметок и статей я взял, так скажем, лучшие наработки и опыт, и записал их в одну, с ссылками на более полные статьи, так что при желании можно получить более подробную информацию по каждому пункту.
Содержание статьи:
1) Выбор ПО для обновления исходных текстов.
2) Процесс обновления исходных текстов системы и портов.
3) Обновление системы(ядро и мир).
4) Обновление портов при помощи pkg_*, portupgrade, portdowngrade.
5) Заключение
6) Дополнительная литература.

Выбор ПО для обновления исходных текстов
Итак, при обновлении исходных текстов я выделил 2 подраздела – это исходные тексты системы и исходные тексты портов.
1) При обновлении исходных текстов системы можно воспользоваться либо CVS либо SVN репозиторием. SVN более новая разработка и предназначен заменить устаревший cvs, соответственно svn имеет более широкий функционал при работе с версиями исходных текстов. Но т.к. я FreeBSD использую в качестве шлюза и каждые несколько дней обновлять систему и дополнительные утилиты не собираюсь, было решено остановиться на старом добром cvs, т.к. svn требует установить не малое кол-во дополнительного ПО, а глобальных плюсов для моих задач я в svn не увидел. Для работы с cvs репозиторием будет использоваться утилита csup (тоже самое что и cvsup но написанная на С), входящая в стандартный состав freebsd, то есть дополнительно ставить ни чего не нужно (обновление через SVN рассмотрено в доп-ой литературе в конце статьи).
2) Обновление исходных текстов для портов возможно только из CVS репозитория, для этого можно воспользоваться либо csup либо portsnap. Portsnap является рекомендуемой системой обновления портов и она так же предустановленна в системе, ее и будем использовать.

Процесс обновления исходных текстов системы и портов.
Настройка csup для обновления исходных текстов системы.

Для настройки параметров обновления создаём файл /etc/supfile:

*default host=cvsup6.ru.FreeBSD.org
 *default base=/var/db
 *default prefix=/usr
 *default release=cvs
 *default delete use-rel-suffix
 *default compress
 #*default release=cvs tag=RELENG_8_1_0_RELEASE
 *default release=cvs tag=RELENG_8
 src-all

примеры тегов для дерева src-all:

 RELENG_8 — Ветка FreeBSD 8-STABLE
 RELENG_8_1 — Ветка FreeBSD 8.1 в которую идут патчи безопасности
 RELENG_8_1_0_RELEASE — «Замороженный» снепшот состояния кода FreeBSD 8.1 в момент его релиза

Всё готово, запускаем обновление:

# csup -L 2 /etc/supfile

Можно добавить ключик -z (компрессия) для экономии траффика.

Если файл настройки только что создан, и эта программа раньше никогда не использовалась, то вы можете начать беспокоится а все ли пройдет удачно… Есть простой способ для пробного запуска без затрагивания ваших драгоценных файлов. Просто создайте где-нибудь пустой каталог и поместите его в качестве дополнительного аргумента командной строки:

# mkdir /var/tmp/dest
# cvsup supfile /var/tmp/dest

Указанный каталог будет использоваться в качестве места назначения всех обновлений. CVSup будет работать с файлами из /usr/src, но не станет изменять или удалять их. Вместо этого все обновления файлов будут помещены в /var/tmp/dest/usr/src. При запуске таким способом CVSup оставит также неприкосновенным каталог base. Новые версии этих файлов будут записаны в указанный каталог. Если у вас есть права на чтение каталога /usr/src, вам даже не потребуется работать под root для выполнения пробного обновления.

Обновление портов через portsnap
Для первого запуска:

$ portsnap fetch
$ portsnap extract

Для всех последующих запусков:

$ portsnap fetch
$ portsnap update

Fastest cvsup
Задача утилиты fastest_cvsup — поиск оптимального по скорости доступа сервера с CVS репозиторием.

$ cd /usr/ports/sysutils/fastest_cvsup/
$ make install clean & rehash

Применение:

$ fastest_cvsup -q -c ru

Обновление системы (ядро и мир), теория.

Предположим, что мы поставили себе свежеиспеченую FreeBSD 8.1-RELEASE, и захотели обновить ее до ветки FreeBSD 8-STABLE. Нам необходимо произвести синхронизацию тех исходных текстов которые у нас есть на диске, с репозиторием — скачать новые части.
Последовательность действий такова:
1) составляем supfile и помещаем в него директиву list. В которой указываем под каким именем должен будет сохранен checkouts файл:

src-all tag=RELENG_8_1_0_RELEASE list=RELENG_8

2) Проводим первую синхронизацию, командой (#csup -L 2 /etc/supfile), с замороженной веткой нашего релиза RELENG_8_1_0_RELEASE
3) Удаляем из нашего supfile директиву list:

src-all tag=RELENG_8

4) проводим вторую синхронизацию с веткой RELENG_8 — обновляем исходники до STABLE
Суть идеи в следующем — при работе csup она использует checkouts файлы для того чтобы сравнивать информацию о версиях файлов на локальном диске и на сервере, и проводить синхронизацию только изменившихся. Сразу после установки системы, в директории /var/db/sup никаких checkouts файлов для синхронизируемых нами коллекций еще нет. Трюк в том, чтобы сначала их создать. Так как у нас релиз 8.1 и исходники установлены от него же, то проведя первую «синхронизацию» с «замороженным» тегом этого же самого релиза RELENG_8_1_0_RELEASE мы сможем построить актуальные checkouts файлы. Первая синхронизация по сути нечего не синхронизирует, а только энумерует файлы на диске и в репозитории, да строит базу данных — checkouts файл. После первой синхронизации мы получим в директории /var/db/sup поддиректорию src-all.
В ней будет файл с именем checkouts.cvs:RELENG_8 – т.к. мы это указали в директиве list. Как только мы начнем вторую синхронизацию с сервером, то csup будет точно знать какие версии файлов надо передать, а что надо удалить. Синхронизация будет выполнена более чисто, займет меньше времени и потребует меньше трафика.

Обновление системы (ядро и мир), пркатика.
uname –v – узнаем текущую версию ядра
uname –r — узнаем текущую версию системы
Обновление лучше всего разбить на 2 части, сборка – компиляция исходников и дальнейшая инсталляция. Заниматься этим приходится не часто по этому, для меня, лучше всего делать все схематично, так проще отлавливать возможные косяки.

I) Сборка
Сначала собрать мир!!!
1. Ядро

 1) cd /usr/src/
 2) rm -R /usr/obj/*

(Если при удаление выдало ошибки по поводу установленных флагов, то необходимо выполнить команду

#chflags -R noschg * )
 3) make clean && make clean
 4) make -sj4 buildkernel KERNCONF=YOUR_KERNEL_HERE

(YOUR_KERNEL_HERE — название ядра которое лежит в папке /usr/src/sys/i386/conf. Но заметьте, вы путь не указываете, а указываете только имя файла. Советую переименовать файл, чтобы скомпилилось новое ядро, а не то что было до обновления системы)
Где j4 — компилировать в 4 потока. Рекомендуется для однопроцессорных машин, т.к. компиляция в большей степени требовательная к системе ввода-вывода, а не процессору. Для многопроцессорных это значение можно увиличить. s — уменьшает количество выводимой инфы на экран.)

2. Мир (система)

 1) cd /usr/src/
 2) rm -R /usr/obj/*
 3) make cleandir && make cleandir – (make cleandir делать дважды рекомендует хандбук)
 4) make -sj4 buildworld

II) Инсталляция

1. Ядро

1) make installkernel KERNCONF=YOUR_KERNEL_HERE
2) reboot

2. Мир (система)
Мир — это пользовательские программы – типа: grep, awk, sh, chmod и прочего. Короче всё, что не входит в ядро и модули ядра. Перед сборкой рекомендуется вернуть к стандартному виду /etc/make.conf. В случае проблем — если что-то не собирается или не инсталлится — стоит посмотреть, что там и убрать лишнее.
В процессе инсталляции мира, в идеале нужно запускать программу mergemaster. Эта программа определяет разницу между вашими конфигурационными файлами в каталоге /etc и конфигурационными файлами из дерева исходных текстов /usr/src/etc. Это является рекомендуемым способом синхронизации системных конфигурационных файлов с теми, что размещены в дереве исходных текстов.
Для пересборки мира лучше зайти в однопользовательский режим(single-user):

 1) mount -u / 
 2) mount -a 
 3) rm -R /usr/obj/*
 4) /usr/src/usr.sbin/mergemaster –p

Если есть отличия, то на экране появляется сообщение об этом.
Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия.
Знаком “-” помечаются строки, которые утилита собирается удалить,
а “+” — которые будут добавлены.
В конце предлагаются следующие варианты:

d — удалить предлагаемый вариант и оставить старый; 
i — установить предлагаемый вариант, удалив старый; 
m — сравнить построчно старый и предлагаемый вариант; 
v — посмотреть отличия в файлах снова.
 5) cd /usr/src/
 6) make installworld
 7) mergemaster
 8) reboot 
 9) cd /usr/src/
 10) make delete-old

Обновление портов при помощи pkg_*, portupgrade, portdowngrade.

 1) #portsnap fetch update – обновление портов.
 2) # pkg_version -v | grep “need” — Вывод списка портов, которые надо обновить
 3) #pkg_create -b port_name – Возможность создать пакеты для нужных портов с последющей установкой через pkg_add
 4) #pkg_add -i -f port_name.tbz – Установка пакета без зависимостей. После такой установки проще всего откатится на предыдущую версию.

Использование утилиты portupgrade

Найти можно тут — /usr/ports/ports-mgmt/portupgrade
1) portupgrade -nr port_name – выводит подробную информацию о будущей установке пакета (какие файлы и зависимости обновятся)
2) portupgrade -ir port_name
Ключ -i указывает на то, чтобы при апгрейде опрашивался пользователь в случаях, когда есть выборки (yes/no).
Ключ -r указывает обновлять нижестоящую цепочку зависимостей порта.

При апдейте с помощью portupgrade важным козырем является файл настроек /usr/local/etc/pkgtools.conf, в котором содержатся параметры передаваемые порту при сборке (хэш MAKE_ARGS). Полезно отредактировать подобные настройки в этом файле под свои нужды и последующие обновления будут проходить без лишних проблем.
Также нужные параметры можно выдрать в случае переустановки порта или при переходе на какую-то новую версию, да и это полезно бывает для поддержания совместимости установок между серверами. Например, много нервов может убить разнящаяся кодировка установленного mysql при переносе какого-то сайта между серверами.
Бывают случаи, когда надо железно запретить обновления для определенного порта. Имена таких портов можно указать в хэше HOLD_PKGS в файле pkgtools.conf, например так запрещаем обновление midnight commander’a:

HOLD_PKGS = [
 'mc-*',
 ]

Утилита portdowngrade

Позволяет откатится на предыдущую версию.
Установка:

# cd /usr/ports/ports-mgmt/portdowngrade 
# make DEFAULT_CVS_SERVER="anoncvs@anoncvs1.FreeBSD.org:/home/ncvs" install clean

Использование:

#portdowngrade port_name – выводит список предыдущих версий порта и дает возможность выбрать и установить нужную версию.

Заключение
Вот такой вот получился мануал, по полному обновлению FreeBSD. Я только изучаю эту ОС по этому на открытие чего то нового не претендую, но лично мне намного удобнее пользоваться одной статьей чем 5-ю, 6-ю и т.д. для каждой отдельной утилиты, по этому мануал я составлял для себя, но может, он так же, окажется, кому то полезным!

image_pdfimage_print

Исследование процессора, памяти и операций ввода-вывода с помощью top

Утилита top(1) предоставляет хороший обзор состояния системы, отображая информацию об использовании процессора, памяти и диска. Достаточно ввести команду top, чтобы получить полноэкранное отображение сведений о производительности системы. Информация обновляется каждые две секунды, что позволяет представить состояние системы практически в режиме реального времени.

Довольно плотно, не так ли? top пытается втиснуть как можно больше данных в стандартное окно терминала 80425 символов. Остановимся на этом выводе и объясним смысл каждой записи.

Значения PID

Каждый процесс в машине UNIX имеет уникальный идентификатор процесса, или PID. Когда бы ни стартовал процесс, ему назначается PID, значение которого на единицу превышает PID предыдущего процесса. Поле last pid — это идентификатор процесса, запущенного в системе последним. В примере в этом поле видим значение 977 (1). Следующий запущенный процесс получит идентификатор 978, затем 979 и т. д. Наблюдение за этим числом позволит увидеть, как быстро изменяется система. Если число last pid растет слишком быстро, это может свидетельствовать о выходе из-под контроля* какого-то ветвящегося процесса* или об аварийном состоянии того или иного демона.

Средняя нагрузка

Поле load average (средняя нагрузка) (2) — это не совсем понятное число. Его назначение — предоставить приблизительные данные о нагрузке на процессор системы. Средняя нагрузка равна среднему числу потоков, ожидающих выделения времени процессора. (В других операционных системах средняя нагрузка вычисляется другими методами.) Приемлемое значение средней нагрузки зависит от системы. Если оно чрезмерно, значит, надо исследовать работу системы. Многие машины класса Pentium сталкиваются с трудностями при средней нагрузке, равной 3, а некоторые современные системы быстро работают при средней нагрузке, равной 10.

top(1) выдает три значения средней нагрузки. Первое (1.14 в нашем примере) — это средняя нагрузка за последнюю минуту. Второе (0.80) — за последние 5 минут, а третье (0.18)- за предыдущие 15 минут. Если средняя нагрузка за последние 15 минут высока, а за последнюю минуту — низка, то налицо высокий пик активности системы, который пришелся на этот 15-минутный интервал. С другой стороны, если 15-минутное значение невелико, а нагрузка за последнюю минуту высока, значит, что-то произошло за последние 60 секунд и, возможно, продолжается сейчас. Если велики все значения средней нагрузки, то такое состояние удерживалось все 15 минут.

Uptime

Последнее поле в первой строке — uptime (3). Оно сообщает о том, как долго работает система. В нашем примере система работает 18 минут, а текущее время — 18:30:34. Предоставляю вам возможность вычислить, когда произошла загрузка системы.

Количество процессов

Во второй строке (4) представлена информация о процессах, запущенных в системе в настоящее время. Работающие (running) процессы непосредственно выполняют работу; они отвечают на запросы пользователей, обрабатывают почту и выполняют все другие операции. Спящие (sleeping) процессы ожидают входных данных от того или иного источника. Это хорошие состояния процессов. Процессы в других состояниях обычно ожидают доступности ресурсов или в некотором роде зависли. Большое количество неспящих, неработающих процессов может свидетельствовать о неполадках. Команда ps(1) покажет состояние всех процессов.

Типы процессов

Строка CPU states (5) сообщает, какая доля доступного времени процессора (в процентах) расходуется на обслуживание процессов различных типов. В этой строке представлены пять различных типов процессов: user, nice, system, interrupt и idle.

Пользовательские процессы (user) — это средние повседневные программы. Это могут быть демоны, запущенные от имени root, команды, запущенные обычными пользователями, или что-нибудь другое. Если процесс представлен в выводе команды ps -ax, это пользовательский процесс.

Процессы nice — это процессы, приоритеты которых может определять пользователь. Более подробно они рассмотрены в разделе «Изменение приоритетов с помощью nice» этой главы.

Значение system дает общее время процессора (в процентах), потраченное процессами ядра FreeBSD и пользовательскими процессами при выполнении в пространстве ядра. В состав таких процессов входят обработчики виртуальной памяти, сетевые процессы, процессы записи на диск, отладка с параметрами INVARIANTS и WITNESS и т. д.

Значение interrupt показывает, сколько времени система затрачивает на обработку запросов прерывания (IRQ).

Наконец, поле бездействующих процессов (idle) показывает, сколько времени система ничего не делает. Если время бездействия процессора очень мало, то стоит задуматься о том, чтобы пересмотреть порядок планирования заданий, или о покупке более быстрого процессора.
top и SMP

При работе с многопроцессорной системой следует иметь в виду, что top(1) отображает средние показатели нагрузки по всем процессорам. Один процессор может быть полностью занят компиляцией, а другой может бездействовать, и в этом случае top(1) покажет, что система загружена на 50%.

Память

Далее идет строка Mem (6), представляющая действительную физическую память. Операционная система FreeBSD делит информацию об использовании памяти на несколько различных категорий.

Активная память (Active) — это общая емкость памяти, которая в данный момент задействована для выполнения пользовательских программ. Когда выполнение программы завершается, использованная ею память попадает в неактивную память (Inact). Данные, полученные с диска, помещаются в кэш (Cache). Если системе потребуется вновь запустить эту же программу, она будет взята из кэша, а не с диска.

Аналогично, запись Buf показывает емкость буфера памяти. Этот буфер содержит данные, недавно полученные с диска. Категория Buf фактически является подмножеством категорий активной памяти, неактивной памяти и кэша, а не отдельной, самостоятельной категорией.

Свободная память (Free) вообще не задействована. Это может быть память, к которой еще не было обращений, или память, освобожденная процессом. В этой системе присутствует 1 607 Мбайт свободной физической памяти. Если по истечении месяца на сервере еще остается свободная память, можно подумать о том, чтобы перенести часть памяти на машину, где ощущается ее нехватка. Результаты работы top(1) в этом примере были получены на моем ноутбуке, и ему необходим каждый бит памяти, которую он сможет получить.

В процессе поддержки пула доступной памяти операционная система FreeBSD постоянно тасует память между категориями активной, неактивной памяти и кэшем. Память в кэше легко может перейти в категорию свободной памяти. Когда начинает ощущаться нехватка памяти в кэше, а потребность в свободной памяти остается высокой, FreeBSD выбирает страницы из пула неактивной памяти, проверяет, могут ли они использоваться в качестве свободной памяти, и перемещает их в пул свободной памяти. FreeBSD старается сохранить общее число страниц свободной памяти и кэша выше значения sysctl vm.v_free_target. (Размер страницы определяется параметром sysctl hw.pagesize, значение которого для платформ i386 и amd64 составляет 4 096 байт.)

Наличие свободной памяти в системе вовсе не означает, что в системе достаточно памяти. Если vmstat(8) показывает большой объем операций с пространством свопинга, это свидетельствует о нехватке памяти. В системе может работать программа, которая постоянно освобождает память. Кроме того, FreeBSD перемещает некоторые страницы из кэша в пул свободной памяти, чтобы поддержать заданный уровень свободной памяти.

Связанная память (Wired) — это память, применяемая для структур данных ядра, а также для особых системных вызовов, которым память нужна немедленно. Связанная память никогда не вытесняется в пространство свопинга.

Своп

Далее идет строка Swap (7), содержащая данные о доступном пространстве свопинга (области подкачки) и о ее задействованном объеме. При свопинге (swapping) система использует дисковый накопитель как дополнительную память. Далее в этой главе пространство свопинга рассмотрено более подробно.

Список процессов

Наконец, top(1) выводит список процессов системы и их базовые характеристики. Формат таблицы подразумевает вывод как можно большего объема информации в максимально сжатой форме. Каждый процесс описан в отдельной строке.

PID
Первая колонка — числовой идентификатор процесса, или PID. Каждый процесс, запущенный в системе, имеет уникальный PID. Выполняя команду kill(1), вы указываете процесс по его PID. (Если PID процесса неизвестен, можно использовать команду pkill(1), чтобы указать процесс по его имени.)

USERNAME
Следующая колонка — имя пользователя, от имени которого запущен процесс. Если несколько процессов с одним пользовательским ID интенсивно потребляют время процессора или память, вы знаете, с кем поговорить.

PRI и NICE
Колонки PRI (priority — приоритет) и NICE взаимосвязаны. Они показывают, какой приоритет система назначает тому или иному процессу. О приоритетах и nice речь пойдет чуть далее.

SIZE
Это объем памяти, которую система выделила для этого процесса.

RES
В колонке RES (Resident Memory) показано, какая часть программы действительно находится в памяти (резидентна). Для программы может быть отведен огромный объем памяти, но задействована ею будет лишь малая его часть. Например, в то время, как я пишу эти строки, моей программе OpenOffice.org выделено 169 Мбайт, но используется только 103 Мбайт. (Интересное наблюдение: в память, используемую X.org, включается память видеокарты, которая не входит в состав физической памяти системы.)

STATE
В колонке STATE показано, что делает процесс в данный момент. Процессы могут пребывать в разных состояниях: ожидать ввода данных; спать, пока их кто-нибудь не разбудит; выполняться и т. д. Здесь можно видеть имя системного вызова, такого как select, pause или ttyin, в котором процесс ожидает наступления определенного события. В многопроцессорных системах для работающих процессов можно видеть, на каком процессоре он исполняется. В нашем примере процесс acroread исполняется на процессоре CPU0.

TIME
Колонка TIME сообщает, какой объем процессорного времени использовал процесс.

WCPU
Колонка WCPU (использование CPU) выдает взвешенные показатели использования CPU, а именно процентное отношение времени CPU, которое процесс использует согласно своему приоритету и значению nice.

COMMAND
Наконец, в колонке COMMAND представлено имя программы.

Вывод команды top(1) позволяет понять, где система тратит больше всего времени.
top(1) и ввод/вывод.

Помимо стандартной статистики использования процессора, у top(1) есть режим вывода информации об операциях ввода-вывода, в котором отображаются процессы, наиболее активно использующие диск. Чтобы перейти в режим отображения информации об операциях ввода-вывода, нужно после запуска top(1) нажать клавишу М. В верхней части экрана по-прежнему выводится информация об использовании памяти, пространства свопинга и о состоянии процессора, но нижняя часть существенно изменилась.

Колонка PID — это идентификатор процесса, а в колонке USERNAME выводится имя пользователя, от лица которого был запущен процесс.

Название колонки VCSW происходит от voluntary context switches (добровольное переключение контекста) и показывает, сколько раз процесс добровольно уступил систему другим процессам. Название колонки IVCSW означает involuntary context switches (принудительное переключение контекста) и показывает, сколько раз ядро сообщало процессу: «Ваше время истекло, пора дать поработать другим процессам».

Аналогично, в колонках READ и WRITE выводится число дисковых операций чтения и записи, произведенных системой. В колонке FAULT показано, как часто этот процесс перемещал страницы памяти из пространства свопинга, что по сути является одной из разновидностей дисковых операций. Сумма значений этих трех столбцов выводится в колонке TOTAL.

В колонке PERCENT показан процент дисковых операций, приходящийся на долю этого процесса. В отличие от gstat(8), команда top(1) выводит все значения в процентах от фактической дисковой активности, а не от максимальной возможной. Если в системе имеется единственный процесс, использующий диск, top(1) покажет, что этому процессу принадлежат все 100% дисковых операций, даже если он всего лишь записал немного данных. Команда gstat(8) показывает уровень нагрузки на диск, a top(1) — какие процессы ответственны за эту нагрузку. Здесь мы видим, что все дисковые операции выполняются процессом с идентификатором 3064. Это процесс командного интерпретатора tcsh(1). Давайте понаблюдаем за «злодеем».

Дополнительные возможности команды top

Команда top может выводить информацию на экран разными способами. С ее помощью можно просматривать процессы, принадлежащие определенному пользователю, включая или исключая потоки ядра, и т. д. За дополнительной информацией обращайтесь к странице руководства.

top -SIH =>

 

 

image_pdfimage_print

shutdown – перезагрузка Windows скриптом

Тогда давайте создадим пакетные файлы (создаваемые файлы предназначены для операционной системы Windows XP, но работают и в Windows Vista, и в Windows 7, и в Windows 10.
Сначала создадим bat-файл для выключения ПК Для этого запустите программу Блокнот
(%SystemRoot%\system32\notepad.exe):

щелкните по свободной от значков поверхности Рабочего Стола. Из открывшегося контекстного меню выберите

Создать –> Текстовый документ.
На Рабочем Столе будет создан текстовый документ. Задайте ему название по своему вкусу, но лучше интуитивно понятное, например, Выключение (или Shutdown).
Теперь откройте файл и введите следующую строку:
shutdown.exe -s -t 00

[здесь: shutdown.exe – запуск утилиты Удаленное завершение работы Windows; -s – завершение работы ПК (shutdown); -t 00 – таймаут завершения работы (00 сек., т.е. мгновенно)]

Сохраните файл и закройте его. Теперь, чтобы текстовый документ стал пакетным файлом, нам нужно поменять расширение файла с .txt на .bat. Для этого нужно запустить Проводник Windows, открыв любую папку, например, щелкнув по значку Мой компьютер.
Выберите меню Сервис –> Свойства папки… В открывшемся диалоговом
окне Свойства папки откройте вкладку Вид. В прокручиваемом списке Дополнительные параметры снимите флажок Скрывать расширения для зарегистрированных типов файлов. Нажмите OK.  Найдите на Рабочем Столе созданный нами файл. Теперь в его названии отображается расширение .txt.
Переименуйте файл Выключение.txt в Выключение.bat.
При этом появится предупреждение системы: После смены расширения имени файла этот файл может оказаться недоступным. Вы действительно хотите изменить расширение? Да/Нет. Санкционируйте смену расширения, нажав Да. Изменится вид значка файла и расширение. Далее, для удобства пользования, переместите созданный нами файл (или ярлык от него) на панель Быстрого запуска. Установите обратно флажок Скрывать расширения для зарегистрированных типов файлов (Мой компьютер –> Сервис –> Свойства папки… –> Вид –> Дополнительные параметры): это нужно для того, чтобы у вас в дальнейшем не было неудобств с переименованием файлов.
Теперь вы можете выключать ПК одним кликом мыши по значку файла Выключение.bat.
При этом можно не закрывать открытые файлы и приложения: они будут закрыты принудительно (поэтому изменения, внесенные в файлы,
нужно предварительно сохранить!!!).
 Теперь создадим bat-файл для перезагрузки ПК Для этого запустите программу Блокнот
(%SystemRoot%\system32\notepad.exe):
щелкните по свободной от значков поверхности Рабочего Стола. Из открывшегося контекстного меню выберите
 Создать –> Текстовый документ.
На Рабочем Столе будет создан текстовый документ.
Задайте ему название по своему вкусу, но лучше интуитивно понятное, например, Перезагрузка (или Reboot).
Теперь откройте файл и введите следующую строку:
shutdown.exe -r -t 00
здесь: shutdown.exe – запуск утилиты Удаленное завершение работы Windows; -r – перезагрузка ПК (reboot); -t 00 – таймаут завершения работы (00 сек., т.е. мгновенно)]
Сохраните файл и закройте его. Смените расширение файла с .txt на .bat. Далее, для удобства пользования,
переместите созданный нами файл на панель Быстрого запуска.   Теперь вы можете перезагружать ПК одним кликом мыши по значку файла
Перезагрузка.bat. При этом можно не закрывать открытые файлы и приложения: они будут закрыты
принудительно (поэтому изменения, внесенные в файлы, нужно предварительно сохранить!).
Источник: http://netler.ru/pc/shutdown.htm
image_pdfimage_print

Утилита sfc – путь к дистрибутиву

Если содержимое инсталляционного CD скопировано на жесткий диск, a CD под рукой нет,
то можно указать путь к файлам следующим образом. Запустите редактор реестра
(Пуск | Выполнить | regedit), перейдите к ключу
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup
и измените параметер SourcePath, указав соответствующий путь:
image_pdfimage_print

rmuser

Способ №1

Для полного удаления пользователя из системы запустите rmuser с правами суперпользователя. Эта программа выполняет следующие действия:

  • Если в crontab существуют записи пользователя, то они удаляются.
  • Удаляются принадлежащие пользователю задачи at.
  • Уничтожаются все процессы, принадлежащие пользователю.
  • Удаляется запись пользователя из локального файла паролей.
  • Если домашний каталог принадлежит пользователю, то каталог удаляется.
  • Удаляется принадлежащая пользователю входящая почта из /var/mail.
  • Удаляются все файлы, принадлежащие пользователю, из каталогов с временными файлами, например из /tmp.
  • Наконец, в /etc/group из всех групп удаляется имя пользователя. Если после этого удаления группа остается пустой и имя группы совпадает с именем пользователя, она удаляется. Это необходимо для удаления пользовательских уникальных групп, создаваемых adduser.

rmuser не может использоваться для удаления учетной записи суперпользователя, поскольку это почти всегда означает разрушение системы.

По умолчанию используется интерактивный режим

Способ №2

Способ для экстремалов… =)…

Переходим в /etc. Вытираем руками из master.passwd и при необходимости из group. В принципе, можно просто закомментировать ибо может понадобится(позвонят, попросят вернуть). Потом даём команду

pwd_mkdb -p master.passwd
image_pdfimage_print

rehash

Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ, доступных для вызова из каталогов, перечисленных в переменной окружения  PATH .

Если вы используете один из таких командных процессоров, то перед использованием только что добавленных программ вам может понадобиться вызвать команду rehash после установки порта. Эта команда будет работать с такими оболочками, как, например, tcsh.

При работе с такими командными процессорами, как sh или shells/bash, воспользуйтесь командой hash -r. Дополнительную информацию можно найти в документации к вашему командному процессору

image_pdfimage_print

перенос системных пользователей

Перенос базы пользователей FreeBSD
March 11th, 2010
Чтобы перенести всех системных пользователей на другой сервер надо просто скопировать поверх файлы /etc/master.passwd и /etc/group, и затем на новом сервере выполнить команду
pwd_mkdb master.passwd
image_pdfimage_print