Скрипт для облегчения установки Gentoo

Программа "Gentin" - Написали для себя, для удобства, одним словом Just<4>Fun...
Скрипт поможет новичкам установить Gentoo более легче и проще...
Хотя не только новичкам, так как просто установка происходит намного быстрее и для опытных пользователей. В общем не мне судить, всем любителям "shell" и не только, просьба поглядеть...
FreeKevin & De-Key

ВОТ ССЫЛКА на "Gentin":
+++++++++++++++++++++++++++++++++
http://infostore.org/info/3122353
+++++++++++++++++++++++++++++++++

Скоро будет

Скоро будет хелп по проге. Кстати название "autogen2".
А если короче, когда грузимся с диска загрузочного Gentoo копируем прогу(например ее можно было держать на дискете или CD) в директоию /mnt/gentoo и запускаем(набираем) ./autogen2. Все перед нами интерфейс, в котором не трудно разобраться...;)

ССЫЛКА НА "autogen2":
=================================
http://infostore.org/info/3122353
=================================

Что-то типа ?: cp

Что-то типа ?:

cp stageX-xzxz /mnt/gentoo/
tar -xjvpf stageX-xzxz
cp portage-xz /mnt/gentoo/usr/
tar -xjvpf portage-xz
chroot /mnt/gentoo /bin/bash && env-update && source /etc/profile && emerge grub

=)

Да что-то типо.....

Да что-то типо..... мне очень приятно что ты знаешь команды(это всегда плюс;), только
вот все же скачай скрипт и погляди.... там как раз на счет последней строки chroot /mnt/gentoo /bin/bash! ты думаешь это так просто! если запустить скрипт с командой "chroot /mnt/gentoo /bin/bash" тебя просто как бы выкинит из проги и появится стандартное приглашение #...
Так вот надо еще вернуться обратно, что бы программа могла продолжить функционировать, да еще и с того же самого места;)Ну а как это сделать вариантов много...ну а как я сделал смотри скрипт строка 238 и 737 (если не ошибся)Вообщем, не все так просто... Любые предложения я с удовольствием расмотрю....может как-то можно усовершенствовать. Пишите. нам нужны shell-ные мозги ;)

воодушевляет :)

воодушевляет :) можно будет также с другими скриптами авторазвёртывания скооперировать.

только название поменяйте, ибо

*  sys-devel/autogen
      Latest version available: 5.9
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 3,867 kB
      Homepage:    http://www.gnu.org/software/autogen/
      Description: Program and text file generation
      License:     GPL-2

Примеры
genin, gentin, geninstaller, install-helper...

Спасибо

Большое спасибо, так как мне очень приятно что все же нашлись люди, которые набрались смелости предложить свою идею.... Действительно название надо менять... и мне нравиться название "gentin", что-то
в этом есть;)

На счёт названия!

на счёт названия! это да! высылайте предложения, просмотрим!!! мне понравилось gentin!
спасибо Шаманыш

И ещё, люди подключайтесь!!! помогайте в разработке программы! чем больше народу будет тем круче прога получится! и тем проще!! выкладывайте свои идеии!!! мы всегда рады!!

ДА БУДЕТ ОТКРЫТЫЙ КОД!!!!

О и De-Key подключился...

Да не могу не согласиться.... FREE & OPEN - это всегда хорошо;)

Гм, ну

Гм, ну подключатся не совсем подключаюсь, но вот вам один древний скрипт одного автора. Может вы его и видели (скрипт), или сами и сочинили, в смысле за боян не обессудьте. По замыслу автора служил для быстрого развертывания в офисах.

===================================================================

#!/usr/bin/perl
#-----------------------------------------
#Внимание! Автор не несет ответственности за работоспособность вашей системы, рекомендуется использовать на тестовом компьютере, в экспериментальных целях.
#Цели и задачи программы читайте на сайте http://linux.AcoolA.ru
#-----------------------------------------

my $ver = qq|
	echo "Packages Installer for Gentoo v0.01/1106-2 alpha";
	echo "Copyright (c) by L'autre";
	echo "mailto: support\@calculate.ru"
|;

#пути
my $pathpkg = '/var/db/pkg';
my $pathpkg_copy = '/var/db/pkg-copy';
my $pathworld = '/var/lib/portage/world';
my $pathworld_copy = '/var/lib/portage/world-copy';

my (%run);
{
	my @arg; if(@ARGV){ @arg = @ARGV; } else {$arg[0] = '-h'}
	foreach(@arg){
		if($_ eq '--update' || $_ eq '-u'){
			$run{'update'}++;
		}elsif($_ eq '--fetchonly' || $_ eq '-f'){
			$run{'fetchonly'}++;
		}elsif($_ eq '--pretend' || $_ eq '-p'){
			$run{'pretend'}++;
		}elsif($_ eq '--newuse'){
			$run{'newuse'}++;
		}elsif($_ eq '--help' || $_ eq '-h'){
			system qq|
				$ver
				echo "Параметры: ";
				echo "  --help (-h short option) - помощь, что вы сейчас видите на экране";
				echo "  --update (-u short option) - обновить пакеты до последних версий";
				echo "  --fetchonly (-f short option) - загрузим все пакеты необходимые для работы системы без установки";
				echo "  --pretend (-p short option) - показать информацию об установленных пакетах, без действий"
			|;
			exit;
		}else{
			system qq|
				echo 'Неверный параметр "$_". Для справки введите --help.'
			|;
			$run{'error'}++;
			exit;
}	}	}

#пакеты, которые не ставим ни при каких условиях
my @packages_quarantine = (
	"kde-base/kdebase-meta",	#откажем net-im/sim
);

#основные пакеты при инсталляции
my @packages_base = (
	"app-admin/syslog-ng",
	"app-editors/vim",
	"app-misc/mc",
	"app-portage/genlop",
	"app-portage/gentoolkit",
	"media-fonts/terminus-font",
	#"media-sound/alsa-utils",
	"net-dialup/pptpclient",
	"net-firewall/iptables",
	"net-analyzer/tcpdump",
	"net-misc/netkit-telnetd",
	"net-misc/ntp",
	"net-misc/whois",
	"net-print/hpijs",
	"net-print/foomatic",
	"sys-apps/coldplug",
	"sys-apps/hotplug",
	"sys-apps/iproute2",
	"sys-apps/pciutils",
	"sys-apps/usbutils",
	"sys-boot/grub",
	"sys-fs/reiser4progs",
	"sys-fs/reiserfsprogs",
	"sys-fs/xfsprogs",
	"sys-kernel/vanilla-sources",
	"sys-process/vixie-cron",
);

my @packages_office = (
	"app-dicts/stardict",
	"app-cdr/k3b",
	"app-emulation/wine",
	"app-office/openoffice",
	"media-fonts/corefonts",
	"media-gfx/gimp",
	"media-gfx/gqview",
	"media-sound/amarok",
	"media-video/codeine",
	"media-video/mplayer",
	"net-fs/samba",
	"net-misc/smb4k",
	"net-www/netscape-flash",
	"sci-misc/qcad",
	"www-client/mozilla-firefox",
	#"www-client/opera",
	#"x11-themes/gtk-chtheme",	#набор тем для gtk2 приложений
	"x11-themes/gtk-engines",	#выбор темы для gtk2 приложений gtk-chtheme
);

my @packages_add = (
	"app-antivirus/clamav",
	"app-arch/gzip",
	"app-arch/unrar",
	"media-gfx/imagemagick",
);

my @packages_nvidia = (
	"media-video/nvidia-glx",
	"media-video/nvidia-kernel",
);

my @packages_debug = (
	#"app-text/acroread",
	"dev-db/myodbc",
	"dev-db/pgadmin3",
	"dev-db/postgresql",
	"dev-db/unixODBC",
	"dev-libs/crypto++", #нужен для amule
	#"net-analyzer/nessus",
	#"net-analyzer/nessus-libraries",
	#"net-analyzer/nessus-plugins",
	"net-analyzer/traceroute",
	"net-dialup/minicom",
	#"net-dialup/ppp",
	"net-im/licq",
	"net-im/sim",
	"net-p2p/amule",
);

my @packages_games = (
	"games-arcade/xrick",
	"games-arcade/frozen-bubble",
	"games-puzzle/toppler",
	"games-arcade/pachi",
	"games-simulation/flightgear",
	"games-strategy/freeciv",
	"games-strategy/wesnoth",
	"games-arcade/jumpnbump",
	"games-arcade/lbreakout2",
);

my @packages_kde = (
	"kde-base/kde-i18n",
	#----------------------------------------------------
	# kdeaddons-meta
	#----------------------------------------------------
	#"kde-base/atlantikdesigner",
	"kde-base/knewsticker-scripts",
	#"kde-base/ksig",
	"kde-base/vimpart",
	"kde-base/kaddressbook-plugins",
	"kde-base/kate-plugins",
	"kde-base/kicker-applets",
	"kde-base/kdeaddons-kfile-plugins",
	"kde-base/konq-plugins",
	"kde-base/konqueror-akregator",
	"kde-base/kdeaddons-docs-konq-plugins",
	"kde-base/renamedlg-audio",
	"kde-base/renamedlg-images",
	#"kde-base/noatun-plugins",
	#----------------------------------------------------
	# kdeadmin-meta
	#----------------------------------------------------
	"kde-base/kcron",
	#"kde-base/kdat",
	"kde-base/kdeadmin-kfile-plugins",
	#"kde-base/kuser",
	#"kde-base/lilo-config",
	"kde-base/secpolicy",
	#----------------------------------------------------
	# kdebase-meta
	#----------------------------------------------------
	"kde-base/kdebase-startkde",
	"kde-base/drkonqi",
	"kde-base/kappfinder",
	"kde-base/kate",
	"kde-base/kcheckpass",
	"kde-base/kcminit",
	"kde-base/kcontrol",
	"kde-base/kdcop",
	"kde-base/kdebugdialog",
	"kde-base/kdepasswd",
	"kde-base/kdeprint",
	"kde-base/kdesktop",
	"kde-base/kdesu",
	"kde-base/kdialog",
	"kde-base/kdm",
	"kde-base/kfind",
	"kde-base/khelpcenter",
	"kde-base/khotkeys",
	"kde-base/kicker",
	"kde-base/kdebase-kioslaves",
	"kde-base/klipper",
	"kde-base/kmenuedit",
	"kde-base/konqueror",
	"kde-base/konsole",
	"kde-base/kpager",
	"kde-base/kpersonalizer",
	"kde-base/kreadconfig",
	"kde-base/kscreensaver",
	"kde-base/ksmserver",
	"kde-base/ksplashml",
	"kde-base/kstart",
	"kde-base/ksysguard",
	"kde-base/ksystraycmd",
	"kde-base/ktip",
	"kde-base/kwin",
	"kde-base/kxkb",
	"kde-base/libkonq",
	"kde-base/nsplugins",
	"kde-base/knetattach",
	"kde-base/kdebase-data",
	#----------------------------------------------------
	# kdeedu-meta
	#----------------------------------------------------
	#"kde-base/kig",
	#"kde-base/kalzium",
	#"kde-base/khangman",
	#"kde-base/kpercentage",
	#"kde-base/kiten",
	#"kde-base/kvoctrain",
	#"kde-base/kturtle",
	#"kde-base/kverbos",
	#"kde-base/kdeedu-applnk",
	#"kde-base/kbruch",
	#"kde-base/keduca",
	#"kde-base/kmessedwords",
	#"kde-base/klatin",
	#"kde-base/kmplot",
	#"kde-base/kstars",
	#"kde-base/ktouch",	#самоучитель слепой печати
	#"kde-base/klettres",
	#"kde-base/kmathtool",
	#"kde-base/kwordquiz",
	#----------------------------------------------------
	# kdegames-meta
	#----------------------------------------------------
	#"kde-base/kasteroids",
	#"kde-base/kbounce",
	#"kde-base/kolf",
	#"kde-base/atlantik",
	#"kde-base/katomic",
	#"kde-base/kbackgammon",
	#"kde-base/kbattleship",
	#"kde-base/kblackbox",
	#"kde-base/kenolaba",
	#"kde-base/kfouleggs",
	#"kde-base/kgoldrunner",
	#"kde-base/kjumpingcube",
	#"kde-base/klickety",
	#"kde-base/klines",
	#"kde-base/kmahjongg",
	#"kde-base/kmines",
	#"kde-base/konquest",
	#"kde-base/kpat",
	#"kde-base/kpoker",
	#"kde-base/ktron",
	#"kde-base/ktuberling",
	#"kde-base/ksame",
	#"kde-base/kshisen",
	#"kde-base/ksirtet",
	#"kde-base/ksmiletris",
	#"kde-base/ksnake",
	#"kde-base/ksokoban",
	#"kde-base/kspaceduel",
	#"kde-base/kreversi",
	#"kde-base/kwin4",
	#"kde-base/lskat",
	#----------------------------------------------------
	# kdegraphics-meta
	#----------------------------------------------------
	"kde-base/kamera",	#для фотика
	"kde-base/kcoloredit",
	"kde-base/kdegraphics-kfile-plugins",
	#"kde-base/kdvi",
	"kde-base/kfax",
	"kde-base/kgamma",
	"kde-base/kghostview",
	"kde-base/kiconedit",
	"kde-base/kmrml",
 	#"kde-base/kolourpaint",	#примитивный графический редактор
	"kde-base/kooka",			#для сканера
	"kde-base/libkscan",	# -..-
	"kde-base/kpdf",
	#"kde-base/kpovmodeler",
	#"kde-base/kruler",
	#"kde-base/ksnapshot",	#снимки экрана
	"kde-base/ksvg",
	"kde-base/kuickshow",
	"kde-base/kview",
	"kde-base/kviewshell",
	#----------------------------------------------------
	# kdemultimedia-meta
	#----------------------------------------------------
	"kde-base/artsplugin-audiofile",
	"kde-base/artsplugin-mpeglib",
	"kde-base/artsplugin-mpg123",
	"kde-base/artsplugin-xine",
	#"kde-base/juk",
	#"kde-base/kaboodle",
	#"kde-base/kaudiocreator",
	"kde-base/akode",
	"kde-base/kdemultimedia-arts",
	#"kde-base/krec",
	#"kde-base/noatun",
	"kde-base/kdemultimedia-kappfinder-data",
	"kde-base/kdemultimedia-kfile-plugins",
	"kde-base/kdemultimedia-kioslaves",
	#"kde-base/kmid",
	"kde-base/kmix",
	"kde-base/kscd",
	"kde-base/libkcddb",
	"kde-base/mpeglib",
	#----------------------------------------------------
	# kdenetwork-meta
	#----------------------------------------------------
	"kde-base/dcoprss",
	"kde-base/kdenetwork-filesharing",
	#"kde-base/kdict",
	#"kde-base/kget",
	"kde-base/knewsticker",
	#"kde-base/kopete",
	"kde-base/kpf",
	"kde-base/kppp",
	"kde-base/krdc",
	#"kde-base/krfb",		#общий рабочий стол
	#"kde-base/ksirc",	#клиент irc
	"kde-base/ktalkd",
	#"kde-base/kwifimanager",
	"kde-base/librss",
	"kde-base/kdnssd",
	"kde-base/kdenetwork-kfile-plugins",
	"kde-base/lisa",
	#----------------------------------------------------
	# kdepim-meta
	#----------------------------------------------------
	"kde-base/certmanager",
	"kde-base/kaddressbook",
	"kde-base/kalarm",
	#"kde-base/kandy",
	#"kde-base/karm",
	"kde-base/kdepim-kioslaves",
	"kde-base/kdepim-kresources",
	"kde-base/kdepim-wizards",
	#"kde-base/kitchensync",	#синхронизация данных
	"kde-base/kmail",
	"kde-base/kmailcvt",
	#"kde-base/knode",
	"kde-base/knotes",
	"kde-base/kode",
	"kde-base/konsolekalendar",
	"kde-base/kontact",
	"kde-base/kontact-specialdates",
	"kde-base/korganizer",
	#"kde-base/korn",
	#"kde-base/kpilot",
	"kde-base/ksync",
	"kde-base/ktnef",
	"kde-base/libkcal",
	"kde-base/libkdenetwork",
	"kde-base/libkdepim",
	"kde-base/libkholidays",
	"kde-base/libkmime",
	"kde-base/libkpgp",
	"kde-base/libkpimexchange",
	"kde-base/libkpimidentities",
	"kde-base/libksieve",
	"kde-base/mimelib",
	"kde-base/networkstatus",
	#----------------------------------------------------
	# kdetoys-meta
	#----------------------------------------------------
	#"kde-base/amor",
	#"kde-base/eyesapplet",
	#"kde-base/fifteenapplet",
	#"kde-base/kmoon",
	#"kde-base/kodo",
	#"kde-base/kteatime",
	#"kde-base/ktux",
	#"kde-base/kweather",
	#"kde-base/kworldwatch",
	#----------------------------------------------------
	# kdeutils-meta
	#----------------------------------------------------
	"kde-base/ark",
	"kde-base/kcalc",
	"kde-base/kcharselect",
	#"kde-base/kdelirc",
	#"kde-base/kdf",
	"kde-base/kedit",
	#"kde-base/kfloppy",
	"kde-base/kgpg",
	#"kde-base/khexedit",
	"kde-base/kjots",
	"kde-base/klaptopdaemon",
	"kde-base/kmilo",
	#"kde-base/kregexpeditor",
	"kde-base/ksim",
	#"kde-base/ktimer",
	"kde-base/kwalletmanager",
	#----------------------------------------------------
	# kdeartwork-meta
	#----------------------------------------------------
	"kde-base/kdeartwork-emoticons",
	"kde-base/kdeartwork-iconthemes",
	"kde-base/kdeartwork-icewm-themes",
	"kde-base/kdeartwork-kscreensaver",
	"kde-base/kdeartwork-kwin-styles",
	#"kde-base/kdeartwork-kworldclock",
	"kde-base/kdeartwork-sounds",
	"kde-base/kdeartwork-styles",
	"kde-base/kdeartwork-wallpapers",
	#----------------------------------------------------
	# kdewebdev-meta
	#----------------------------------------------------
	#"kde-base/kfilereplace",
	#"kde-base/kimagemapeditor",
	#"kde-base/klinkstatus",
	#"kde-base/kommander",
	#"kde-base/kxsldbg",
	#"kde-base/quanta",
	#----------------------------------------------------
	# kdeaccessibility-meta
	#----------------------------------------------------
	#"kde-base/ksayit",
	#"kde-base/kttsd",
	#"kde-base/kmag",
	#"kde-base/kdeaccessibility-iconthemes",
	#"kde-base/kmousetool",
	#"kde-base/kbstateapplet",
	#"kde-base/kmouth",
	#----------------------------------------------------
	# kdeoffice-meta
	#----------------------------------------------------
	#"app-i18n/koffice-i18n",
	#"app-office/koffice-data",
	#"app-office/koffice-libs",
	#"app-office/karbon",
	#"gnome-extra/libgsf",
	#"app-text/wv2",
	#"app-office/kchart",
	#"app-office/kspread",
	#"app-office/kword",
	#"app-office/koshell",
	#"app-office/kexi",
	#"app-office/kformula",
	#"app-office/kivio",
	#"kde-base/kjsembed",
	#"app-office/krita",
	#"app-office/kpresenter",
	#"app-office/kugar",
);

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# сформируем хэш пакетов карантина, для быстрого поиска
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
my %quarantine;
foreach (@packages_quarantine){
	$quarantine{$_} = $_;
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# соберем все пакеты для сборки
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
my @allpack = (
	@packages_base,
	@packages_office,
	@packages_add,
	@packages_nvidia,
	@packages_debug,
	@packages_games,
	@packages_kde,
);
my %allpack; foreach(@allpack){$allpack{$_}++;} #сформируем хэш пакетов для быстрого поиска

my %pack; #хэш пакетов сборки, формат: пакет -> #версия1##версия2#...
my %blockpack; #хэш конфликтующих пакетов, подлежащих удалению
my @blockpack; #массив конфликтующих пакетов, подлежащих удалению
my @blockerror; #массив конфликтующих пакетов, когда два пакета из сборки не совместимы
my $sumblockpack = 0; #счетчик конфликтующих пакетов
my @pack; #массив пакетов сборки (пакеты с версиями)
my $sumpack = 0; #счетчик пакетов сборки

{
	#удалим старый world
	if(-e $pathworld){
		system "mv $pathworld $pathworld_copy";
	}

	#заново сформируем world
	{
		my %world;
		#создадим иллюзию что действительно ничего в системе нет
		#emerge system имеет привычку прикреплять ранее установленные пакеты к системным
		if(!-e $pathpkg_copy){ #подстрахуемся на случай прерывания предыдущей работы
			system "mv $pathpkg $pathpkg_copy"; system "mkdir $pathpkg";
		}

		#соберем emerge system
		foreach(split /\n/, `emerge -ep system`){
			if(m/\[ebuild  N    \]/ && !m/\[blocks B     \]/){
				my ($realname) = substr($_, 16); $realname=~s/(.+)-[0-9]+.*/$1/;
				if(!$quarantine{$realname}){
					$world{$realname}++;
					$pack{$realname} .= '#'.substr($_, 16, length($_)-18).'#'; #хэш пакетов сборки
					push (@pack, substr($_, 16, length($_)-18)); #массив пакетов сборки
					$sumpack++;
		}	}	}

		#объединим с нашей сборкой
		foreach(split /\n/, `emerge -ep @allpack`){
			if(m/\[blocks B     \]/){
				#разберемся с зависимостями, для начала получим два конфликтующих пакета
				my ($realname) = substr($_, 16);
				my ($realname1, @realname2) = split / /, $realname;
				$realname1 =~s/[\<\=\>]+(.+)-[0-9]+.*/$1/;
				$realname2 = "@realname2"; $realname2 =~s/.+blocking (.+)-[0-9]+.*/$1/;
				#наш пакет может оказаться как слева, так и справа в сообщении, поэтому сверимся какой пакет наш, и не конфликтуют ли оба наших пакета
				if(!$allpack{$realname1} && $allpack{$realname2} && !$blockpack{$realname1}){
					push (@blockpack, $realname1);
					$blockpack{$realname1}++; #конфликтные пакеты, подлежащие удалению
					$sumblockpack++;
				}elsif($allpack{$realname1} && !$allpack{$realname2} && !$blockpack{$realname2}){
					push (@blockpack, $realname2);
					$blockpack{$realname2}++; #конфликтные пакеты, подлежащие удалению
					$sumblockpack++;
				}elsif($allpack{$realname1} && $allpack{$realname2}){
					#ситуация конфликтных зависимостей
					push(@blockerror, "$realname1 конфликтует с $realname2");
				}
			}elsif(m/\[ebuild  N    \]/){
				my ($realname) = substr($_, 16);
				my $b = substr($realname, 0, length($realname)-2); $b =~s/\+/\\+/g; #закомментируем для регулярного выражения
				$realname=~s/(.+)-[0-9]+.*/$1/;
 				if((!$pack{$realname} || $pack{$realname}!~m/$b/) && !$quarantine{$realname} && !$blockpack{$realname}){ #добавим, если пакет не дублируется
					$world{$realname}++;
					$pack{$realname} .= '#'.substr($_, 16, length($_)-18).'#';
					push (@pack, substr($_, 16, length($_)-18)); #массив пакетов сборки
					$sumpack++;
		}	}	}

		#обработаем аварийный выход, вызванный конфликтом пакетов в нашей сборке
		if(@blockerror){
			system "mv $pathworld_copy $pathworld";
			system "rm -rf $pathpkg"; system "mv $pathpkg_copy $pathpkg"; #вернем установленные пакеты системе
			system qq|
				$ver
				echo "Некоторые пакеты в сборке конфликтуют между собой";
				echo "Удалите взаимозаменяющие пакеты и продолжите операцию."
			|;
			foreach(@blockerror){ system qq|echo "  $_"|; }
			exit;
		}

		#сбросим в world нашу сборку
		system qq|echo "# THIS FILE IS AUTOMATICALLY GENERATED BY Packages Installer by L'autre."  >> $pathworld|;
		foreach(sort keys %world){
			system "echo $_ >> $pathworld";
		}
	}

	#выявим обновления оставшихся зависимостей
	foreach(split /\n/, `emerge -eDp world`){
		if(m/\[ebuild  N    \]/){
			my ($realname) = substr($_, 16);
			my $b = substr($realname, 0, length($realname)-2); $b =~s/\+/\\+/g; #закомментируем для регулярного выражения
			$realname=~s/(.+)-[0-9]+.*/$1/;
			if((!$pack{$realname} || $pack{$realname}!~m/$b/) && !$quarantine{$realname}){ #добавим, если пакет не дублируется
				$pack{$realname} .= '#'.substr($_, 16, length($_)-18).'#'; #хэш пакетов сборки
				push (@pack, substr($_, 16, length($_)-18)); #массив пакетов сборки
				$sumpack++;
	}	}	}
	system "rm -rf $pathpkg"; system "mv $pathpkg_copy $pathpkg"; #вернем установленные пакеты системе
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# подготовим список пакетов установленных
# и выделим пакеты, не входящие в сборку
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
#получим список установленных пакетов
my @inst;		#список установленных пакетов
{
	opendir(PKG, $pathpkg);
	foreach my $pkg (readdir PKG){
		if($pkg ne '..' && $pkg ne '.'){
			opendir(PAC, "$pathpkg/$pkg");
			foreach(readdir PAC){
				if($_ ne '..' && $_ ne '.'){
					push(@inst, "$pkg/$_");
			}	}
			closedir PAC;
	}	}
	closedir PKG;
}

#Счетчики
my $suminst = 0; 			#кол-во установленных пакетов
my $sumequal = 0; 		#кол-во установленных пакетов из сборки
my $sumdelinst = 0;		#кол-во пакетов отсутствующих в сборке (подлежащих удалению)

my @sumdelinst;		#массив пакетов подлежащих удалению

my %inst; #хэш установленных пакетов, формат: пакет -> #версия1##версия2#...
foreach(@inst){
	my ($realname) = $_; $realname=~s/(.+)-[0-9]+.*/$1/;
	$inst{$realname} .= "#$_#"; #хэш установленных пакетов
	#проверим на наличие пакета в системе
	if($pack{$realname}){
		my $b = $_; $b =~s/\+/\\+/g; #закомментируем для регулярного выражения
		if($pack{$realname} =~m/#$b#/){ #сравним установленную версию
			#установленный пакет совпадает с нашей сборкой
			$sumequal++;
		}
	}else{
		#установленный пакет отсутствует в сборке
		$sumdelinst++;
		push(@sumdelinst, $_);
	}
	$suminst++;
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# подготовим список пакетов не установленных в системе
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
#Счетчики
my $sumnotinst = 0;	#кол-во пакетов не установленных в системе
my $sumnotequal = 0;	#кол-во устаревших установленных пакетов из сборки

my @sumnotequal;	#массив пакетов подлежащих обновлению
my @_sumnotequal;	#массив описаний пакетов подлежащих обновлению
my @sumnotinst;	#массив пакетов не установленных в системе
my $portage;

foreach(@pack){
	my ($realname) = $_; $realname=~s/(.+)-[0-9]+.*/$1/;
	my $b = $_; $b =~s/\+/\\+/g; #закомментируем для регулярного выражения
	if(!$inst{$realname}){
		push (@sumnotinst, $realname);	#массив пакетов не установленных в системе
		$sumnotinst++;
	}
	elsif($inst{$realname} !~m/#$b#/){ #сравним установленную версию
		if($inst{$realname} !~m/sys-apps\/portage/){$portage++;} #флаг обновления portage
		$sumnotequal++;
		my $b = $inst{$realname}; $b =~s/##/, /g; $b=~s/#//g;
		push(@_sumnotequal, "$_ >> $b");
		push(@sumnotequal, $realname);
	}
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Статистическая информация
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
system qq|
	$ver
	echo "Пакетов в сборке: $sumpack";
	echo "Установлено: $suminst";
	echo "Общих пакетов: $sumequal";
	echo "Подлежащих обновлению: $sumnotequal"
|;
foreach(@_sumnotequal){ system qq|echo "  Update $_"|; }
system qq|echo "Подлежащих установке: $sumnotinst"|;
foreach(@sumnotinst){ system qq|echo "  Install $_"|; }
system qq|echo "Конфликтующих пакетов: $sumblockpack"|;
foreach(@blockpack){ system qq|echo "  Block $_"|; }
system qq|echo "Подлежащих удалению: $sumdelinst"|;
foreach(@sumdelinst){ system qq|echo "  Delete $_"|; }

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Последовательность действий
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
my @run;
if($run{'update'}){
	# Установка и обновление системы
	@run = (
		"Пауза 10 секунд",					"1"								=> "sleep 10",
		"Чистка системы",						"@sumdelinst"			=> "emerge -C @sumdelinst",
		"Обновление porgate",				"$portage"				=> "emerge -bk portage",
		"Установка новых пакетов",	"@sumnotinst"			=> "emerge -ubk @sumnotinst",
		"Обновление пакетов",				"@sumnotequal"		=> "emerge -ubk @sumnotequal",
		"Проверка флагов сборки",		"$run{'newuse'}"	=> "emerge --newuse -bk world",
	);
}elsif($run{'fetchonly'}){
	# Загрузка исходников
	@run = (
		"Пауза 5 секунд",				"1"		=> "sleep 5",
		"Загрузим все пакеты",	"1"		=> "emerge -ef world",
	);
}else{
	system "mv $pathworld_copy $pathworld";
	exit;
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Выполним операции
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
foreach(my $i=0; $i < @run; $i+=3){
	if($run[$i+1]){
		system ("echo $run[$i]; $run[$i+2]");
}	}

Благодарим...Шаманыш...

Благодарим...Шаманыш... Нет писали этот скрипт не мы... но задумка...
впринципе та же... Мы то же создали скрипт из-за теч же побуждений... для быстрого развертывания самой системы на винт...
Ну а на счет самого текста программы... Perl - это разумный язык программирования... я лично в нем не силен(мне минус), но базово с ним сталкивался и я думаю
смогу рационально использовать присланый тобою текст... и возможно усовершенствовать
наш скрипт... На днях попробую "расшифровать", в нем что-то полезное... Спасибо еще раз, Шаманыш - ты свой человек ;)

На счет скрипта на perl'e...

Шаманыш, просмотрел я скриптик...
При просмотре текста я понял, что можно теперь в программе (теперь уже "Gentin" я решил, что оно сазвучно) сделать меню для установки программ на выбор... И впринципе для полного счастья было бы не плохо, так как наш скрипт всего заканчивается на том что устанавливается загрузчик и после рестарта система готова к использованию только в консоли;). И я думаю это можно организовать... Можно сделать меню в котором будут просто перечислены программы и возможность нажатием одной клавиши при которой будет "ставиться" программа(но их много, хотя можно вписать основные).
Также можно организовать чтоб "гентушник" сам вводил название программы для установки...(это не сложно) ТОЛЬКО НАДО ЛИ... так как написать команду emerge и название программы, не намного сложнее чем просто написать название программы... В общем не знаю как и быть;)

Новое название!!! GENTIN !!!

Чтоб не было не поняток, теперь название скрипта "Gentin" ;)

Gentin

Ребята привет всем можно ли поподробнее как его запустить?
Когда я его скопировал в директорию /mnt/gentoo
и сделал ./Autogen2 то система ругнулась
спасибо за ответы
PS!!! скажите пожалуйста есть ли в этой системе gentoo еще такие(подобные) скрипты для настройки разных программ?
С ув. Дмитрий

ужос а сказать

ужос
а сказать по подробнее нельзя? я вот после этого поста подумал что зря народ скрипт писал...
PS он не настроивает, он ставит.

Re: ужос

evadim написал(а):
ужос
а сказать по подробнее нельзя? я вот после этого поста подумал что зря народ скрипт писал...
PS он не настроивает, он ставит.

внимательно читай что я написал если с логикой туго то........
а я спрашивал про подобные скриты установки
извини за резкость!!!!

вот моя

вот моя логика

Dmitrii написал(а):
Ребята привет всем можно ли поподробнее как его запустить?

любой скрипт запускается интерпритатором, достаточно указать путь к нему и надавить enter. что ты и сделал:

Dmitrii написал(а):
Когда я его скопировал в директорию /mnt/gentoo
и сделал ./Autogen2 то система ругнулась

а на что она ругнулась? сказала что ты ей ненравишся и вообще она невнастроении сегодня интепритировать скрипт на баше?

Dmitrii написал(а):
спасибо за ответы

наздоровье

Dmitrii написал(а):
PS!!! скажите пожалуйста есть ли в этой системе gentoo еще такие(подобные) скрипты для настройки разных программ?
С ув. Дмитрий

этот скрипт не является частью проэкта gentoo, он написан человеком не являющимся оффициальным девелопером gentoo, по причинам которые он изложил выше в теме.
этот скрипт не настроивает никакую программу, он облегчат установку системы.

PS и ещё - использование скрипта не отменяет надобность чтения документации, он просто набирает команды за тебя - и ты должен ясно представлять что ты делаеш.

PPS chmod +x ./Autogen2
?

Dmitrii

Ребятишки спасибо большое за советы и критику учтем :-)

На LiveCD есть консольный

На LiveCD есть консольный установщик. Просто доработайте под свои нужды.

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

Ребят! :) Есть такое

Ребят! :) Есть такое предложение. Многим сложно ещё компилить ядро с нуля, а genkernel выдаёт не совсем "гентушное" (по его принципам) ядро. Может сможете написать что-то вроде утилиты по компиляции ядра для не совсем чайником, но и не гуру? Я к сожалению могу предложить только услугу по бета-тестированию скрипта. :))

Great minds have a purpose, other have a wishes. /Irving Washington/

onegreyonewhite

onegreyonewhite написал(а):
Ребят! :) Есть такое предложение. Многим сложно ещё компилить ядро с нуля, а genkernel выдаёт не совсем "гентушное" (по его принципам) ядро. Может сможете написать что-то вроде утилиты по компиляции ядра для не совсем чайником, но и не гуру? Я к сожалению могу предложить только услугу по бета-тестированию скрипта. :))

Есть такой гениальный, советского времени, мульт "Вовка в тридевятом царстве", а в мульте не менее гениальные персонажи - двое из ларца - одинаковы с лица... если по молодости вы его не видели, вот ссылка на фрагмент об интересующих нас персонажах : http://www.youtube.com/watch?v=Ax2sgpdx3aw&feature=related
Если намек непонятен, могу развернуть...

Где мало слов, там вес они имеют... (с) W. Sheakespeare

Сумничал?

Сумничал? Смотри дальше мультики...

Great minds have a purpose, other have a wishes. /Irving Washington/

Зачем с нуля? Начинай с того,

Зачем с нуля? Начинай с того, что собрал или хотел собрать genkernel, оно почти наверняка рабочее, а потом можно выключать все, что считаешь не нужным и проверять.

А не могли бы разъяснить, чем

А не могли бы разъяснить, чем ядро собираемое genkernel "не совсем гентушное"?

Нулевая оптимизация под

Нулевая оптимизация под текущее оборудование... С таким же успехом можно поставившему убунту просто не стирать раздел с /boot и запускать с их ядра gentoo. Сначала я думал, что не сработает, но как показала практика - это реально.

Great minds have a purpose, other have a wishes. /Irving Washington/

А чем не нравится genkernel

А чем не нравится genkernel --menuconfig all?

>Одного меня смутила фраза "Британские ученые, живущие в Америке"??

британские - это характеристика, а не гражданство
(c)annulen

Вам ребята стоит заглянуть

Вам ребята стоит заглянуть сюда:
http://www.gentoo.ru/node/16767
http://www.gentoo.ru/node/16767#comment-120549

Great minds have a purpose, other have a wishes. /Irving Washington/

http://62.3.120.141/~pappy/wo

Пособие для новичков по конфигурированию ядра
http://62.3.120.141/~pappy/working.html

Я Gentoo & Funtoo

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".