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

Авторы
История сайта
Статистика
Архив
  CVSup
  EXIM & courier-imap
  postfix & courier-imap
  SQUID
  SAMBA
  IPsec
  C-ICAP
  exim & dbmail
  vpnd
  Samba как PDC
  pureftpd
  diskless
  gmirror
  SAMBA + LDAP
  IPSEC
  SAMBA+ACL
  Lightsquid
  LiveCD (+restore)
  1С:Предприятие 8.2
Карта сайта
поисковые слова
Личные настройки
Реклама
Друзья сайта


www.lissyara.su —> главная —> Архив —> portupgrade

portupgrade - `обновлялка` установленных портов.

Автор: lissyara.


    К вопросу об обновлении портов. Вопрос возник от народа - как обновляться. Странный вопрос - то, что касается портов, неплохо рассмотрено в хандбуке. Порыскав по сайту понял, тема пока не окучена, просто забыл, хотя сам давно и активно пользуюсь. Для обновления установленных портов есть утилита - portupgrade.
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='portupgrade'
Port:   portupgrade-2.0.1_1,1
Path:   /usr/ports/sysutils/portupgrade
Info:   FreeBSD ports/packages administration and management tool suite
Maint:  koma2@lovepeers.org
B-deps: ruby-1.8.4_4,1
R-deps: perl-5.8.8 ruby-1.8.4_4,1 ruby18-bdb1-0.2.2
WWW:

/usr/ports/>
/usr/ports/>cd /usr/ports/sysutils/portupgrade
/usr/ports/sysutils/portupgrade/>make && make install && make clean

Тутже вылезет синенькое окошко с выбором - какую БД использовать. Я выбрал BDB4 - с первой были проблемы на 4.11. (правда всё это делается под шохой, но тем не менее.)
[X] BDB4  Use Berkeley DB >=2 as backend. (Use BDB 1.85 if off)

После установки (кстати, тянет он за собой немало - мегов на 10 выльется.) смотрим, что нам надо обновить:
/usr/ports/sysutils/portupgrade/>pkg_version -v | grep "need"
fontconfig-2.3.2,1                  <   needs updating (port has 2.3.2_3,1)
freetype2-2.1.10_2                  <   needs updating (port has 2.1.10_3)
gettext-0.14.5                      <   needs updating (port has 0.14.5_2)
glib-2.8.6                          <   needs updating (port has 2.8.6_1)
john-1.6.40                         <   needs updating (port has 1.7_1)
jpeg-6b_3                           <   needs updating (port has 6b_4)
libdrm-2.0                          <   needs updating (port has 2.0_1)
libiconv-1.9.2_1                    <   needs updating (port has 1.9.2_2)
libmcrypt-2.5.7_1                   <   needs updating (port has 2.5.7_2)
libtool-1.5.18                      <   needs updating (port has 1.5.22_2)
mysql-server-5.0.18                 <   needs updating (port has 5.0.18_2)
perl-5.8.7_2                        <   needs updating (port has 5.8.8)
phpMyAdmin-2.7.0.2                  <   needs updating (port has 2.8.0.1)
png-1.2.8_2                         <   needs updating (port has 1.2.8_3)
popt-1.7                            <   needs updating (port has 1.7_1)
samba-3.0.21a,1                     <   needs updating (port has 3.0.21b,1)
t1lib-5.1.0,1                       <   needs updating (port has 5.1.0_1,1)
/usr/ports/sysutils/portupgrade/>

Немало. Руками вводить столько команд:portupgrade имя_порта ломало. Решил написать скриптик такого вида:
#!/bin/sh

# Скриптик для обнввления всех портов,
# что нуждаются в обновлении

portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"

# Получаем список портов, нуждающихся в обновлении
# и в цикле обновляем их
${pkg_ver} -v | grep "need" | awk '{print $1}' |
{
while read pkg_name
do
# обновляем порт, имя которого в переменной pkg_name
${portupgrade} ${pkg_name}
done
}
# примечание: при сборке и обновлении портов выводимтся намного
# технической инфы, куда меньше чем при запуске той же команды
# руками. Это к тому, чтоб не подумали, что "зависло" :)

Советую не увлекаться подобными скриптами, а думать прежде чем обновлять - т.к. при обновлении приложение, обычно останавливается, то подумайте, чем грозит остановка, например, MySQL? Или samba, если эта машина файл-сервер конторы? В данном случае это был сервер для архивации, и днём он не использовался - значит можно творить что душе угодно. Потому запускаем и ждём - времени уйдёт прилично, т.к. там пара тяжёлых приложений типа MySQL, perl`a и той же самбы. По окончании обновления имеем следующее:
/usr/home/lissyara/>pkg_version -v | grep "need"
libtool-1.5.18                      <   needs updating (port has 1.5.22_2)
/usr/home/lissyara>pkg_info | grep libtool-
libtool-1.5.18      Generic shared library support script (1.5)
libtool-1.5.22_2    Generic shared library support script
/usr/home/lissyara/>

Ага. libtool в двух экземплярах... Либо чё-то глюкануло, либо так и задумано, ввиду того что не все приложения переваривают новые версии зависмостей, а хотят чё-то старое. Попробуем пофиксить БД:
/usr/home/lissyara/>pkgdb -F
--->  Checking the package registry database
Duplicated origin: devel/libtool15 - libtool-1.5.18 libtool-1.5.22_2
Unregister any of them? [no] yes
  Unregister libtool-1.5.18 keeping the installed files intact? [no] yes
  -> libtool-1.5.22_2 is kept.
  --> Saving the libtool-1.5.18's +CONTENTS file as /var/db/pkg/libtool-1.5.22_2/
+CONTENTS.libtool-1.5.18
  --> Unregistering libtool-1.5.18
  --> Done.
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 71 packages found
(-1 +0) (...) done]
Stale dependency: mysql-server-5.0.18_2 -> ldconfig_compat-1.0_6
(misc/ldconfig_compat):
New dependency? (? to help):
^C

Прервал - куча ошибок из-за одного отсутствующего порта. Значит пойдём правильным путём, - доставим зависисмось, которую он хочет:
/usr/home/lissyara/>cd /usr/ports/misc/ldconfig_compat
/usr/ports/misc/ldconfig_compat/>make && make install && make clean
===>  Vulnerability check disabled, database not found
===>  Extracting for ldconfig_compat-1.0_6
===>  Patching for ldconfig_compat-1.0_6
===>  Configuring for ldconfig_compat-1.0_6
===>  Installing for ldconfig_compat-1.0_6
===>   Generating temporary packing list
===>  Checking if misc/ldconfig_compat already installed
===>   Registering installation for ldconfig_compat-1.0_6
===>  Cleaning for ldconfig_compat-1.0_6
/usr/ports/misc/ldconfig_compat/>pkgdb -F
--->  Checking the package registry database
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 72 packages
found (-0 +1) . done]
/usr/ports/misc/ldconfig_compat/>

Всё. Никакой ругани, в системе стоят последние версии портов.

P.S. Насчёт того, какие опции выбирались при установке приложения, и какие ключи make использовались - можно не беспокоится, portupgrade пересоберёт с такими же опциями и ключами. Проблемы могут возникнуть только в случае если Вы руками правили Makefile - ибо это за Вас он сделать не сможет. В таком случае - тока руками - pkg_delete и в портах make && make install && make clean :)

P.S.2 надо заметить, что с portupgrade устанавливается далеко не два приложения:
/usr/home/lissyara/>pkg_info -xL portupgrade | grep man
/usr/local/man/man1/pkg_deinstall.1.gz
/usr/local/man/man1/pkg_fetch.1.gz
/usr/local/man/man1/pkg_glob.1.gz
/usr/local/man/man1/pkg_sort.1.gz
/usr/local/man/man1/pkgdb.1.gz
/usr/local/man/man1/portcvsweb.1.gz
/usr/local/man/man1/portsclean.1.gz
/usr/local/man/man1/portsdb.1.gz
/usr/local/man/man1/portupgrade.1.gz
/usr/local/man/man1/portversion.1.gz
/usr/local/man/man5/pkgtools.conf.5.gz
/usr/local/man/man1/pkg_which.1.gz
/usr/local/man/man1/portinstall.1.gz
/usr/local/man/man1/ports_glob.1.gz
/usr/home/lissyara/>

И функциональность у проги весьма богатая.

P.S. По следам наделанного :) Совет - перед использованием portupgrade делайте пакеты, и обязательно сохраняйте конфиги! На выходных напоролся на два косяка:
1. courier-imap при обновлении затёр нахер мои конфиги. Хорошо они были почти один-в-один со статьёй на сайте.
2. MySQL у меня собрана с дефаулт чарсет и коллатион cp1251 - слетело всё - вместо русских символов везде вопросы были... Два раза пересобирал, пока вспомнил с чем у меня что было собрано. Причём и клиент тоже с нужной кодировкой пришлось пересобирать.



размещено: 2006-03-23,
последнее обновление: 2010-05-20,
автор: lissyara

оценить статью:

Abigor, 2006-03-27 в 13:42:19

хорошо обновлять порты такой командой portupgrade -Rcvf name_port польностью пересобрет все зависимости, но долго =) в большей части удобно portupgrade -rcvf name_port

UFOS, 2006-08-11 в 15:38:47

Последний portupgrade чем то поменялся и теперь данный скрипт обносления выводит полную инфу обносления и обновляет только 1 порт, а не все.

Eric, 2006-09-01 в 16:45:11

Параметр -a   ставить надо

blackp, 2006-09-18 в 15:33:16

есть еще прекрасные вещи, такие как portmaster и portmanager
http://mikestammer.com/dokuwiki/doku.php?id=bsd:maintainports

Erley, 2006-09-29 в 1:14:07

Можно ещё делать
 pkg_version -L=
чтобы увидеть устаревшие порты
и
 portupgrade -kva
чтоб обновиться. В общем, думаю, можно обойтись без скриптов.

Александр, 2006-10-19 в 15:07:49

не совсем по теме, но может быть полезно
в старых портах, где нет опции make config
все ключи сборки можно записать в файл sys.mk
в дальнейшем не придется мучиться вспоминать
что с чем было собрано

guest, 2006-10-26 в 22:01:34

Вместо скриптика лучше писать так:
portupgrade -r -R -a

А еще лучше, добавлять ключик -i и глазами смотреть что можно сейчас обновить (всмысле что сервис может быть остановлен или новая версия сглючить...), а что нет)

warwar, 2007-02-09 в 12:44:14

после cvsup порт portupgrade "корова языком слизала" (удалили).
FreeBSD 6.1

lissyara, 2007-02-09 в 12:48:22

Недавно добавился новый раздел в портах:
/usr/ports/ports-mgmt
Туда собрали всё что касается портов.

warwar, 2007-02-09 в 18:53:54

cd /usr/ports
make fetchindex

cvsup...

portupgrade....

Snaut, 2007-04-10 в 20:09:48

а чем cvsup не устраивает?

staskur, 2007-04-27 в 14:02:10

courier-authlib   при обновлении пишет свои конфиги, а текущие рабочие переименовывает, добавляя .BAK

nk, 2007-07-04 в 17:42:02

courier вообще криволапый софт:)

Quake, 2007-09-13 в 11:01:13

%cd /usr/ports/sysutils/portupgrade
/usr/ports/sysutils/portupgrade: No such file or directory.

Он из портов везде пропал...

lissyara, 2007-09-13 в 11:21:45

Просто, изменилась категория.
Используйте поиск.

kmb, 2007-10-23 в 15:10:09

А скрипт проверяли? у меня есть чувство, что он не правильно работает =)

lissyara, 2007-10-23 в 15:13:58

Работает.
тока лучше юзать portupgrade -R \*

kmb, 2007-10-23 в 15:37:37

странно, у меня этот скрипт обновляет только(первый в списке) один порт...

kmb, 2007-10-23 в 18:15:00

Упс... дико извиняюсь за флуд, не внимательно прочел комменты, в частности второй :(

San, 2007-11-14 в 23:28:05

Народ, всю жизнь обновлялся portupgrade -arR, но тут в наследство достался тазик, где один порт собран как-то по хитрому, соответственно когда его обновляешь, половина фичъ в нём перестаёт работать... Так вот вопрос, как сделать (не скриптом и не руками) чтобы portupgrade не обновлял один порт? Ман курил, но что-то не воткнул... :(

lisergey, 2007-11-14 в 23:49:11

чтобы portupgrade не обновлял конкретный порт
portupgrade -x имя_порта_не_обновлять все остальное

по личным наблюдениям, портапгрейд не сразу принимал имя_порта к исключению, поэтому я тренировался "на кошках" в имени порта так
portupgrade -n -x имя_хитрого_порта -a
ключик -n говорит портапгрейду все делать как обычно, кроме реального обновления.

lisergey, 2007-11-15 в 0:02:30

а нафига такие извороты
pkg_version -v | grep "need"
??
есть стандартный ключ pkg_version -l "<"
который покажет все что надо обновлять
у меня он сразу "все в одном флаконе"
cvsup -g -L 2 /root/cvsup-ports && pkg_version -l "<"

а вот делать портапгрейд сразу всему, что покажет pkg_version, я бы не стал:
1) надо бы проверить /usr/ports/UPDATING на предмет нетривиальных путей обновления какого-либо порта.
редко, но бывают "засады", которые требуют вручную что-то сделать еще.
перед такими обновлениями рекомендуется сделаь бэкап
/var/db/pkg

2) есть порты, например postgresql, которому при увеличении версии релиза (например 8.2.5->8.3.2 ) необходимо САМОСТОЯТЕЛЬНО (ни сам постгрес, ни портапгрейд) делать полноценный бэкап и восстановление всей базы из бэкапа, так как существенно меняется "движок" и появляются принципиально новые возможности, которые требуют соотвественного отражения в формате хранилища

artem, 2008-02-27 в 12:37:00

делаю так
update.sh

#!/bin/sh
csup -g -L 2 /usr/ports/sup1 && make fetchindex
rm /usr/ports/*.bz*
echo "Ports updated" | mail -s "Ports updated" root@localhost
./portupgrade.sh


portupgrade.sh

#!/bin/sh
pkgdb -F
pkg_version -v | grep "need"
pkg_version -v | grep "need" >> portupgrade.lst
date >> portupgrade.lst
mail -s "portupgrade need" root@localhost < portupgrade.lst
portupgrade -rRai

az, 2008-08-13 в 18:08:06

зачем изобретать велосипед, очень старенькая статья
http://www.opennet.ru/base/sys/freebsd_ports_tips.txt.html

+ man portupgrade на предмет portupgrade.conf

90h, 2008-12-05 в 20:36:46

## Делаю так
#!/bin/sh

portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"
echo Starting update.

if test -e ports.txt
then
   rm -f ports.txt
fi

/usr/local/bin/cvsup -g -L 2 /usr/local/etc/cvsup/cvs-supfile

echo Making ports.txt
${pkg_ver} -v | grep "need" | awk '{print $1}' > ports.txt
ii=`wc -l ports.txt |awk '{print $1}'`
i=`expr $ii`
j=$i
a=1
echo $i packages update needed.

while [ $a -le $i ]
do
    echo $a package now updating.
    echo $j estimated package to update.
    pkg_name=`head -n 1 ports.txt`
    echo Package $pkg_name updating!
    ${portupgrade} ${pkg_name}
    echo Package $pkg_name done!
    ( echo '1,1 d' ; echo 'wq' ) | ed - ports.txt
    a=`expr $a + 1`
    j=`expr $j - 1`
done

pkgdb -aFO

KrivoSoft, 2009-04-25 в 15:13:44

Недавно потребовалось откатить обновленную програмулину назад. Бекап перед обновлением ессно не делался.
Для обратной процедуры (т.е. donwgrade) нашлась в портах тулза portdowngrade: /usr/ports/ports-mgmt/portdowngrade .
portdowngrade используя анонимный cvs умеет откатить любой указанный порт до любой предыдущей версии.
После обновляемся "вниз" используя portupgrade -f <programka>

dl, 2009-05-03 в 14:20:23

portupgrade переехал в ports-mgmt :)

kirgudu, 2010-04-21 в 13:58:55

Кстати, не обязательно юзать
$ pkg_info | grep libtool

Можно просто
$ pkg_info -Ix libtool

:D

Alpha, 2010-07-16 в 11:24:49

РџРѕ РїРѕРІРѕРґСѓ:
"2. MySQL Сѓ меня собрана СЃ дефаулт чарсет Рё коллатион cp1251 - слетело РІСЃС‘ - вместо СЂСѓСЃСЃРєРёС… символов везде РІРѕРїСЂРѕСЃС‹ были... Р
ва раза пересобирал, пока вспомнил с чем у меня что было собрано. Причём и клиент тоже с нужной кодировкой пришлось пересобирать."

Р?спользуйте pkgtools.conf (/usr/local/etc/pkgtools.conf)
Выставляете MAKE_ARGS к примеру
'database/mysql50-server-* => 'WITH_CHARSET=utf8',
и в дальнейшем при обновлении, portupgrade будет применять описанные аргументы к данному порту...

Alpha, 2010-07-16 в 11:27:16

"2. MySQL у меня собрана с дефаулт чарсет и коллатион cp1251 - слетело всё - вместо русских символов везде вопросы были... Два раза пересобирал, пока вспомнил с чем у меня что было собрано. Причём и клиент тоже с нужной кодировкой пришлось пересобирать."



Используйте pkgtools.conf (/usr/local/etc/pkgtools.conf)

Выставляете MAKE_ARGS к примеру

'database/mysql50-server-* => 'WITH_CHARSET=utf8',

и в дальнейшем при обновлении, portupgrade будет применять описанные аргументы к данному порту...

redhat, 2010-09-07 в 15:57:14

При make выдавало эррор
Could not find /usr/ports/misc/ldconfig_compat/bsd.ldconfig.mk

Лечил комментированием
#.include «${PORTSDIR}/misc/ldconfig_compat/bsd.ldconfig.mk»

в Makefile

п.с.
Спасибо Лису - отличный ресурс.

kirgudu, 2010-09-07 в 16:05:17

@redhat нужно было сделать portsnap fetch extract и ничего не комментировать.

Dimitryus, 2011-03-15 в 2:45:02

#!/usr/local/bin/bash

# echo "Введите название для обновления : "
# read program

# Скриптик для обнввления всех портов,
# что нуждаются в обновлении

portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"

# Получаем список портов, нуждающихся в обновлении
LIST=`${pkg_ver} -v | grep 'gstreamer' | awk '{print $1}'`

for pkg_name in ${LIST}
do
${portupgrade} ${pkg_name}
done

Klop, 2011-09-07 в 16:08:49

А зачем в цикле вызывать каждый раз portupgrade (в статье, и в каментах тоже)?
Не правильней ли будет конструкцию:


portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"

# Получаем список портов, нуждающихся в обновлении
# и в цикле обновляем их
${pkg_ver} -v | grep "need" | awk '{print $1}' |
{
while read pkg_name
do
# обновляем порт, имя которого в переменной pkg_name
${portupgrade} ${pkg_name}
done
}


и им подобные, заменить на такую:


portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"
xargs="/usr/bin/xargs"

# Получаем список портов, нуждающихся в обновлении
# и в цикле обновляем их
${pkg_ver} -v | grep "need" | awk '{print $1}' | $xargs $portupgrade


И не только в этом примере. Ресурсы экономить надо. =)


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

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

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 49 чел.
За последние 30 мин было: 289 человек
За сегодня было
4619 показов,
1153 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0424 секунд
Из них PHP: 40%; SQL: 60%; Число SQL-запросов: 54 шт.
Исходный размер: 114019; Сжатая: 22936