небольшая преамбула. Порывшись в тырнетах обнаружил весьма любопытный сайт посвященный wi-fi роутерам и прошивкам на него. Умельцы приделывают к таким роутерам жесткий диск и делают с него беспроводной файлообменник, усб-плеер, усб-видеокамеру, принтер и прочее прочее...
Так вот, задумалось страшное: прикрутить к такому чуду еще и локальный репозитарий на основе apt-cacher, зачем для этих целей машинку выделять, если на файлообменнике это все есть?!
С установкой проблем не будет, но вот как получить список файлов-пакетов для обновления, эт пока вопрос.... ведь на роутере линукс явно не убунта, там пакеты если и есть то другие....
Вобщем интересует два момента:
- что именно делает apt-get update ? Т.е. что с чем сравнивается? Я так понимаю есть некий список файлов установленных программ, с которым происходит сверка, но вот где он хранится??
- можно ли получить список фалов и просто передать их в виде имен для загрузке одним разом?
а может есть более простой вариант...
РС: в хотелке - чтоб оно работало даже когда компы мирно почивают, а роутер трудится не покладая рук, следя за обновлениями и делая их, например по ночам, когда нагрузка на сеть минимальна, утром народ включает компы, система проверяет обновление и хооопа! качает его с роутера, свеженькое, ночью скаченное.
А где убунта хранит список пакетов для сверки с update?
Т.е. что с чем сравнивается? Я так понимаю есть некий список файлов установленных программ, с которым происходит сверка, но вот где он хранится??
список каждый раз по новой скачивается. Вам другой список нужен - список зеркал.
Конечно вы не в состоянии открыть мануал (религия?), вот для вас открыл:
update
update is used to resynchronize the package index files from their sources. The indexes of available packages are fetched from the location(s) specified in
/etc/apt/sources.list. For example, when using a Debian archive, this command retrieves and scans the Packages.gz files, so that information about new and
updated packages is available. An update should always be performed before an upgrade or dist-upgrade. Please be aware that the overall progress meter will be
incorrect as the size of the package files cannot be known in advance.
а может есть более простой вариант...
конечно есть - сделать зеркало дистрибутива. Можно даже погуглить, и найти 100500 хаутушек на эту тему. Судя по вашему посту гуглить ваша религия позволяет - вот и гуглите.
список каждый раз по новой скачивается. Вам другой список нужен - список зеркал.
это который в sources.list что ли?
Конечно вы не в состоянии открыть мануал (религия?), вот для вас открыл:
[skip...]
а Вы в состоянии вникнуть в суть вопроса хотя бы чуть-чуть? В приведенном куске мануала не говорится как именно система проверяет наличие установленных пакетов, что именно их нужно бы обновить, ведь она не предлагает обновлять все пакеты находящиеся в кеше репозитария...
конечно есть - сделать зеркало дистрибутива. Можно даже погуглить, и найти 100500 хаутушек на эту тему. Судя по вашему посту гуглить ваша религия позволяет - вот и гуглите.
зеркало репа - не то что мне нужно. Оно сожрет несколько гиг тырнета, что вообще неприемлимо, я хочу чтоб система грузила только те пакеты, которые у меня установлены, как это делается сейчас с помощью apt-cacher но без участия компа в этом вопросе.Т.е. мне нужно каким то образом передать список уже загруженных пакетов и обновлять именно их.
И давайте обойдемся без взаимного отправления в гугл, он хорош когда вопрос четко сформулирован, а я пока даже не знаю подходящих слов для этого...
Vaicartana, по дате сверяет, как и во всех версиях ОС UNIX/Linux smile
Яндекс локален? Подключите с него репы.
Полный список программ у вас сканирует менеджер пакетов APT:
[console]dpkg --list[/console]
зеркало репа - не то что мне нужно. Оно сожрет несколько гиг тырнета
вам нужно неполное зеркало. просто
[console]ls /var/cache/apt/archives/[/console]
не пойдёт? в Debian'е как я понял данная информация в каком-то своём, хитром формате. (и видимо в бубунте). file его не знает.
по дате сверяет, как и во всех версиях ОС UNIX/Linux
на самом деле не по дате, а по номеру версии. дата это несколько иное. на дату не действует подпись...
я так понимаю, чтоб ваш роутер стал репозитарием, нужно файло, которое будет скачивать(ну это не проблема почти), а потом создавал необходимое файло-базу с описанием содержимымого скачаного...
Вы структуру(базы) репозитария чем будете создавать?
по моему задача нетривиальная...
Умельцы приделывают к таким роутерам жесткий диск
тут нужны не только умения, но и высшее образование, и научная степень. А как ещё осилить подключение внешнего USB-винта к USB-разъёму на роутере?
а потом создавал необходимое файло-базу с описанием содержимымого скачаного...
Вы структуру(базы) репозитария чем будете создавать?
по моему задача нетривиальная...
что там "не тривиального"? БД в данном случае - простой текстовый файл, вроде того, что генерит dpkg --list. (генерить всё равно придётся на клиентах, там dpkg есть). утилита diff покажет список новых пакетов (точнее список различий, но можно просто отфильтровать именно новые). Далее удаляем в нашем зекале старые, качаем новые. Вот и всё... Почти всё...
что там "не тривиального"? БД в данном случае - простой текстовый файл, вроде того, что генерит dpkg --list.
вооооот! Уже что то близко к истине прорисовывается. Тож согласен, что обычный текстовик выгружаемый по заданию раз в сутки даже от одного клиента,(а можно и с объединением ото всех) даст приемлемый результат, т.к. все машинки в принципе идентичны.
надо только в скрипт все это оформить, баш что ли выучить? :D
А то я щаз на собаку похож - мала-мала понимать стал, а написать пока ничего не могу
только вот может проще проверять именно ЭТИ пакеты на новизну?
тут нужны не только умения, но и высшее образование, и научная степень. А как ещё осилить подключение внешнего USB-винта к USB-разъёму на роутере?
Иронизируем, значит? Ну-ну... предлагаю в самостоятельном порядке взять и всунуть USB-винт к USB-разъёму и посмотреть что из этого получится. Чиста для справки: стандартная прошива поддерживает только модем и принтер...
А вот тут люди с высшим образованием и научной степенью владения паяльником впаивают в сей девайс 128м памяти и ставят другую прошивку
надо только в скрипт все это оформить, баш что ли выучить?
а куда деваться? либо поручите административные задачи админу, либо сами станьте админом. Третьего не дано. А админ, который не знает bash - не админ, а ламо и идиот.
только вот может проще проверять именно ЭТИ пакеты на новизну?
какие "эти", если пакеты лежат на клиенте(клиентах), а зеркало по ТЗ на роутере? Как роутер узнает, что ему качать, если вариант "все 200Гб" вас почему-то не устраивает? oO
А вот тут люди с высшим образованием и научной степенью владения паяльником впаивают в сей девайс 128м памяти и ставят другую прошивку
зачем вам 128Мб памяти?
спокойно, я ток учусь, линукс не более чем полгода назад поставил, всему свое время...
а куда деваться? либо поручите административные задачи админу, либо сами станьте админом. Третьего не дано.
какие "эти", если пакеты лежат на клиенте(клиентах), а зеркало по ТЗ на роутере? Как роутер узнает, что ему качать, если вариант "все 200Гб" вас почему-то не устраивает? oO
Элементарно, Уотсон ))
Алгоритм примерно следующий:
0. на диске должен быть файл list сгенерированный dpkg --list > list от клиента
1. получаем из sources.list первый реп и транслируем его в адрес
2. проверяем в локальном хранилище аналогичный файл и сверяем их даты между собой
3. если различаются - качаем Packages.gz и смотрим нет ли в нем совпадения пакетов из list
4. если есть, качаем пакет.
5. получаем следующий реп и go п.2
раз в сутки генерим list от каждого клиента и объединяем их между собой
т.о. у нас всегда будет свежий Packages.gz от всех репов указанных в локальном sources.list, останется только привязать клиентам именно этот, локальный репозитарий, запущенный apt-cacher по запросу нового пакета обратится в тырнет по локальному же sources.list, а сама железка будет скачивать обновление только тех пакетов, которые поставлены у клиентов.
зачем вам 128Мб памяти?
для торрентов :D
да просто штатных 32х шибко мало для прошивы, там много чего наворочено, а память подобного типа есть в старых не нужных димах.
спокойно, я ток учусь, линукс не более чем полгода назад поставил, всему свое время...
ИМХО с BASH'а нужно как раз начинать.
Элементарно, Уотсон ))
Алгоритм примерно следующий:
ну я про то и говорю. Теперь сделайте всё что вы тут расписали в консоли, и сохраните это всё в текстовом файле. Кстати, для этого есть команда script.
Конечно детали вам не понятны - спрашивайте. У меня и/или у man'а.
для торрентов
про торренты речи пока не было.
а память подобного типа есть в старых не нужных димах.
AFAIK не таких и старых, и не таких уж "не нужных". Старые DIMM'ы не пойдут. Впрочем, сходите к ближайшему умельцу, у него и ненужные димы есть, и спец-оборудование. Не думаю, что это будет очень дорого. На коленке лично мне не осилить, а вот в сервисе - вполне реально.
[quote=Vaicartana]спокойно, я ток учусь, линукс не более чем полгода назад поставил, всему свое время...
ИМХО с BASH'а нужно как раз начинать.
[/quote]
я начинал с асма, до еще одного птичьего языка пока не дошли руки...
ну я про то и говорю. Теперь сделайте всё что вы тут расписали в консоли, и сохраните это всё в текстовом файле. Кстати, для этого есть команда script.
А вот за это благодарю, хорошая команда, не знал...
Конечно детали вам не понятны - спрашивайте. У меня и/или у man'а.
За предложение спсб, обязательно воспользуюсь )))))
про торренты речи пока не было.
Были... вроде в самом начале.
AFAIK не таких и старых, и не таких уж "не нужных". Старые DIMM'ы не пойдут. Впрочем, сходите к ближайшему умельцу, у него и ненужные димы есть, и спец-оборудование. Не думаю, что это будет очень дорого. На коленке лично мне не осилить, а вот в сервисе - вполне реально.
да я и сам паяльную станцию, пока, в руках держать не разучился, не все ж время в Сях стахостические матраспределения писать :D :D
я начинал с асма, до еще одного птичьего языка пока не дошли руки...
там простой (но своеобразный) синтаксис. учить в общем-то и нечего кроме расстановки пробелов, кавычек, и глоббинга.
А вот за это благодарю, хорошая команда, не знал...
ага. А ещё это BSD а никакой не линух. В линухе проще скопипастить мышкой. Ну лично мне проще...
Занялся я тут таки этой затеей, но запнулся на одном моменте.
Получил два файла:
первый содержит список установленных пакетов в формате Пакет Версия Комментарий
второй переделанный файл Packages.bz2 из которого получен такой формат Пакет Версия Файл
не могу сравнить файлы oO , желательно бы на лету в строке, но можно и как нибудь еще.
Вытащить имя пакета можно через awk или cut, но как при этом обратиться к другому файлу не понимаю... Авковский скрипт перебирает файлы очень медленно.
не могу сравнить файлы blink , желательно бы на лету в строке, но можно и как нибудь еще.
сделайте файл формата пакет md5, тогда вам надо будет сравнивать строчки, а не перебирать файлы.
в слаке уже есть такие файлы: CHECKSUMS.md5.
Или вам нужно найти разные строчки в двух файлах, а одинаковые игнорить? Нет ничего проще: объедините файлы, отсортируйте, и уберите повторяющиеся (cat, sort, uniq)
хм... а как заставить dpkg выдать md5???
он же только у всего пакета есть, а не у установленной его части... Или я чет не понимаю?
он же только у всего пакета есть, а не у установленной его части... Или я чет не понимаю?
у всего. а зачем вам часть?
мне то может и не к чему, но вот что выдает dpkg --list
[console]
..
ii firefox 10.0.2+build1-0ubuntu0.11.04.1 Safe and easy web browser from Mozilla
..
[/console]
вот этот вывод я и могу использовать в качестве шаблона, мд5 как видно здесь отсутствует. Из этого я получаю наименование пакета и его версию.
а вот так примерно выглядит обработанный Packages.bz2
cat ./pkg
[console]
firefox 10.0.2+build1-0ubuntu0.11.04.1 pool/universe/f/firefox/firefox-2-dbg_2.0_i386.deb
[/console]
Нужен инструмент, который бы на входе имел одну строку + имя файла, а на выходе - всю строку из этого файла в которой есть полное соответствие со входящей строкой. Например так:
tools 'firefox' 'pkg.file'
может как то можно grep к этому привязать? Но проблема в том, что строки 'firefox' в чистом виде у меня нет, я ее могу только внутри awk'a получить как параметр $1, т.к. пакетов чуть менее чем дофига....
Если точнее то tools должен принять еще один параметр - версию.