=========================================================================
.....................................УБЕДИТЕЛЬНАЯ ПРОСЬБА
перед тем как писать первое что пришло в голову осильте пожалуйста весь пост =========================================================================
Как-то давно я высказал мысль о том, что было бы неплохо запихнуть portage tree в базу.
Много воды утекло с тех пор. Я успел два раза сменить работу. Сейчас в моих задачах часто мелькает sql. Универовский курс и так был плох + я его еще и не слушал внимательно (ведь всего лишь зачет). И тут я вспомнил о своей идее..
Цели (в порядке убивания важности)
- максимально возможно (в рамках задачи) изучить sql
 - подтянуть знание python/ruby (почему ruby, см ниже)
 - если удастся — «получить» новую версию package management system (PMS) в Gentoo (но в то же время это не самоцель) или хотя бы разродится GLEP`ом (желательно в статусе accepted) и [полу]рабочим кодом.
 - все что есть в README.md на github`е
 - возможно что-то еще, что я забыл
 
За месяц в свободное время (+ частично забивая болт на работу) я успел налабать достаточно говно^Wкода, которий генерит такой же список, как и
emerge -pO worldemerge -pO `cat /var/lib/portage/world`vv@crusader ~/work/own/ruby/portage3/source/tools $ ./01_prepare_fast_storage.rb -r
Checking if '/dev/shm' path is present on target system.. OK
Checking if '/dev/shm' is a directory on target system.. OK
Checking if '/dev/shm' is writable on target system.. OK
Checking if '/dev/shm' has enough space on target system.. OK
Starting exctact portage snapshot.. Done
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./02_generate_new_profiles.rb
cp: omitting directory `profiles/arch'
...  << SKIPPED
cp: omitting directory `profiles/default/linux/x86'
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./03_patch_profiles_list.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./04_patch_package-mask.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./05_patch_ebuilds.rb
vv@crusader ~/work/own/ruby/portage3/source/tools $ ./06_create_db.rb
Everything is OK. Database was created at:
/dev/shm/portage3_data/test-20120206-223124.sqlite
vv@crusader ~/work/own/ruby/portage3/source/tools $ time ./07_fill_db.rb
././tables_population/26_ebuilds.rb:19: warning: already initialized constant VERSION
././tables_population/28_profile_masks.rb:21: warning: already initialized constant VERSION
././tables_population/29_users_keywords.rb:20: warning: already initialized constant VERSION
././tables_population/30_users_mask.rb:20: warning: already initialized constant VERSION
real    2m38.133s
user    2m4.067s
sys     0m32.847s
vv@crusader ~/work/own/ruby/portage3/source/tools $ mv /dev/shm/portage3_data/test-20120206-223124.sqlite /tmp/
vv@crusader ~/work/own/ruby/portage3/source/tools $ cd ../src/
vv@crusader ~/work/own/ruby/portage3/source/src $ time `./emerge_pO_world.rb -f /tmp/test-20120206-223124.sqlite > /tmp/p3_fin`
real    0m0.559s
user    0m0.200s
sys     0m0.020s
vv@crusader ~/work/own/ruby/portage3/source/src $ cat /usr/local/bin/et
#!/bin/sh
emerge -pO `cat /var/lib/portage/world` | grep ebuild | awk '{print $4}' | sort > /tmp/p2_fin
vv@crusader ~/work/own/ruby/portage3/source/src $ time `et`
real    0m13.956s
user    0m4.603s
sys     0m0.226s
vv@crusader ~/work/own/ruby/portage3/source/src $ diff /tmp/p2_fin /tmp/p3_fin
vv@crusader ~/work/own/ruby/portage3/source/src $
Как видите быстрее в ~27 раз. Тестировал на __обычной__ генте, на ноуте 5-летней давности (Toshiba Satellite m100-221)
Что есть
- source code на github`е, основная ветка сейчас — keywords2
 - желание пилить дальше (или участвовать/помогать)
 - пачка скриптов на руби, 2 sql файла и todo-файл (infos/issues)
 - новые нескучные обои^W^Wпрофили (см папку profiles_v2). Обьяснения ниже
 - новых профилей только 2: x86/linux/* & amd64/linux/*. Внимание: у меня stable х86 и тестил я только на нем. Возможно Вам удастся завести и на других arch`ах (без или с минимальными хаками кода и базы)
 - поддержка keywords (~/+) на всех уровнях
 - поддержка package.[un]mask (masked()/unmasked(-)) на всех уровнях
 - поддержка /etc/portage/package.{keywords,mask,unmask} в виде __файлов__
 
RUBY? WTF!!!
У меня есть несколько наколенных скриптов написаних на питоне. Они верой и правдой служат мне каждый день. Но на работе меня попросили перейти на красный. И вот, после руби, возвращаться на питон не хочется вообще. Чтобы не разводить холивар, причины пропущу.
Я прекрасно понимаю, что не может быть и речи о попадании моего творения в «продакшен», пока все не будет переписано на питоне. После того, как сие (переписывание) случится, обязуюсь в рамках проекта дальше кодить на питоне.
PROFILES. 2 beers or not 2 beers
Сначала они мне показались слишком запутанными, разбросанными, с наследованием на каждом углу итп итд. Я решил упростить схему до следующего
${portage_home}/profiles/base/{hardware architecture}/{software platform/}/[({feature}/)?]/{release}/{target}/[({blah-blah}/)*]
- hardware architecture - x86, amd64, sparc64 etc
 - software platform - linux, freebsd, winnt, (да-да; см. profiles/profiles.desc) etc
 - feature - default, ulibc (или как там ее), hardened etc
 - release - 10.0, 2008.0 etc
 - targer - server, desktop, developer etc
 - blah-blah - kde, gnome, etc
 
Но потом я начал понимать, что не все так радужно, как казалось. Пока оставил как есть. «to be continued» как говорится.
Чего хочу от ВАС
-  так как я в базах до этого был почти полный ноль то:
- критики/советов/etc о том, как спроектирована база (portage.sqlite.sql)
 - критики/советов/etc о том, как упростить и сделать быстрее запросы в emerge_pO_world.rb
 
 - советов о том, какая база здесь будет лучше и быстрее в использовании.
 - быть разработчиком/контрибутором. есть желающие?
 - а тестером? а если у вас нестандартная arch — так вообще замечательно
 - осуществить/помочь с переходом на python
 
Чего нет
- достаточно свободного времени
 - хорошей обработки ошибок. сейчас оно просто вываливается. Если ничего не работает, но и нет ошибок запускайте каждый скрипт по отдельности
 - нормальных debug сообщений
 - нормальной поддержки версий (см. портянку в 26_ebuilds.rb:155, а также в файле issues)
 - [RC]DEPENDS
 - use flags
 - overlays
 - буквенные слоты
 - ...
 - этот список можно продолжать очень долго
 
Что НЕ хочу от ВАС
- «тред не читай & сразу отвечай»
 -  советов о том, что gentoo/portage/sql/python/ruby/ 
ZuBB/etc не нужен
 - советов о том что любой кусок кода в папке tools говно. Возможно так и есть. Сейчас это не главное
 - не создавайте ишки c feature requests/blue sky ideas на гитхабе. Пока видимые задачи/проблемы/баги явно в фаворе
 
Что будет дальше
- мердж всех веток в мастер
 - я беру паузу на месяц-полтора. буду чередовать работу/отдых/катание на Буковеле по виходным/ДР`я в компании/etc
 - если будет заинтересованность здесь, то сделаю небольшой cleanup кода и анонс в G+/Gentoo Forums(/еще гдето?)
 
Кушать подано! (С)
PS: пардоньте мой «французский». Это не мой родной язык
PS2: ах да mail: zv@sylvv AT почта «самой хорошей корпорации в мире» DOT ком
PS3: извините за длинный пост











