Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [HOWTO] Скачиваем репозиторий ubuntu из под windows (bat-скрипт)  (Прочитано 17190 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
Довольно часто встречал вопросы как выкачать репозиторий из под виндовс. вот и у самого появилась такая необходимость.
Набросал батник. используются виндовсовские версии gnu-утилит wget, sed, bzip2 gzip grep.
В данный момент скрипт тестируется на работе. кому интересно берем архив, распаковываем и запускаем.
Скачивает пакеты для
- ubuntu 10.04 lucid linx 32-битной архитектуры любого deb-дистрибутива(скорей всего :)))
- английскую и русскую локализации (есть ли смысл)

Собственно репозиторий складывется в папку какую вы укажите или по умолчанию каталог_скрипта\ubuntu_repository\

ИЗМЕНИЛСЯ ПУТЬ СОХРАНЕНИЯ РЕПОЗИТОРИЯ
Из-за того что к примеру у http://packages.medibuntu.org репозиторий хранится в корне сайта а не подкаталоге
репозиторий сохранялся при скачивании не правильно. Пришлось убрать пару параметров.
Теперь путь сохранения будет выглядеть так каталог_скрипта\ubuntu_repository\АДРЕС_САЙТА\ПУТЬ_К_РЕПОЗИТОРИЮ
для http://packages.medibuntu.org
каталог_скрипта\ubuntu_repository\packages.medibuntu.org\
для http://archive.ubuntu.org/ubuntu/
каталог_скрипта\ubuntu_repository\archive.ubuntu.org\ubuntu\

Не стоит помещать папку скрипта в папки в именах которых есть пробелы или русские буквы.
лучше всего будет перенести папку со скриптом в корень диска C:\

Коментарии и конструктивная критика приветствуются.

(Нажмите, чтобы показать/скрыть)



0.7.1

- исправлен баг с переменной mm в 129 строке

(Нажмите, чтобы показать/скрыть)
[/i]
« Последнее редактирование: 18 Ноябрь 2010, 22:23:49 от ViTalityU »

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
обновление
0.2
- исправлены ссылки скачивания из-за которых скрипт был не рабочим
- отключено отдельное выкачивание локализаций
« Последнее редактирование: 25 Ноябрь 2009, 12:17:30 от ViTalityU »

Оффлайн mtsfignya

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
А он откуда начнет закачку после обрыва соединения? А то я на своем интернете уже 8 гигов скачал с помощью debmirror - это жесть. Скорость небольшая - при обрыве не перезапускается - плохо. Есть возможность скачать на нормальном соединении - но только из-под винды. Было бы здорово, если бы получилось.

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
начнет докачивание с последнего недокачаного файла
wget перебирает и проверяет все файлы на дату изменения, сравнивания с файлами на сервере. если какой-либо изменился он его перекачает.

У себя уже несколько раз прерывал закачку, продолжалось нормально.

Оффлайн mtsfignya

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Классно! Спасибо большое за скрипт! Хочу в Анапе раздавать репозиторий по вайфай,  а со своим 256 кб/с слабо оказалось скачать репозиторий. Постоянно обрывы и т.п.  Приходилось постоянно комп проверять. А братан в Челябинске быстро скачает, там нормальный инет, но из-под винды. Потом привезет.  Пытались там настроить на убунте местный vpn интернет - не получилось пока что.  Еще раз спасибо! Братан говорит, что скрипт нормально качает. Уже гигов 6 накачал :)

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
я рад что хоть комуто пригодилось кроме меня :)


Пользователь решил продолжить мысль 16 Ноябрь 2009, 16:32:40:
А он откуда начнет закачку после обрыва соединения?

Я поначалу не совсем понял твой вопрос, поэтому уточню. если будет обрыв соединения то wget несколько раз (по умолчанию 20) повторит попытку скачать файл и перейдет к следующему файлу. и так до конца списка.

Пользователь решил продолжить мысль 17 Ноябрь 2009, 15:22:49:
очередное обновление
0.3

- скрипт переписан полностью. сократился со 100 до 50 строк ;)
- выкачивается только необходимое. ничего лишнего.
- введены переменные => теперь скрипт можно легко настроить на необходимый вам
  deb-дистрибутив/репозиторий/секцию/архитектуру, путь сохранения

- заменил bzip2 на gzip
- избавился от sed
« Последнее редактирование: 17 Ноябрь 2009, 17:33:07 от ViTalityU »

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
0.4

- добавлены коментарии
- исправлены пара мелких ошибок
- добавлена поддержка прокси
- вывод процесса выполнения скрипта не только в лог-файлы но и в консоль
- скрытие вывода команд скрипта в консоли
- добавлено логирования времени выполнения скрипта
- вернул sed, т.к. "своя" обработка списка пакетов занимала много времени
  ( почти час) с постоянной нагрузкой на процессор более 50%

Оффлайн kurban

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Спасибо!!! недавно искал такой скрипт ненашел
пришлось на виртуальную машину ubuntu ставить и через debmirror качать

Пользователь решил продолжить мысль 09 Декабрь 2009, 12:52:31:
вот непонятно только как использовать его  :'(
у меня виста 64бит, а тянутьь хочу вот с этого свйта http://mediazona.ru/install/upgrade/ubuntu/ вот этот репозитарий http://ex.mediazona.ru/ubuntu/ но только под 64 битную архитектуру
« Последнее редактирование: 09 Декабрь 2009, 12:52:31 от kurban »

Оффлайн netum

  • Любитель
  • *
  • Сообщений: 89
    • Просмотр профиля
спасибо затестю

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
Спасибо!!! недавно искал такой скрипт ненашел
пришлось на виртуальную машину ubuntu ставить и через debmirror качать

Пользователь решил продолжить мысль 09 Декабрь 2009, 12:52:31:
вот непонятно только как использовать его  :'(
у меня виста 64бит, а тянутьь хочу вот с этого свйта http://mediazona.ru/install/upgrade/ubuntu/ вот этот репозитарий http://ex.mediazona.ru/ubuntu/ но только под 64 битную архитектуру

как работает скрипт в 64битной оси да еще в висте я не вкурсе. т.к. нет таковых под рукой.
а настраивать просто. яж там все прокоментировал в скрипте.

открываете get_repository.bat любимым текстовым редактором(к примеру блокнотом)

Цитировать
...
rem Полный путь к репозиторию на сайте
set mirror= http://ex.mediazona.ru/ubuntu/

rem Дистрибутив который будем выкачивать
set dist=karmic karmic-updates karmic-security karmic-backports
rem Секции пакетов по "свободности"
set section=main multiverse restricted universe
rem Архитектура/исходники и т.п.
set arch=binary-amd64

...

rem Указываем место сохранения репозитоия
rem по умолчанию будет сохраняться в папку ОСНОВНОЙ_РАБОЧИЙ_КАТАЛОГ\ubuntu_repository
set output_dir=%base_dir%mediazona_karmic

сохраняешь и запскаешь

Оффлайн kurban

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
да так и делаю :idiot2:
-распаковываю архив в пааку Program files
-правлю батник
@echo off
rem script name: Repository collector
rem filename: get_repository.bat
rem depends: wget sed gzip
rem author: ViT Kol nvalka@gmail.com
rem version: 0.4

rem По умолчанию настроен на скачивание официального репозитория ubuntu 9.10 hardy koala x86

rem Полный путь к репозиторию на сайте
set mirror=http://ex.mediazona.ru/ubuntu/

rem Дистрибутив который будем выкачивать
set dist=hardy hardy-updates hardy-security hardy-backports
rem Секции пакетов по "свободности"
set section=main multiverse restricted universe
rem Архитектура/исходники и т.п.
set arch=binary-amd64

rem Если работаем за прокси то убираем "rem" в начале строк и указываем
set http_proxy=http://ИМЯ_или_IP_СЕРВЕРА:ПОРТ
set ftp_proxy=http://ИМЯ_или_IP_СЕРВЕРА:ПОРТ
set proxy_user=ИМЯ_ПОЛЬЗОВАТЕЛЯ
set proxy_password=ПАРОЛЬ

rem Основной рабочий каталог, в который будут выводиться логи и временные файлы
rem по умолчанию папка скрипта
set base_dir=%~dp0

rem Указываем место сохранения репозитоия
rem по умолчанию будет сохраняться в папку ОСНОВНОЙ_РАБОЧИЙ_КАТАЛОГubuntu_repository
set output_dir=%base_dir%mediazona_hardy

set script_log=%base_dir%log.log
set wget_log=%base_dir%wget.log

echo. > %wget_log%

for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% start
echo %dd% %tt% start >> %script_log%

for %%d in (%dist%) do (

echo.
echo. >> %script_log%
for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% get Release %%d
echo %dd% %tt% get Release %%d >> %script_log%
wget --directory-prefix=%output_dir% --append-output=%wget_log% --force-directories --no-host-directories --cut-dirs=1 --timestamping  --proxy-user=%proxy_user% --proxy-password=%proxy_password% %mirror%/dists/%%d/Release
wget --directory-prefix=%output_dir% --append-output=%wget_log% --force-directories --no-host-directories --cut-dirs=1 --timestamping  --proxy-user=%proxy_user% --proxy-password=%proxy_password% %mirror%/dists/%%d/Release.gpg

for %%s in (%section%) do (
for %%a in (%arch%) do (

for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% get list Packages.gz %%d %%s %%a
echo %dd% %tt% get list Packages.gz %%d %%s %%a >> %script_log%
wget --directory-prefix=%output_dir% --append-output=%wget_log% --force-directories --no-host-directories --cut-dirs=1 --timestamping  --proxy-user=%proxy_user% --proxy-password=%proxy_password% %mirror%/dists/%%d/%%s/%%a/Packages.gz
)))

echo. > %base_dir%Packages
for %%d in (%dist%) do (

echo.
echo. >> %script_log%

for %%s in (%section%) do (
for %%a in (%arch%) do (

for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% unpack Packages.gz %%d %%s %%a
echo %dd% %tt% unpack Packages.gz %%d %%s %%a >> %script_log%
gzip --stdout --decompress --force %output_dir%/dists/%%d/%%s/%%a/Packages.gz >> %base_dir%Packages
)))

echo.
echo. >> %script_log%
for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% get packages urls
echo %dd% %tt% get packages urls >> %script_log%
findstr "^Filename: " %base_dir%Packages > %base_dir%pkglist.txt

for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% generate full urls
echo %dd% %tt% generate full urls >> %script_log%

for /f "tokens=1" %%i in ('echo %mirror% ^| sed -e "s/:/\:/g" ^| sed -e "s///\//g"') do set mm=%%i
sed -e "s/Filename: /%mm%/" %base_dir%pkglist.txt > %base_dir%urls.txt

for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% downloading... see %wget_log%
echo %dd% %tt% downloading... see %wget_log% >> %script_log%
wget --input-file=%base_dir%urls.txt --directory-prefix=%output_dir% --append-output=%wget_log% --force-directories --no-host-directories --cut-dirs=1 --timestamping  --proxy-user=%proxy_user% --proxy-password=%proxy_password%

echo.
echo. >> %script_log%
for /f "tokens=2" %%i in ('date /t') do set dd=%%i
for /f "tokens=1" %%i in ('time /t') do set tt=%%i
echo %dd% %tt% all done
echo %dd% %tt% all done >> %script_log%
pause

а он мне создает файл Program в корне с: огромных размеров вот такого содержания

Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log
 12:22 unpack Packages.gz hardy main binary-amd64  Filesepository_collectorlog.log
  Filesepository_collectorPackages
  Filesepository_collectorlog.log

Пользователь решил продолжить мысль 10 Декабрь 2009, 12:24:51:
ось ХР

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
Не стоит помещать папку скрипта в папки в именах которых есть пробелы или русские буквы.
лучше всего будет перенести папку со скриптом в корень диска C:\

ну и мой косяк
нужно "заremить" следующий кусок кода вот так

Цитировать
rem Если работаем за прокси то убираем "rem" в начале строк и указываем
rem set http_proxy=http://ИМЯ_или_IP_СЕРВЕРА:ПОРТ
rem set ftp_proxy=http://ИМЯ_или_IP_СЕРВЕРА:ПОРТ
rem set proxy_user=ИМЯ_ПОЛЬЗОВАТЕЛЯ
rem set proxy_password=ПАРОЛЬ
« Последнее редактирование: 11 Декабрь 2009, 21:08:11 от ViTalityU »

Оффлайн kurban

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
пошло дело :D
спасибо!!!

Оффлайн G.A.P

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Не стоит помещать папку скрипта в папки в именах которых есть пробелы или русские буквы.
лучше всего будет перенести папку со скриптом в корень диска C:\
Работает нормально даже не из корня С: ;) Скачиваю репозиторий под i386 и amd64.
Назревает вопрос - а как обновлять то что я сейчас выкачал? Удалять всё слитое и качать снова?:)
« Последнее редактирование: 15 Декабрь 2009, 14:43:12 от G.A.P »

Оффлайн ViTalityU

  • Автор темы
  • Любитель
  • *
  • Сообщений: 72
    • Просмотр профиля
Цитировать
Работает нормально даже не из корня С: Wink Скачиваю репозиторий под i386 и amd64.
главное чтоб пробелов и русских букв небыло в пути
Цитировать
Назревает вопрос - а как обновлять то что я сейчас выкачал? Удалять всё слитое и качать снова?Smiley
нет. просто запустить скрипт по новой. он сравнит файлы на сервере и на диске, и перезакачает только обновившиеся.

 

Страница сгенерирована за 0.344 секунд. Запросов: 21.