Сейчас в портах есть порт php52, но у меня он корректно собрался с модулем апача только с Apache 2.2. Поэтому в скрипте автоматической установки будет небольшое исправление:
make WITHOUT_SAMBA=yes -DBATCH -C /usr/ports/misc/mc install clean
make WITH_RC_NG=yes -DBATCH -C /usr/ports/ftp/vsftpd install clean
make WITHOUT_IPV6=yes -DBATCH -C /usr/ports/www/apache22 install clean
make WITH_CHARSET=utf8 WITH_COLLATION=utf8_unicode_ci -DBATCH -C /usr/ports/databases/mysql51-server install clean
make WITH_APACHE=yes WITHOUT_IPV6=yes -DBATCH -C /usr/ports/lang/php52 install clean
make WITH_BUNDLED_PCRE=yes -DBATCH -C /usr/ports/devel/php52-pcre install clean
make WITH_MBSTRING=yes WITH_CURL=yes WITH_FTP=yes WITH_GD=yes WITH_MCRYPT=yes WITH_MYSQL=yes WITH_MYSQLI=yes WITH_OPENSSL=yes WITH_SOCKETS=yes WITH_ZLIB=yes -DBATCH -C /usr/ports/lang/php52-extensions install clean
make -DBATCH -C /usr/ports/www/mod_geoip2 install clean
make WITH_HTTP_FLV_MODULE=yes -DBATCH -C /usr/ports/www/nginx install clean
make -DBATCH -C /usr/ports/www/mod_rpaf2 install clean
make -DBATCH -C /usr/ports/devel/ZendOptimizer install clean
Причина этого проста – при сборке этого порта забыли поставить галочку для поддержки апача. Т.е. надо просто сделать make config этому порту и переустановить его.
Чтобы перенести всех системных пользователей на другой сервер надо просто скопировать поверх файлы /etc/master.passwd и /etc/group, и затем на новом сервере выполнить команду
У файлов из /usr/local/etc/mpd5/ делаем копии без .sample
В mpd.secret удаляем все и прописываем имя и пароль в открытом виде через табуляцию.
В mpd.conf:
В секции startup: комментируем строчки set web.
В default заменяем на load pptp_server
В секции pptp_server:
меняем set ippool add pool1 на пул не пересекающийся с нашими локальными адресами.
set ipcp dns 8.8.8.8
set ipcp ranges – адрес сервера
set pptp self – адрес на котором будет слушать сервер.
set ipcp nbns – можно удалить
На сегодняшний день имеется проблема выражающаяся в том, что одна из основных функций toGDImage() не работает выдавая ошибку “ffmpeg.so: Undefined symbol img_convert”
Этот проблему не решил.
Помогло следующее: порт multimedia/ffmpeg должен быть собран без swscaler. Для этого нужно поправить Makefile. Т.е. сделать –disable-swsale. После пересборки самого ffmpeg, пересобрать и php-ffmpeg.
yum install GeoIP GeoIP-devel
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/lib -I/usr/include -lGeoIP -c mod_geoip.c
В /etc/httpd/conf/httpd.conf добавляем:
LoadModule geoip_module /usr/lib/apache/mod_geoip.so
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
/etc/init.d/httpd restart
В случае с FreeBSD:
cd /usr/ports/net/GeoIP && make install
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c
Иногда возникает необходимость откатить приложение установленное через порты на более раннюю версию. Сначала откатим данные в нашей базе портов на нужную версию. К примеру будем откатывать php:
cd /usr/ports/ports-mgmt/portdowngrade && make install clean
/usr/local/sbin/portdowngrade -s "anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs" lang/php5
Выбираем 1, выбираем номер версии на которую нужно откатиться, пишем yes
Теперь мы получили нужную версию в дереве портов. Теперь, чтобы переустановить приложение в систему:
portupgrade -f php5
Если надо даунгрейдить другие приложения, то шаги нужно повторить.
Сначала скачиваем исходники системы.
Внимание на тэг обновления! Он обязательно должен совпадать с веткой установленной системы. Например, для системы FreeBSD 7.2-RELEASE-p2 тэг должен быть tag=RELENG_7_2.
cd /usr/share/examples/cvsup
Правим хост в standard-supfile на *default host=cvsup5.FreeBSD.org и запускаем:
csup ./standard-supfile
Затем:
mkdir /home/jail_sample
setenv D /home/jail_sample
mkdir -p $D
cd /usr/src
make buildworld
make installworld DESTDIR=$D
cd etc/ [1]
make distribution DESTDIR=$D
mount -t devfs devfs $D/dev
Убедиться, что демоны на хост-машине и в jail не пересекаются по используемым IP-адресам.
Команды для управления jail-ом:
/etc/rc.d/jail start/stop/restart sample
jls # список запущенных jail
jexec 2 tcsh # запустить шелл внутри jail с ID=2
Возможно, потребуется поправить некоторые sysctl на хост-машине:
security.jail.set_hostname_allowed – если 1, то внутри jail можно поменять имя хоста;
security.jail.socket_unixiproute_only – если 1 , то сокет в jail можно создать только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
security.jail.sysvipc_allowed – если 1, то то в jail можно получить доступ к глобальному System V IPC;
security.jail.getfsstatroot_only – если 1, то в jail можно получить информацию (df)только о той файловой системе на которой создан jail;
security.jail.allow_raw_sockets – если 1, то в jail можно создавать raw sockets;
security.jail.chflags_allow – если 1, то процессы в jail могут модифицировать флаги ФС.
Часто возникает задача в реальном времени наблюдать за загрузкой интернет-канала по пользователям сидящими за nat-ом. С этим отлично справляется . Он выдает вот такую картинку:
Ставим:
cd /usr/ports/net-mgmt/iftop && make install
Можно использовать такой конфиг (.iftoprc) где 2М это ширина входящего интернет-канала:
port-resolution: no
show-bars: yes
promiscuous: no
port-display: off
line-display: one-line-sent
max-bandwidth: 2M
hide-source: yes
Скрипт может создавать локальный архив из указанных каталогов, с указанными исключениями; архив mysql-баз. Может закачивать их на указанный FTP-сервер. Автоматически удаляет старые архивные копии (два варианта правил). Есть поддержка полного и инкрементального бэкапов. Работает под FreeBSD и Linux. Есть шифрование архивов и отправка уведомления о результатах на электронную почту.
Текст всех файлов ниже. Возможно удобнее будет скачатьархив: файл backup.sh
#!/bin/sh
# Kiloservers.com sample backup script
# Last changes from: 23-07-2009
# Global backup tasks
mysql="YES" # need backup mysql bases? YES || NO
filebackup="YES" # need perform backup local files? YES || NO
savelocalbackup="YES" # need save backup on local drive? YES || NO
uploadbackup="YES" # need upload backup to FTP server? YES || NO
encryptbackup="NO" # need encrypt backup? YES || NO. If "YES" setup "encryptkey".
emailresult="YES" # need send e-mail with the results of backup? YES || NO. If "YES" setup "emailforresult".
# Common parametrs
backuptype="full" # 'full' or 'incremental'-files changed after last full backup
scriptdir="/etc/backup-complect" # homedir of this script
backupdir="/home/backup" # where save local backup
incfile="incfile" # file/dirs include to backup. Change content of this file
exfile="exfile" # file/dirs exclude from backup. Change content of this file
minfreespace="5000" # Minimal free space on backup slice in MB to start backup
encryptkey="" # Secret key to encrypt backup. Min 10 symbols recommended. Make sure that this key is kept in a safe place!
gpgpath="/usr/local/bin/" # path to gpg program
ftppath="/usr/bin/" # path to ftp client program
emailforresult="" # e-mail for backup results
sendmailpath="/usr/sbin/" # path to sendmail program
# SQL settings
sqluser="root"
sqlpass=""
sqlhost="localhost"
allbases="YES" # 'YES' or 'NO'. Backup all bases or only from 'backupsqlbases' parametr
backupsqlbases="mysql" # bases list separate by space
mysqlutilspath="/usr/local/bin/" # path to 'mysql' and 'mysqldump' folder. No need to change.
sqldef="--single-transaction --skip-add-locks --skip-disable-keys --force" # parametrs for mysqldump
#######################
##### just do it! #####
#######################
salt=`< /dev/urandom tr -dc A-Za-z0-9 | head -c8` # random string for more secure ftp uploads
freespace=`df -m $backupdir | grep dev | awk '{print $4}'` # current free space on backupdir slice
hostn=`hostname`
backupstartdate=`date "+%Y-%m-%d %H:%M %Z%n"`
# check to exist backupdir
if [ ! -d $backupdir ]; then
echo "$backupdir backupdir is no exist! Backup canceled."
exit
fi
# check to exist mysql/mysqldump program
if [ $mysql = YES ]; then
if [ ! -f $mysqlutilspath"/mysql" ]; then
mysqlutilspath="/usr/bin/"
if [ ! -f $mysqlutilspath"/mysqldump" ]; then
echo "mysqldump program is not exist on this path $mysqlutilspath ! Backup canceled."
exit
fi
fi
fi
# check to email setup
if [ $emailresult = YES ]; then
if [ $emailforresult = "" ]; then
echo "You should setup emailforresult parametr. Backup canceled."
exit
fi
if [ ! -f $sendmailpath"/sendmail" ]; then
echo "You should setup sendmail before. Backup canceled."
exit
fi
fi
# check to exist ftp client program
if [ $uploadbackup = YES ]; then
if [ ! -f $ftppath"/ftp" ]; then
ftppath="/usr/local/bin/"
if [ ! -f $ftppath"/ftp" ]; then
echo "FTP client program is not exist on this path $ftppath ! Backup canceled."
echo "To install ftp client on CentOS/RHEL:"
echo "yum install ftp"
exit
fi
fi
# remove old ftp logs
if [ -f $scriptdir"/ftpdump.txt" ]; then
rm $scriptdir"/ftpdump.txt"
fi
fi
# check to free space on backupdir
if [ $minfreespace -ge $freespace ]; then
echo "Free space not enought! Backup canceled."
exit
fi
# check gpg and secret key
gpgext=""
if [ $encryptbackup = YES ]; then
if [ $encryptkey = "" ]; then
echo "You must install the encryption key. Exit."
exit
fi
if [ ! -f $gpgpath"/gpg" ]; then
gpgpath="/usr/bin/"
if [ ! -f $gpgpath"/gpg" ]; then
echo "GnuPG v.1 is not found. You must setup path to GnuPG v.1 in gpgpath or setup GnuPG v.1."
echo "To setup GnuPG v.1 on FreeBSD use:"
echo "pkg_add -r gnupg1"
echo "or"
echo "cd /usr/ports/security/gnupg1 && make install"
echo ""
echo "To setup GnuPG v.1 on CentOS/RHEL use:"
echo "yum install gnupg"
echo ""
echo "Backup canceled."
exit
fi
fi
gpgext=".gpg"
fi
# check OS
checkos=`uname -a | grep -c "FreeBSD"`
# if FreeBSD
if [ $checkos = "1" ]; then
newerparam=" --newer-mtime-than "$scriptdir"/metka"
fi
# if Linux
if [ $checkos = "0" ]; then
newerparam=" --newer "$scriptdir"/metka"
fi
# get list of all mysql bases
if [ $mysql = YES ]; then
echo "Get MySQL databases list"
if [ $allbases = YES ]; then
backupsqlbases=`echo "show databases"|$mysqlutilspath'mysql' --user=$sqluser --password=$sqlpass --host=$sqlhost|grep -v "^D"`
fi
fi
# create remote current day folder
if [ $uploadbackup = YES ]; then
echo "Create remote current day folder"
ftp -i -n $ftphost 2>&1 1>>$scriptdir/ftpdump.txt <<END_SCRIPT
quote USER $ftpuser
quote PASS $ftppass
mkdir /$curdate
quit
END_SCRIPT
fi
if [ ! -d $backupdir"/"$curdate ]; then
echo "Creating "$backupdir"/"$curdate
mkdir $backupdir"/"$curdate
chmod 777 $backupdir"/"$curdate
fi
cd $backupdir"/"$curdate
# create and upload mysql bases backup
if [ $mysql = YES ]; then
echo "Begin export databases"
for base in $backupsqlbases
do
$mysqlutilspath'mysqldump' $sqldef --user=$sqluser --password=$sqlpass --host=$sqlhost $base > $backupdir/$curdate/$base.sql
done
# get filesize
if [ $checkos = "1" ]; then
sqlbackupfilesize=`stat -f %z $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz`
else
sqlbackupfilesize=`stat -c %s $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz`
fi
if [ $encryptbackup = YES ]; then
echo "Begin encrypt databases archive"
# get filesize for gpg files
if [ $checkos = "1" ]; then
sqlbackupfilesizegpg=`stat -f %z $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext`
else
sqlbackupfilesizegpg=`stat -c %s $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext`
fi
fi
if [ $uploadbackup = YES ]; then
echo "Begin upload databases archive"
ftp -i -n $ftphost 2>&1 1>>$scriptdir/ftpdump.txt <<END_SCRIPT
quote USER $ftpuser
quote PASS $ftppass
binary
put $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext /$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext
quit
END_SCRIPT
fi
if [ $savelocalbackup = NO ]; then
echo "Remove local copy databases archive"
rm $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz
rm $backupdir/$curdate/$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext
fi
fi
# create and upload file backup
if [ $filebackup = YES ]; then
echo "Begin compress files archive"
# get filesize
if [ $checkos = "1" ]; then
filebackupfilesize=`stat -f %z $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz`
else
filebackupfilesize=`stat -c %s $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz`
fi
if [ $encryptbackup = YES ]; then
echo "Begin encrypt files archive"
# get filesize for gpg files
if [ $checkos = "1" ]; then
filebackupfilesizegpg=`stat -f %z $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext`
else
filebackupfilesizegpg=`stat -c %s $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext`
fi
fi
if [ $uploadbackup = YES ]; then
echo "Begin upload files archive"
ftp -i -n $ftphost 2>&1 1>>$scriptdir/ftpdump.txt <<END_SCRIPT
quote USER $ftpuser
quote PASS $ftppass
binary
put $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext /$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext
quit
END_SCRIPT
fi
if [ $savelocalbackup = NO ]; then
echo "Begin remove local copy files archive"
rm $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz
rm $backupdir/$curdate/$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext
fi
fi
# update special file for incremental backup
touch $scriptdir/metka
backupenddate=`date "+%Y-%m-%d %H:%M %Z%n"`
# send result e-mail
if [ -f $backupdir/report ]; then
rm $backupdir/report
fi
if [ $emailresult = YES ]; then
echo "Send a e-mail with the results"
echo "After backup free space on "$backupdir" - "`df -m $backupdir | grep dev | awk '{print $4}'`" MB" >> $backupdir/report
if [ $filebackup = YES ]; then
echo "Current file backup - "$filebackupfilesize" bytes - "$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz >> $backupdir/report
if [ $encryptbackup = YES ]; then
echo "Current encrypted file backup - "$filebackupfilesizegpg" bytes - "$hostn-$backuptype-file-backup-$curdatewithhours-$salt.tar.gz$gpgext >> $backupdir/report
fi
fi
if [ $mysql = YES ]; then
echo "Current mysql backup - "$sqlbackupfilesize" bytes - "$hostn-sql-backup-$curdatewithhours-$salt.tar.gz >> $backupdir/report
if [ $encryptbackup = YES ]; then
echo "Current encrypted mysql backup - "$sqlbackupfilesizegpg" bytes - "$hostn-sql-backup-$curdatewithhours-$salt.tar.gz$gpgext >> $backupdir/report
fi
fi
if [ $uploadbackup = YES ]; then
echo "Error during ftp upload: " >> $backupdir/report
cat $scriptdir"/ftpdump.txt" >> $backupdir/report
fi
echo "
Local backup folder statistics:" >> $backupdir/report
if [ $checkos = "1" ]; then
du -hc -d 1 $backupdir >> $backupdir/report
else
du -hc --max-depth=1 $backupdir >> $backupdir/report
fi
cat $backupdir/report | $sendmailpath"/sendmail" $emailforresult
rm $backupdir/report
fi
1. Copy this folder to /etc/
2. Create "backupdir" folder
3. Edit "incfile" (dirs are included in the backup) and "exfile" (dirs deleted from the backup) files
4. If need - create SQL user for backup and set "mysql" to YES
5. If need - set "encryptbackup" to YES and set encryptkey. To decrypt use "gpg -o output_filename.tar.gz -d encrypted_filename.gpg"
6. Setup "emailforresult"
7. Configure spacer.sh to check the free space
8. Create cron task. For example, for full backup, at first day of month .. and check free space:
###################
5 7 1 * * root /etc/backup-complect/spacer.sh 2> /dev/null
15 7 1 * * root /etc/backup-complect/backup.sh 2> /dev/null
###################
9. Perform the test run:
cd /etc/backup-complect
./backup.sh
IMPORTANT!
Do not forget to do a test restore!
Файл spacer.sh
#!/bin/sh
# Kiloservers free space and count files checker.
# The script deletes old files from "backupdir" until not enough free space
# OR
# deletes old files from "backupdir" until number of files reaches the required
# Last changes from: 23-07-2009
# Settings
mode="space" # work mode: "space" or "count".
minfreespace="5000" # Minimal free space in MB. Actual for "space" mode
count="6" # how many files stored. Actual for "count" mode
backupdir="/home/backup" # directory to check
### Begin ###
echo "Mode $mode active"
# check OS
checkos=`uname -a | grep -c "FreeBSD"`
if [ $mode = "space" ]; then
while [ `df -m $backupdir | grep dev | awk '{print $4}'` -lt $minfreespace ]
do
if [ $checkos = "1" ]; then
filetodelete=`find $backupdir -type f -exec stat -f "%Sm %N" -t %Y%m%d%H%M%S {} \; | sort -n | head -1 | cut -d' ' -f2`
else
filetodelete=`find $backupdir -type f -exec stat -c "%Y %n" {} \; | sort -n | head -1 | cut -d' ' -f2`
fi
if [ -z $filetodelete ]; then
echo "No files found. Exit"
exit
else
rm $filetodelete
echo "Deleted $filetodelete"
fi
done
fi
if [ $mode = "count" ]; then
while [ `find $backupdir -type f | wc -l` -gt $count ]
do
if [ $checkos = "1" ]; then
filetodelete=`find $backupdir -type f -exec stat -f "%Sm %N" -t %Y%m%d%H%M%S {} \; | sort -n | head -1 | cut -d' ' -f2`
else
filetodelete=`find $backupdir -type f -exec stat -c "%Y %n" {} \; | sort -n | head -1 | cut -d' ' -f2`
fi
if [ -z $filetodelete ]; then
echo "No files found. Exit"
exit
else
rm $filetodelete
echo "Deleted $filetodelete"
fi
done
fi
К пакету применяется последнее подходящее правило.
Параметры в rc.conf:
ipfilter_enable="YES" # Запуск межсетевого экрана ipf
ipfilter_rules="/etc/ipf.rules" # Загрузка файла с правилами
gateway_enable="YES" # Включение шлюза для локальной сети
ipnat_enable="YES" # Если надо задействовать nat
ipnat_rules="/etc/ipnat.rules" # Определение файла правил для ipnat
Примеры правил в ipf.rules:
pass out quick on lo0 proto ip from any to any
pass in quick on lo0 proto ip from any to any
pass in quick on fxp1 proto tcp from any to 1.2.3.1/32 port = 80 flags S keep state
pass out log quick on fxp1 from 1.2.3.1/32 to any
pass in quick on fxp1 proto icmp from any to any icmp-type 0
pass in quick on fxp1 proto icmp from any to any icmp-type 11
block in log quick on fxp1 proto icmp from any to any
block return-icmp(port-unr) in log quick on tun0 proto udp from any to 20.20.20.0/24 port = 111
quick означает, что если анализируемый пакет подпадает под данное правило, то дальнейший просмотр правил прекращается.
keep state означает, что так же будут разрешены все пакеты, которые пойдут по этому же соединению в том числе в обратную сторону.
ipf -Fa -f /etc/ipf.rules # сбросить все правила и загрузить новые из файла
ipfstat -in # вывод правил для входящего трафика
ipfstat -on # вывод правил для исходящего трафика
ipfstat -t # просмотр текущей статистики в виде TOP-а
ipnat -l # смотрим текущие редиректы для ipnat
/etc/rc.d/ipnat reload #для перезагрузки правил ната
Для настройки автологоута в bash надо поместить в ~/.bash_profile (время в секундах):
export TMOUT=600
Для настройки автологоута в tcsh надо поместить в ~/.cshrc или в ~/.tcshrc
set autologout = (VAL1 VAL2)
Где,
VAL1 : Время неактивности в минутах после которого происходит автоматический логоут
VAL2 : Время неактивности в минутах после которого происходит автоматическая блокировка
Для ручной блокировки консоли в Linux ставим
yum install vlock
Для ручной блокировки консоли во FreeBSD используется
Использование таблиц файрвола IPFW в некоторых случаях может быть очень удобным. Например, если нужно заблокировать много ip при dos-атаке. Суть в том, что все ip-адреса помещаются в таблицу и в правилах файрвола оперируем уже таблицей целиком.
ipfw table 3 add 10.10.11.1 #добавление в таблицу
ipfw table 3 add 10.11.11.2/24 #добавление в таблицу
ipfw table 3 list #посмотреть что в таблице
ipfw add deny ip from table\(3\) to me #пример исп-я. Слэши нужны!
ipfw table 3 delete 10.10.11.1 #удаляем
ipfw table 3 flush #чистим всю таблицу
Оперативно обновлять таблицу можно, к примеру, так:
#!/bin/sh
ipfw table 3 flush
cat /etc/ip.txt | while read ip; do
ipfw table 3 add $ip
done
portsnap fetch #получить свежую базу портов
portsnap extract #распаковать базу
portsnap update #обновить локальную базу после получения и распаковки
make extract # извлечь исходники для сборки
make config #указать праметры для сборки, они запомнятся для обновления порта
make showconfig #показать варианты конфигурирования
make rmconfig #удалить пользовательские настройки для сборки
make fetch-list #показать какие файлы будут загружены
make fetch-recursive-list #показать какие файлы будут загружены включая все зависимые
make #собрать приложение
make install #собрать и установить приложение
make deinstall #удалить приложение
make reinstall #переустановить приложение
make clean #удалить рабочие файлы
pkg_delete mc #удалить приложение
pkg_info #Список установленных приложений
pkg_version -v #Проверка на необходимость обновления
portupgrade mc #Обновления какого-либо порта (требуется установка)
portaudit -Fda #Проверка приложений на уязвимости (требуется установка)
portupgrade "php5-*" #Обновить все PHP5 пакеты
portmaster /usr/ports/misc/mc - установить mc с помощью Portmaster (тоже есть в портах)
portmaster expat-1.95.8 - обновляем expat
portmaster --clean-distfiles-all - удалить все старые скаченные дистрибутивы пакетов из distfiles
Данная манипуляция может понадобиться, например, если необходимо переносить и запускать программу на различных серверах, возможно не имеющих необходимых библиотек. Сделаем это на примере порта ncftp3:
cd /usr/ports/ftp/ncftp3
make configure
cd ./work/ncftp-3.2.2
./configure
Правим Makefile, дописываем в строчку CFLAGS= параметр “-static”.
cd ../..
make
Все. Из папки /usr/ports/ftp/ncftp3/work/ncftp-3.2.2/bin можно забирать готовые бинарники.