скрипт для обновлений deb testing (jigdo)

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
nibbler
Сообщения: 42
ОС: debian

скрипт для обновлений deb testing

Сообщение nibbler »

добрый день

простенький скрипт по обновлению iso-образов debian , ветки testing через jigdo-lite
файл i.sh

Код: Выделить всё

#! /bin/sh

if [ $(find . -type f -mtime +7 -name "*.jigdo") ] || [ ! $(find . -type f -name "*.jigdo") ]
then
  rm *.jigdo *.template *.unpacked *.tmp jigdo-file-cache.db
  rm -R *.tmpdir
  wget -c -i i
fi

for j in i386 amd64 i386-amd64-source kfreebsd-i386 kfreebsd-amd64
do
  for i in 1 2 3 4 5 6 7 8
  do
    if [ -f ./debian-testing-$j-DVD-$i.jigdo ]
    then
      mv debian-testing-$j-DVD-$i.iso debian-testing-$j-DVD-$i.iso.old
      umount /media/cdrom/
      mount -o loop debian-testing-$j-DVD-$i.iso.old /media/cdrom/
      jigdo-lite --noask --scan /media/cdrom/ ./debian-testing-$j-DVD-$i.jigdo

      if [ -f debian-testing-$j-DVD-$i.iso ]
      then
        rm debian-testing-$j-DVD-$i.iso.old debian-testing-$j-DVD-$i.jigdo \
           debian-testing-$j-DVD-$i.template jigdo-file-cache.db
      fi
    fi
  done
done
mplayer ./pip.mp3

к нему прилагается файл i

Код: Выделить всё

http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-1.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-2.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-3.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-4.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-5.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-6.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-7.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-8.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-1.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-2.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-3.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-4.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-5.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-6.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-7.template
http://cdimage.debian.org/cdimage/weekly-builds/amd64/jigdo-dvd/debian-testing-amd64-DVD-8.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-1.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-2.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-3.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-4.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-5.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-6.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-7.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-8.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-1.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-2.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-3.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-4.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-5.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-6.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-7.template
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-8.template
http://cdimage.debian.org/cdimage/weekly-builds/multi-arch/jigdo-dvd/debian-testing-i386-amd64-source-DVD-1.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/multi-arch/jigdo-dvd/debian-testing-i386-amd64-source-DVD-1.template
http://cdimage.debian.org/cdimage/weekly-builds/kfreebsd-i386/jigdo-dvd/debian-testing-kfreebsd-i386-DVD-1.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/kfreebsd-i386/jigdo-dvd/debian-testing-kfreebsd-i386-DVD-1.template
http://cdimage.debian.org/cdimage/weekly-builds/kfreebsd-amd64/jigdo-dvd/debian-testing-kfreebsd-amd64-DVD-1.jigdo
http://cdimage.debian.org/cdimage/weekly-builds/kfreebsd-amd64/jigdo-dvd/debian-testing-kfreebsd-amd64-DVD-1.template

кладем скрипт i.sh , файл с закачками i и музыкальный файл pip.mp3 в каталог с iso-образами (думаю можно и в пустой , jigdo перекачает необходимые пакеты и создаст iso даже если нет ничего для сканирования)
запускать: sudo ./i.sh или от пользователя которому разрешено монтировать диски
как он работает:
в начале идет проверка - есть ли в каталоге где лежит скрипт файлы *.jigdo время модификации старше 7 дней и есть ли вообще файлы *.jigdo
если да то удаляем все файлы созданные программой jigdo-lite и скачиваем необходимые файлы указанные в файле i
далее пробегаем по двум циклам - первый платформа , второй номер диска
но в в последнем цикле проверка есть к создаваемому iso-образу jigdo файл , если нет пропускам
если да то переименовываем файл iso на iso.old (сделано для того чтобы не было конфликта со свежесобранным iso-образом)
на всякий случай размонтируем cdrom
монтируем iso.old
запускаем jigdo-lite в "тихом режиме"
далее опять идет проверка - если программа jigdo все сделала правильно то она должна собрать свежий файл iso , если он есть в каталоге то удаляем старый iso.old и др файлы уже нам не нужные
так пробегаем по каждой платформе и по каждому диску
почему так а не иначе:
почему фигурирует в проверке 7 дней , обновления weekly-builds , т.е. каждый Пн
сначала думал сделать проверку по md5 , скачиваемых с тоже сайта , но часто происходит что нужно выключить ночью или днем компьютер , и заново проходить проверку md5 уже свежих iso-образов лишняя нагрузка на hdd\proc , здесь же просто реализована проверка если нет файла *.jigdo значит диск обновился
также можно управлять обновлениями iso-образов закомментировав те или иные строчки в файле i
не стал убирать ошибки в /dev/null при удалении несуществующих файлов
также возможно в начале скрипта добавить проверку если есть iso-образы позднее 7 дней (предполагаем что прошла неделя) то дальше идет обновление если нет то просто break из скрипта , но если скрипт выполняется по крону нет смысла в данной проверке

возможно чтото упустил из каких то нештатных ситуаций , оставляйте свои комментарии
Спасибо сказали:
kodx
Сообщения: 7
ОС: Linux

Re: скрипт для обновлений deb testing

Сообщение kodx »

При первом осмотре бросилась в глаза строка 12:
for i in 1 2 3 4 5 6 7 8

предлагаю заменить на
for i in $(seq 1 8)

команда seq входит в пакет coreutils в debian-подобных дистрибутивах, поэтому будет в большинстве систем, где есть GNU окружение.
Для любителей BSD можно воспользоваться командой jot
Спасибо сказали:
Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Re: скрипт для обновлений deb testing

Сообщение Babusha »

предлагаю заменить на
for i in $(seq 1 8)


Есть же

for i in {1..8}
Спасибо сказали:
Аватара пользователя
nibbler
Сообщения: 42
ОС: debian

Re: скрипт для обновлений deb testing

Сообщение nibbler »

нарвался на неприятную вещь , ситуация когда человек поставил jigdo , но ни разу его не запускал , конфигурационный файл не создан , либо создан но не прописано нужное нам зеркало (если не изменяет память jigdo идет сначало на секурити зеркало , естественно пакетов нет , потом переключается на us зеркало)
+ сделал переменные
+ добавил комментарии в коде

Код: Выделить всё

#! /bin/sh

# скрипт автоматического обновления dvd дисков debian через jigdo-lite
# автор PAVka, лицензия GPLv2

# apt-get install jigdo-file
# sudo ./i.sh ибо mount

## var
# сайт для заполнения переменной XY http://www.debian.org/mirror/list
# выбираем оптимальное по скорости зеркало
XY="fi"
MIR="http\:\/\/ftp\.$XY\.debian\.org\/debian\/"
JL="$HOME/.jigdo-lite"
ISO="debian-testing-$j-DVD-$i"
CD="/media/cdrom/"

## ~/.jigdo-lite
# проверка наличия файла ~/.jigdo-lite
if [ -f $JL ]
then
  # если строка "зеркало" в файле ~/.jigdo-lite пустая, прописываем зеркало
  sed -i -e "s/debianMirror=''/debianMirror='$MIR'/g" $JL
else
  # файл отсутствует, jigdo-lite никода не запускалась,
  # создаем файл конфигурации с необходимым нам зеркалом
  echo "jigdo=''" > $JL
  echo "debianMirror='"$(echo $MIR | sed 's/\\//g')"'" >> $JL
  echo "nonusMirror=''" >> $JL
  echo "tmpDir='.'" >> $JL
  echo "jigdoOpts='--cache jigdo-file-cache.db'" >> $JL
  echo "wgetOpts='--passive-ftp --dot-style=mega --continue --timeout=30'" >> $JL
  echo "scanMenu='"$CD"'" >> $JL
fi

## wget *.jigdo
# если файлы *.jigdo отсутствуют или их время 7 дней и более
if [ "$(find . -type f -mtime +7 -name "*.jigdo")" ] || [ ! "$(find . -type f -name "*.jigdo")" ]
then
  # удаляем всё что может создать jigdo-lite
  rm *.jigdo *.template *.unpacked *.tmp *.db
  rm -R *.tmpdir
  # скачиваем свежие файлы *.jigdo которые указаны в файле i
  wget -c -i i
else
  echo "Обновлять нечего."
  exit 0
fi

##
# пробегаем по всем необходимым нам платформам
for j in i386 amd64 i386-amd64-source kfreebsd-i386 kfreebsd-amd64
do
  # пробегаем по всем номерам дисков
# kodx предложил данный вид записи for
#  for i in $(seq 1 8)
  for i in 1 2 3 4 5 6 7 8
  do
    # если есть в папке свежеслитый *.jigdo, если нет проходим мимо
    if [ -f ./$ISO.jigdo ]
    then
      # переименовываем старый iso-образ для избежания последующих проблем
      # с новым пересобранным iso-образом
      mv $ISO.iso $ISO.iso.old
      # размонтируем на всякий случай cdrom
      umount $CD
      # монтируем переименованный iso-образ
      mount -o loop $ISO.iso.old $CD
      # начинаем перекачивать и пересобирать iso-образ с помощью jigdo-lite
      jigdo-lite --noask --scan $CD ./$ISO.jigdo

      # если всё прошло нормально и появился пересобранный iso-образ
      if [ -f $ISO.iso ]
      then
        # удаляем старый iso-образ и уже не нужные файлы относящиеся к работе jigdo-lite
        rm $ISO.iso.old $ISO.jigdo $ISO.template *.db
      fi
    fi
  done
done
# по завершении всей работы радостно издаем приятные уху звуки музыки
mplayer ./pip.mp3

проверял на squeeze
Спасибо сказали: