Results 1 to 7 of 7

Thread: how to: Работа с пакетами ipk

  1. #1

    how to: Работа с пакетами ipk

    Маленькое вступление:
    В основном пишу для себя чтобы не забыть через год


    Исследование содержимого пакета
    Разборка пакета
    Так как на самом деле пакет ничто иное как tar.gz архив то и работать с ним можно как с обычным архивом. а именно расспаковать, запаковать просмотреть содержимое, извлечь часть файлов.
    Например для расспаковки пакета с именем somepack.ipk можно выполнить следующие команды
    Code:
    tar -zxvf somepack.ipk
    после чего в папке появятся 2 файла
    data.tar.gz control.tar.gz
    которые также являются архивами
    data.tar.gz содержит инсталиремые файлы а control.tar.gz содержит сприпты установки и файл описания пакета.
    Сборка пакета
    для создания пакета ipk также можно восспользоваться архиватором tar, единственное что нужно сделать это указать упцию --format=ustar
    итак например вам захотелось создать пакет somepack
    для этого нужно создать файл с именем control приблизительно следующего содержания

    Code:
    Package: somepack
    Architecture: mipsel
    Priority: optional
    Section: net
    Version: 1.31-1
    Maintainer: Vasili Pupkin
    Source: ftp://ftp.domain.org/someprog.tar.gz
    Description: pack descripton 
    Depends: zlib, libsomelibs
    Suggests:
    Conflicts: progmame
    NB:поля Depends и Conflicts заполняются в случае если ваш пакет зависит от какого то другого пакета или конфликтует с чем то, соответственно.
    далее необходимо создать в папке стпуктуру каталогов идентичную той в которую будут копироваться файлы
    например
    Code:
    /opt
    /opt/bin
    /opt/etc
    и разложить по этим каталогам файлы.
    теперь необходимо упаковать сначала папку в которой лежит файл
    Code:
    control
    а за тем папку в которой находятся инсталируемые файлы например у нас имеется папка /opt/mypacks/somepak в которой находятся 2 поддиректории control и data. создаем архив control.tar.gz
    Code:
    cd /opt/mypacks/somepak/control
    tar (завтра допишу устал :)
    Установка ipk пакета
    Чтобы избежать проблем с переполнением /tmp и как следствие зависание рутера, можно восспользоваться опцией -t. Например так:
    Code:
    ipkg install -t /opt/tmp somepackage
    Чтобы скачать пакет без установки можно восспользоваться опцией
    Code:
    ipkg download somepackage
    Прочее
    Чтобы mc "понимал" ipk формат необходимо в файл расширений /opt/share/mc/mc.ext добавить следующие строки
    Code:
    regex/\.ipk
            Open=%cd %p#utar
            View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf -
    Last edited by angel_il; 18-01-2008 at 22:50.
    vim имеет два режима - бибикать и все портить (с) не мое

  2. #2
    Join Date
    Oct 2008
    Location
    Saint-Petesburg, Russia
    Posts
    253

    Обновление пакетов

    Стандартные "заклинания" при обновлении установленного софта:
    Code:
    ipkg update
    ipkg upgrade
    просты, но имеют один недостаток о котором еще Райкин говорил: "и тут я что-то куда-то воткнул". Т.е. меня не устраивает отсутствие конроля над процессом обновления.

    Для того, чтобы получить список софта, для которого есть обновления, я делаю так:
    Code:
    ipkg update >> /dev/null
    ipkg upgrade -test -V 2 | awk '$1 == "Upgrading" {print $2 " (last: " $8 " current:  " $6 ")"}'  | sed 's/\.\.\./,/'
    Минус: при этом вроде как скачиваются (но не устанавливаются) новые пакеты. И вроде как на траффик наплевать, но время это занимает...
    Может кто знает способ лучше?
    WL500gp-1.9.2.7-d-r2624

  3. #3
    Join Date
    Oct 2008
    Location
    Saint-Petesburg, Russia
    Posts
    253
    вроде бы нашел более быстрый способ.
    Рассматривая список установленных пакетов:
    Code:
    $ ipkg list_installed
    bash - 3.2.49-1 - A bourne style shell
    bzip2 - 1.0.5-1 -
    cron - 4.1-7 - Standard vixie cron, with cron.d addition
    Видим отсутствие описания для bzip2. Делаем:
    Code:
    $ ipkg info bzip2
    Package: bzip2
    Version: 1.0.5-1
    Status: install ok installed
    Architecture: mipsel
    
    Package: bzip2
    Version: 1.0.5-2
    Status: unknown ok not-installed
    Section: compression
    Architecture: mipsel
    maintainer: Christopher Blunck <christopher.blunck@gmail.com>
    MD5Sum: afb1ecca8056433683c69777739002e8
    Size: 83713
    Filename: bzip2_1.0.5-2_mipsel.ipk
    Source: http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
    Description: Very high-quality data compression program
    
    Successfully terminated.
    и получаем номера установленной и доступной версии.

    Вообще-то данное поведение ipkg больше смахивает на баг, чем на фичу... Кто-нибудь может это прокомментировать?
    WL500gp-1.9.2.7-d-r2624

  4. #4
    Join Date
    Oct 2008
    Location
    Saint-Petesburg, Russia
    Posts
    253
    "Докладываю" результаты, может кому пригодится.

    1. Рабочие решения.
    1а. Самый медленный
    Code:
    ipkg update
    ipkg upgrade -noaction -V 2 | awk '$1 == "Upgrading" {print $2 " (" $6 " => " $8 ")"}'  | sed 's/\.\.\.//'
    2а. Приемлемый (тот, которым сейчас пользуюсь)
    Code:
    ipkg update
    for PKG in $( ipkg list_installed  |  awk '$5 == "" && NF > 2  {print $1}' )
    do
       VERS=$( ipkg info "$PKG" | awk '$1 == "Version:"  {print $2}' )
       CUR_VER=$( echo $VERS | awk '{print $1}' )
       NEW_VER=$( echo $VERS | awk '{print $2}' )
       if [ "$CUR_VER" \> "$NEW_VER" ]; then #такое бывает из-за глюков (?) ipkg
          tmp="$CUR_VER"
          CUR_VER="$NEW_VER"
          NEW_VER="$tmp"
       fi
       echo "$PKG ($CUR_VER => $NEW_VER)"
    done
    2. Для обновления одиночного пакета можно использовать
    Code:
    ipkg upgrade <pkg>
    3. А теперь о плохом.
    Т.к. при каждом вызове ipkg происходит достаточно большой объем работы (создание/удаление файлов), то чтобы получить значительный выигрыш в скорости надо разобраться в скрипте /usr/bin/ipkg.sh.
    Я его к сожалению не осилил, а после слов "black magic" и "blacker magic" - вообще стал обходить стороной
    WL500gp-1.9.2.7-d-r2624

  5. #5
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    /usr/bin/ipkg.sh используется однократно при установке системы для загрузки пакета ipkg-opt. Остальное время используется /opt/bin/ipkg

  6. #6
    Join Date
    Oct 2008
    Location
    Saint-Petesburg, Russia
    Posts
    253
    Quote Originally Posted by al37919 View Post
    /usr/bin/ipkg.sh используется однократно при установке системы для загрузки пакета ipkg-opt. Остальное время используется /opt/bin/ipkg
    Вы правы.
    С другой стороны: он слишком сложен (imho), чтобы только установить пакет ipkg-opt:
    - наличие info, status...
    - эта функция объясняет почему возможно обновление одно пакета (а не всех уставновленных):
    Code:
    ipkg_upgrade() {
    	if [ $# -lt 1 ]; then
    		local pkgs="`ipkg_status_matching 'Status:.*[[:space:]]installed'`"
    	else
    		pkgs="$*"
    	fi
    	
    	for pkg in $pkgs; do
    		ipkg_upgrade_pkg $pkg
    	done
    }
    Может это был первоначальный вариант "системы управления пакетами", который потом уже переписали и скопилировали в ipkg...
    WL500gp-1.9.2.7-d-r2624

  7. #7

    Arrow tcpdump

    добрый день, не подскажите как установить tcpdump на WL500gpv2?

Similar Threads

  1. IPk Tutorial Issues
    By vmoakley in forum WL-500w Tutorials
    Replies: 1
    Last Post: 15-11-2007, 07:46

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •