среда, 14 января 2009 г.

Типа похвастаться.

Случилась у нас вот такая новость
13.01.2009. Внимание! Произошли принципиальные изменения на файлобменниках — теперь каждый аккаунт вмещает 1GB, вместо прежних 100 мегабайт. Также перестал работать трюк с подставлением «?submit=1» в конец ссылок. Соответственно, перестали работать и программы для автоматического скачивания файлов с датакода.

Фактически на файлообменнике сделали аналогично тому, что сделано на ifolder.ru, а именно: на странице для скачивания выдается прямая ссылка на файл, которая действительна в течении 3х дней. Это жизнь совсем не облегчело, поэтому было принято решение написать скрипт, который бы брал ссылки из файла, сам выдирал со страницы скачивания имя файла и прямую ссылку и запускал wget на скачивание файла. Имя файла необходимо потому, что wget при скачивании по прямой ссылке не умеет определять имя скачиваемого файла. Вот что из этого получилось (за 3 часа при полном не знании Perl'а на момент начала написания скрипта):
#!/usr/bin/perl -w

use strict;
use LWP::Simple;

print "file downloader\n";

unless (@ARGV == 1)
{
print "invalid number of arguments\n";
print "usage:\n";
print "./link.sh <filename>";
return;
}

my $in = $ARGV[0];

print "opening file $in\n";
open(file_with_links,$in);

foreach (<;file_with_links>)
{
print "downloading page with direct link\n";
my @download_page = get "$_";

my $url;
my $download_file_name;

print "trying find direct link in page\n";
foreach (@download_page)
{
$url = "http:\/\/files$1" if $_ =~/href="http:\/\/files([^"]+)"/i;
$download_file_name = $1 if $_ =~/\<li\>файл: \<b title="([^"]+)"/i;
}

print "downloading file\n";
system ("wget -t inf -T 1 -c -O \"$download_file_name\" \"$url\"")
if (defined($url) && defined($download_file_name));
}

print "closing file $in";
close(file_with_links);
Вот. Работает. Спасибо Диме за направление в нужную сторону.

понедельник, 12 января 2009 г.

Задачка

Для дома =)
Исходные данные: есть несколько серверов, с которых можно качать одновременно (те самые dsv.data.cod.ru, dsv2.data.cod.ru, ftp82-84). Обычно качается это дело wget'ом. Чего хотелось бы: сервер, который бы занимался сортировкой и постановкой ссылок в очередь. Соответственно для каждого источника - своя очередь. Доступ: через web-интерфейс. Ссылки для data.cod могут выглядеть как :
  1. http://dsv.data.cod.ru/xxxxxxxx
  2. http://dsv.data.cod.ru/xxxxxxxx?submit=1
  3. dsv.data.cod.ru/xxxxxxxx
  4. dsv.data.cod.ru/xxxxxxxx?submit=1
Где xxxxxxxx - восьмизначное число. Причем ссылки вида 1, 3 и 4 должны приводиться к виду 2. Хотелось бы иметь группы ссылок (ну, например, если качается фильм, то он, обычно, разбит на несколько архивов, которые хотелось бы скачать друг за другом). Так же, возможно, приоритет (ну то есть, если я знаю, что эта ссылка на файл малого размера, то хотелось бы, чтобы он скачался следующим, а не попал в конец очереди). Циклический перезапуск ссылок, при ошибках связи.
В web-интерфейсе хочется иметь всего 2 страницы: одна для добавления новых ссылок(не забываем о группах), другая для статистики: отображение ссылок в очереди для кажого источника (возможно с небольшим описанием).
Чего хочу от вас? Предлагайте ЯП для реализации. Желательно с примерным сроками выполнения задачи и причинами выбора ЯП для этой задачи. Знаю, что это я охренел, но просто я решил спросить совета.
з.ы. PHP не предлагать :P

пятница, 9 января 2009 г.

Записки сумасшедшего или "Как я ставил Gentoo"

Хм... Здравствуйте дети, сегодня я вам расскажу одну историю, произошедшую со мной намедни.
Начало эта история берет еще в те времени, когда я только начал осваивать линукс. Как только я немного подразобрался, что это такое я захотел такой дистрибутив, чтобы он был создан полностью для меня, но такого не нашлось. Единственный манивший меня был gentoo, но я его немного боялся. Точнее меня отпугивал тот факт, что там нужно самому отконфигурить ядро... Единственной альтернативой, как я думал, будет Sabayon - дистрибутив, основанный на gentoo. Но версия 4 не оправдала моих ожиданий, как минимум, потому, что kde4 нет на ДВД, а можно поставить только из репов, да и с русским языком там проблемы.
И вот вчера я решил, что буду ставить себе генту. Для этого я запасся следующими вещами, о предназначении которых будет понятно дальше:
  1. комп (мой, для установки)
  2. asus eee (мамин) (прим. далее просто eee)
  3. gentoo handbook
  4. образ диска с Gentoo linux install x86 minimal 2008.0
  5. двд болванка
  6. psp
  7. хард на 80гиг (взял тот, на котором у меня стояла винда) (прим. он ide'шный)
Часть один.
Часов в 20 с чем-то закатал образ генты на двд болванку. Хоть мне и показалось кощунством закатывать 79.5Mb на двд болванку, но другой у меня все равно не было, поэтому вот... И стал ждать ночи (прим. это связано с особенностью пользования интернетом у нас в семье - когда брательник играется, я ничего не должен качать, ибо у него жуткие лаги, а, как я знал, при установке дженты, качаться будет много чего).
Через несколько минут, после наступления нового дня, я приступил к подготовке к установке: выключил комп, отключил первый хард(на котором у меня стоит debian), поставил eee рядом на стол, выдернул колонки из своего компа и воткнул их в eee, воткнул в eee свой внешний хард с фильмами, открыл браузер с gentoo handbook.
Далее все делал по хендбуку: ребут, загрузка с двд, загрузка коммандой "gentoo noapic" и тд. Перечислять все действия не имеет особого смысла, т.к. они подробно описаны в хендбуке. Единственно замечу, что разбивал я свой винт немного по-другому, а именно: 32Mb под /boot, 1Gb под swap, 40Gb под корневой раздел и остальное под /home.
Одним из пунктов установки является развертывание стадии. В хэндбуке описано развертывание stage3. Его я решил качать из инета. Весит это дело 120 с гаком метроф. Поэтому где-то в час с чем-то ночи я поставил качаться этот stage3, а сам включил "Алешу Поповича и Тугарина змея" на eee. Досмотрел мульт, подождал, пока докачается stage3, развернул, продолжил идти по пунктам хэндбука. Одним из следующих пунктов является скачивание дерева портежей. Это еще 40 метров. Включил качаться и врубил "Правдивую историю Красной шапки". Когда я докачал дерево портежей и развернул его, часы уже показывали 4 часа утра. Решив, что ночью конфигурить ядро желания нет, я лег спать.
Часть два.
Проснулся в 10 по будильнику, встал, налил чая, взял еды. Так как eee мамин и она забрала его на работу, то дальше хэндбук я читал со своей psp. Пошел дальше по пунктам. Следующим перерывом было скачивание ядра. В этот перерыв я умылся. Дальше все шло по хэндбуку почти до самого конца. Отдельно хочется упомянуть процесс конфигурирования ядра. Очень интересное занятие. Приходится использовать все знания, накопленные за время общения с линуксом. Загвоздкой оказалось то, что grubinstall пытается чего-то записать на флоппи, а у меня его в компе нету. Проблема решается удалением из /boot/grub/device.map строчки, содержащей "fd0". После этого установился груб и наступил один из волнующих моментов : перезагрузка.
Если вы надеетесь, что дальше все как в сказке, типа "И сразу загрузилась система", то фиг вам. Первое, что было : черный экран и тишина компа. То есть ни обращений к винту, ни обращений к приводу. Первое, что пришло в голову: напортачил в frame buffer'ом. Убрал параметры для фб из комманды загрузки ядра в grub'е и снова попробовал загрузиться. И тут... нет, вы не угадали. Я увидел kernel panic. Оказалось, я неправильно указал имя ядра. Исправил. Следующая ошибка было связана с тем, что в ядре, используемом в minimal cd мой хард видиться как hda, а в ядре, которое поставли я (2.6.27-gentoo-r7) хард уже видиться, как sda. Изменив параметры на нужные, я все-таки почти загрузился. Точнее я загрузился, но т.к. в /etc/fstab параметры оставались старые, то винт он примоунтил только в рид онли и ничего нельзя было сделать. Даже ребутнуться. Пришлось жать кнопку. После чего, я снова загрузился с cd-rom'а, примоунтил винты и поправил /boot/grub/grub.conf (в debian это menu.lst) и /etc/fstab. Ребут. И вот я в системе. Свершилось это в 15 с чем-то. Дальше я некотое время ликовал...
Вот на этом я и закончу мой рассказ про то, как я поставил эту систему. Я щаслифф. Еще нужно сделать очень много, но это уже не так страшно. Ну я на это надеюсь...