The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Скрипт для автоматизации создания бинарных пакетов для FreeBSD
#!/bin/sh
#
# Create all packages with sym-links for FreeBSD 5.x+
#
# Version: 1.2.2
# Copyright (c) 2006 Alexey Tsvetnov, vorakl@fbsd.kiev.ua
#
# All error in  /var/log/<script_name>.err
#

# Path to packages directory
packagespath="/usr/ports/packages"

# Command for get package's version
pkgvercmd="/usr/sbin/pkg_version -v"
#pkgvercmd="/usr/local/sbin/portversion -v"	# more faster than pkg_version

#-------------------------------------------------------------------------------

err="\033[0;40;31mError\033[0m"
ok="\033[1;40;33mOk\033[0m"


checkPackagesPath ()
{
    [ -d $packagespath ] || { /usr/bin/printf " *** $err: $packagespath doesn't exist.\n"; 
			      /bin/echo " *** Error: $packagespath doesn't exist." > /var/log/`basename $0`.log; 
			      exit 1; }
    [ -d $packagespath/All ] || { /bin/mkdir $packagespath/All || exit 1; }
    [ -d $packagespath/Latest ] || { /bin/mkdir $packagespath/Latest || exit 1; }
    return 0
}

checkPkgAll ()
{
    [ -f $packagespath/All/$fullname.tbz ] && return 0
    return 1
}

checkPkgLatest ()
{
    [ -L $packagespath/Latest/$shortname.tbz ] && [ -r $packagespath/Latest/$shortname.tbz ] && return 0
    return 1
}

checkPkgCat ()
{
    [ -L $packagespath/$subdir/$fullname.tbz ] && [ -r $packagespath/$subdir/$fullname.tbz ] && return 0
    return 1
}

createPkgAll ()
{
    /usr/sbin/pkg_create -jb $fullname $packagespath/All/$fullname.tbz && return 0
    return 1
}

createPkgLatest ()
{
    /bin/rm -f $packagespath/Latest/$shortname.tbz
    cd $packagespath/Latest && /bin/ln -s ../All/$fullname.tbz $shortname.tbz && return 0
    return 1
}

createPkgCat ()
{
    if [ -d $packagespath/$subdir ]; then
	/bin/rm -f $packagespath/$subdir/$fullname.tbz
    else
	/bin/mkdir -p $packagespath/$subdir
    fi

    cd $packagespath/$subdir && /bin/ln -s ../All/$fullname.tbz $fullname.tbz && return 0
    return 1
}

getPkgFullVersion ()
{
    echo -n "Geting full version package list..."
    pkglist=`$pkgvercmd | /usr/bin/awk '{print $1}'`
    /usr/bin/printf "$ok\n"
}

work ()
{
 for fullname in $pkglist; do
    /bin/echo "Check $fullname"

    shortname=`/bin/echo $fullname | /usr/bin/sed 's/\-[^-]*$//'`
    subdir=`/usr/sbin/pkg_info -o $fullname | /usr/bin/sed -e '1,3d' -e '$d' | /usr/bin/awk -F/ '{print $1}'`

    if ! checkPkgAll; then
	/bin/echo -n " ==> Create package..."
	if createPkgAll; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	/bin/echo -n " ==> Create Latest sym-link..."
	if createPkgLatest; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	/bin/echo -n " ==> Create Category sym-link..."
	if createPkgCat; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	continue
    fi

    if ! checkPkgLatest; then  
	/bin/echo -n " ==> Create Latest sym-link..."
	if createPkgLatest; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi
    fi

    if ! checkPkgCat; then  
	/bin/echo -n " ==> Create Category sym-link..."
	if createPkgCat; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi
    fi
 done
}

main ()
{
    exec 2>/var/log/`basename $0`.log

    checkPackagesPath
    getPkgFullVersion
    work

    exec 2>&-
}

main

exit 0
 
20.03.2006 , Автор: Alexey Tsvetnov
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ RSS ]
 
  • 1, r4nd0m, 20:26, 21/03/2006 [ответить] [смотреть все]
  • +/
    ya poka shto obhodilsya portupgrade i pkg-clean -DP
     
     
  • 2, vorakl, 23:30, 21/03/2006 [^] [ответить] [смотреть все]
  • +/
    > ya poka shto obhodilsya portupgrade i pkg-clean -DP

    * 'portsclean -DP'  -  отлично работает для очистки устаревших пакетов и дистфайлов

    * 'portupgrade -ap'  -  прекрасно обновляет установленные из портов программы и создаёт к ним пакеты

    * 'cd /usr/ports/_some_port_ && make package'  - создаёт пакет и все сим-линки. За исключением одного маленького НО - если версия порта отличается от остановленного, make package, будет пытаться собрать новую версию прогаммы

    Я предлогаю скрипт для создания всех пакетов вместе с необходимыми сим-линками для ТЕКУЩИХ версий установленных программ.

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList