git-svn-id: http://svn.calculate.ru/calculate/trunk@2168 c91db197-33c1-4113-bf15-f8a5c547ca64

master
atratsevskiy 15 years ago
parent 98ad2312c3
commit 72f1a09044

@ -6,6 +6,7 @@ CHANGE LOG
* Исправлен баг вразмаскировке пакетов последних версий.
* Эффекты рабочего стола по умолчанию включаются
* Добавлена утилита emerge-scratch - выполняющая сборку пакетов в Scratch режиме
* Добавлена переменная sleep со значением количества секунд до выполнения форматирования и других действий. По умолчанию значение равно 10 секундам. Поддерживается значение 'off' ('no' и 'false' - эквиваленты). Пример '--set-sleep=5'.
1.1.0
* В xorg.conf параметр BusID добавляется тольков случае если видеокарт в системе две и более.

@ -339,6 +339,7 @@ sub getarg{
"composite",
"system",
"swapon",
"sleep",
);
foreach(@write){$data{write}{$_} ++;}
@ -501,7 +502,7 @@ sub getarg{
printmes(" -s, --os=[CLD|CLDX|CLS|CDS] "); printmes(gettext('select operation system')); printmes(" (Calculate Linux Desktop KDE, Calculate Linux Desktop XFCE, Calculate Linux Scratch, Calculate Directory Server)\n");
printmes(" -d, --disk=DISK\t"); printmes(gettext('installation or building system volume')."\n");
printmes(" -S, --scratch\t"); printmes(gettext('installation for scratch builder')."\n");
printmes(" -S, --scratch\t\t"); printmes(gettext('installation for scratch builder')."\n");
printmes(" -f, --force\t\t"); printmes(gettext('do not prompt before overwriting')."\n");
printmes("\n".gettext('Installation and Update').":\n");
@ -881,6 +882,10 @@ sub checksystem{
if(!system "which nmap >/dev/null 2>&1"){$data{exec_nmap} = `which nmap`; chomp $data{exec_nmap};}
if(!system "which wget >/dev/null 2>&1"){$data{exec_wget} = `which wget`; chomp $data{exec_wget};}
#временная задержка перед выполнением операций над диском
if($data{sleep}=~m/off/i || $data{sleep}=~m/no/i || $data{sleep}=~m/false/i){$data{sleep} = 0;}
elsif($data{sleep}=~m/[^0-9]/){$data{sleep} = 10;}
#----------------------------------------------------------------------
# Установим значение переменной в ram, в случае если установка профиля
# производится в оперативную память (настройка сеанса CDROM), а также
@ -2931,9 +2936,10 @@ sub extract{
printmes(" 10 "); printmes(gettext('seconds')); printmes(".\n");
printmes(gettext('Press')); printmes(" Ctrl+C "); printmes(gettext('to cancel')); printmes("... ");
if(system(q|echo -e -n "\a10"; sleep 1; for ((i=9; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); return "";
}
if($data{sleep} > 0){my $sleep = $data{sleep} - 1;
if(system(q|echo -e -n "\a|.$data{sleep}.q|"; sleep 1; for ((i=|.$sleep.q|; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); return "";
} }
if($data{erase} eq 'on'){
if(!$data{builder}){
@ -3139,7 +3145,7 @@ sub extract{
#перенесем информацию из ISO для scratch
if($data{scratch}){
printmes(" ".gettext('Extract grub from squashfs')); printmes("... ");
if(system("$data{path} unsquashfs -n -d $data{mount}/workspace -f $data{mount}/livecd.squashfs /boot /etc/init.d/root &>/dev/null")){
if(system("$data{path} unsquashfs -n -d $data{mount}$data{scratch} -f $data{mount}/livecd.squashfs /boot /etc/init.d/root &>/dev/null")){
printmes("\n\n".gettext('Error')."! ");
beep();
return "";
@ -3192,36 +3198,42 @@ sub setup{
printmes(" ".gettext('Setting')); printmes(" scratch...");
system "$data{path} mkdir $data{'chroot'}/calculate";
system "$data{path} mkdir $data{'chroot'}/delta";
system "$data{path} mv $data{'chroot'}/workspace/boot $data{'chroot'}";
system "$data{path} mv $data{'chroot'}$data{scratch}/boot $data{'chroot'}";
printmes(" ".gettext('done').".\n");
return 1;
}
#восстановим inittab
if(-e "$data{chroot}/etc/inittab.old"){
if(-e "$data{chroot}/etc/inittab.old" ||
($data{load} eq 'ram' || $data{load} eq 'scratch') && -e "/etc/inittab.old"
){
printmes(" ".gettext('Update')); printmes(" /etc/inittab...");
system "$data{path} mv $data{chroot}/etc/inittab.old $data{chroot}/etc/inittab";
if(-e "$data{chroot}/etc/inittab.old"){
system "$data{path} mv $data{chroot}/etc/inittab.old $data{chroot}/etc/inittab";
}else{
system "$data{path} cp /etc/inittab.old $data{chroot}$data{scratch}/etc/inittab";
}
printmes(" ".gettext('done').".\n");
}
#Создадим initrd-файл
# if(!$data{dif_march}){
printmes(" ".gettext('Create new initrd file')); printmes("...");
if(!initrd_clean($data{chroot})){
beep();
printmes(" ".gettext('error')."!\n");
}
# }
printmes(" ".gettext('Create new initrd file')); printmes("...");
if(!initrd_clean($data{chroot})){
beep();
printmes(" ".gettext('error')."!\n");
}
#Перенесем Portage
if(-e "/usr/portage/profiles" && !-e "$data{chroot}/usr/portage/profiles"){
printmes(" ".gettext('Copy')); printmes(" Portage...");
system "
$data{path} rm -rf $data{chroot}/usr/portage &&
$data{path} cp -a /usr/portage $data{chroot}/usr/
";
printmes(" ".gettext('done').".\n");
}
# if(-e "/usr/portage/profiles" && $data{calculate} eq 'CLDX'){
# printmes(" ".gettext('Copy')); printmes(" Portage...");
# if(system "
# $data{path} rm -rf $data{chroot}/usr/portage &&
# $data{path} cp -a /usr/portage $data{chroot}/usr/
# "
# ){
# printmes(" ".gettext('error')."!\n");
# }else{
# printmes(" ".gettext('done').".\n");
# } }
#----------------------------------------------------------------------
# Запросим пароль root-а
@ -3234,16 +3246,20 @@ sub setup{
#----------------------------------------------------------------------
# Перенесем пароль рута
#----------------------------------------------------------------------
system "$data{path} cat /etc/shadow | sed q > $data{'chroot'}/etc/shadow_new &&
$data{path} cat $data{'chroot'}/etc/shadow | sed 1d >> $data{'chroot'}/etc/shadow_new";
system "$data{path} cat /etc/shadow- | sed q > $data{'chroot'}/etc/shadow-_new &&
$data{path} cat $data{'chroot'}/etc/shadow- | sed 1d >> $data{'chroot'}/etc/shadow-_new";
if($data{scratch}){
system("$data{path} unsquashfs -n -d $data{mount}$data{scratch} -f $data{mount}/livecd.squashfs /etc/shadow /etc/shadow- &>/dev/null\n");
}
system "$data{path} mv $data{'chroot'}/etc/shadow_new $data{'chroot'}/etc/shadow";
system "$data{path} mv $data{'chroot'}/etc/shadow-_new $data{'chroot'}/etc/shadow-";
system "$data{path} cat /etc/shadow | sed q > $data{'chroot'}$data{scratch}/etc/shadow_new &&
$data{path} cat $data{'chroot'}$data{scratch}/etc/shadow | sed 1d >> $data{'chroot'}$data{scratch}/etc/shadow_new";
system "$data{path} cat /etc/shadow- | sed q > $data{'chroot'}$data{scratch}/etc/shadow-_new &&
$data{path} cat $data{'chroot'}$data{scratch}/etc/shadow- | sed 1d >> $data{'chroot'}$data{scratch}/etc/shadow-_new";
system "$data{path} chmod 700 $data{'chroot'}/etc/shadow";
system "$data{path} chmod 700 $data{'chroot'}/etc/shadow-";
system "$data{path} mv $data{'chroot'}$data{scratch}/etc/shadow_new $data{'chroot'}$data{scratch}/etc/shadow";
system "$data{path} mv $data{'chroot'}$data{scratch}/etc/shadow-_new $data{'chroot'}$data{scratch}/etc/shadow-";
system "$data{path} chmod 700 $data{'chroot'}$data{scratch}/etc/shadow";
system "$data{path} chmod 700 $data{'chroot'}$data{scratch}/etc/shadow-";
#----------------------------------------------------------------------
# Пропишем клиент в автозагрузку, если компьютер в домене
@ -3280,8 +3296,8 @@ sub setup{
my $ws = "/etc/wicd/wireless-settings.conf";
if(-e $ms || -e $ws){
printmes(" ".gettext('Copy wicd manager settings')); printmes("...");
if(-e $ms){system "$data{path} cp $ms $data{'chroot'}$ms";}
if(-e $ws){system "$data{path} cp $ws $data{'chroot'}$ws";}
if(-e $ms){system "$data{path} cp $ms $data{'chroot'}$data{scratch}$ms";}
if(-e $ws){system "$data{path} cp $ws $data{'chroot'}$data{scratch}$ws";}
printmes(" ".gettext('done').".\n");
} }
@ -6203,13 +6219,6 @@ sub initrd{
sub initrd_clean{
my $chroot = $_[0];
if($chroot && number_ver($data{os}) <= number_ver(8.7)){
#пропущем, выполним calculate --initrd при первой загрузке из профиля
printmes(" ".gettext('pass')); printmes(".\n");
# printmes(gettext('It is supported in systems of versions')); printmes(" > 8.7\n");
return 1;
}
#найдем среди запущенных модулей не задействованные, которые можно удалить
my %mod_dep; #хэш зависимостей, ключ - модуль, значение - модули его использующие
my %mod_run; #хэш работающих модулей
@ -6267,7 +6276,7 @@ sub initrd_clean{
}
#распакуем initrd
my $tmpdir = "$chroot/tmp/initrd";
my $tmpdir = "$chroot$data{scratch}/tmp/initrd";
`$data{path} rm -rf $tmpdir`;
`$data{path} mkdir $tmpdir`;
chdir($tmpdir);
@ -6280,14 +6289,15 @@ sub initrd_clean{
`$data{path} cat $tmpdir/initrd-install | cpio -idv >/dev/null 2>&1`;
`$data{path} rm $tmpdir/initrd-install`;
#удалим не работающие модули из initrd
#удалим неработающие модули из initrd
foreach(`$data{path} find $tmpdir/lib/modules/ -name *.ko`){
m/\/([^\/]+)\.ko$/;
if(!$mod_run{$1}){`rm $_`;}
}
#соберем распакованный initrd
`$data{path} find * | cpio -o --quiet -H newc | gzip -9 > $chroot/boot/initrd`;
if(!-e "$chroot$data{scratch}/boot"){`mkdir -p "$chroot$data{scratch}/boot"`;}
`$data{path} find * | cpio -o --quiet -H newc | gzip -9 > $chroot$data{scratch}/boot/initrd`;
chdir($ENV{PWD});
`$data{path} rm -rf $tmpdir`;
@ -6316,9 +6326,10 @@ sub addition{
printmes("\n".gettext('Installation of addition will begin through')); printmes(" 10 "); printmes(gettext('seconds')); printmes(".\n");
printmes(gettext('Press')); printmes(" Ctrl+C "); printmes(gettext('to cancel')); printmes("... ");
if(system(q|echo -e -n "\a10"; sleep 1; for ((i=9; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); next;
}
if($data{sleep} > 0){my $sleep = $data{sleep} - 1;
if(system(q|echo -e -n "\a|.$data{sleep}.q|"; sleep 1; for ((i=|.$sleep.q|; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); return "";
} }
#распакуем дополнение
printmes(" ".gettext('Unpack')); printmes("...");
@ -6438,9 +6449,10 @@ sub makeadd{
printmes("\n".gettext('Assembly of addition will begin through')); printmes(" 10 "); printmes(gettext('seconds')); printmes(".\n");
printmes(gettext('Press')); printmes(" Ctrl+C "); printmes(gettext('to cancel')); printmes("... ");
if(system(q|echo -e -n "\a10"; sleep 1; for ((i=9; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); return "";
}
if($data{sleep} > 0){my $sleep = $data{sleep} - 1;
if(system(q|echo -e -n "\a|.$data{sleep}.q|"; sleep 1; for ((i=|.$sleep.q|; $i>0; i--)); do echo -e -n "\a\b\b $i"; sleep 1; done; echo -e "\b\b ";|)){
printmes("\n"); return "";
} }
printmes(gettext('Make addition')."\n");

Loading…
Cancel
Save