From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 18 Dec 2003 20:02:19 +0300 From: Alexey Tourbin To: devel-kernel@altlinux.org Message-ID: <20031218170219.GU18450@julia.office.altlinux.ru> Mail-Followup-To: devel-kernel@altlinux.org References: <20031218162008.GT18450@julia.office.altlinux.ru> <20031218162939.GG17423@master.mivlgu.local> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Dujhm+tC3mnf5SZX" Content-Disposition: inline In-Reply-To: <20031218162939.GG17423@master.mivlgu.local> Cc: Subject: [d-kernel] Re: /sbin/installkernel vs DURING_INSTALL X-BeenThere: devel-kernel@altlinux.ru X-Mailman-Version: 2.1.3 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Dec 2003 17:02:28 -0000 Archived-At: List-Archive: List-Post: --Dujhm+tC3mnf5SZX Content-Type: multipart/mixed; boundary="V9ABGQrVMw+oEm4j" Content-Disposition: inline Content-Transfer-Encoding: 8bit --V9ABGQrVMw+oEm4j Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit On Thu, Dec 18, 2003 at 07:29:39PM +0300, Sergey Vlasov wrote: > On Thu, Dec 18, 2003 at 07:20:08PM +0300, Alexey Tourbin wrote: > > Господа, сейчас имеется следующее: > > [[ -n "$DURING_INSTALL" ]] && exit 0 > > > > Мне кажется это неверным. В процессе установки имеется важная > > информация об устанавливаемом ядре, а именно: %version. Поэтому после > > окончания установки без дополнительной информации (heuristics) нормально > > установить ядро нельзя. > > Зато в этот момент нет другой информации - о загрузчике и его настройках. Хочется, чтобы %post скрипт ядра отрабатывал хотя бы на уровне модификации конфигов /etc/lilo.conf и /boot/grub/menu.lst. Это есть залог того, что %postun скрипт тоже отработает правильно. Иначе будут угадывания и симлинки + проблемы "с первым ядром". > > Вообще же кривость этого скрипта заставляет меня сомневаться в > > необходимости того, чем этот скрипт занимается. > > :) Большой и кривой. Пока есть следующее представление: /usr/share/loader/{lilo,gurb} должны изменять конфиги и не делать ничего больше. Это есть также некоторое оправдание того, чтобы им быть написанным на перле. Запуском /sbin/lilo и расставлением симлинков должен заниматься /sbin/installkernel. Предварительные версии /usr/share/loader/{lilo,gurb} я отдаю на рассмотрение (в grub не доделаны параметры для kernel). Над /sbin/installkernel надо медитировать. --V9ABGQrVMw+oEm4j Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=lilo #!/usr/bin/perl # $Id: lilo,v 1.1.1.1 2003/11/26 19:11:38 at Exp $ #-------------------------------------------------------------------- # Copyright (C) 2000, 2001 by MandrakeSoft. # Chmouel Boudjnah . # # Redistribution of this file is permitted under the terms of the GNU # Public License (GPL) #-------------------------------------------------------------------- # Copyright (C) 2003 by ALT Linux Team, # Alexey Tourbin . #-------------------------------------------------------------------- # description: Add/remove entry for lilo bootloader. use strict; use Getopt::Long qw(GetOptions); GetOptions "n|nolaunch" => \my $nolaunch, "r|remove" => \my $remove, "m|memtest" => \my $memtest and (my $version = shift) and (@ARGV == 0) or die "usage: $0 [-n|--nolaunch] [-r|--remove] [-m|--memtest] version\n"; use bootloader_utils qw(getroot); sub add_memtest { local $_ = shift; my $txt = "image=/boot/memtest-$version\n\tlabel=memtest86-$version"; /^image=\/boot\/memtest-\Q$version\E\b/m or $_ .= $txt; return $_; } sub remove_memtest { local $_ = shift; my @sections = split /^(?=image=)/m; @sections = grep { !/^image=\/boot\/memtest-\Q$version\E\b/ } @sections; return join "" => @sections; } sub kernel_label { local $_ = shift; s/\.//g; s/mdk|alt//; s/secure/sec/; s/enterprise/ent/; s/vanilla/vnl/; return $_; } sub add_kernel { local $_ = shift; my $label = kernel_label($version); my $root = getroot(); my $txt = "image=/boot/vmlinuz-$version\n\tlabel=$label\n\troot=$root\n\tread-only\n\toptional\n"; /^image=\/boot\/vmlinuz-\Q$version\E\b/ or $_ .= $txt; return $_; } sub remove_kernel { local $_ = shift; my @sections = split /^(?=image=)/m; @sections = grep { !/^image=\/boot\/vmlinuz-\Q$version\E\b/ } @sections; return join "" => @sections; } { # open lilo.conf for update my $lilo_conf = $ENV{LILO_CONF} || "/etc/lilo.conf"; open my $fh, "+<", $lilo_conf or die "Cannot open $lilo_conf\n"; local $/ = undef; my $content = <$fh>; # modify the content if ($memtest && $remove) { $content = remove_memtest($content); } elsif ($memtest) { $content = add_memtest($content); } elsif ($remove) { $content = remove_kernel($content); } else { $content = add_kernel($content); } # debug print $content; exit 0; # do the update seek $fh, 0, 0; print $fh $content; truncate $fh, tell $fh; # autoclosed } --V9ABGQrVMw+oEm4j Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=grub #!/usr/bin/perl # $Id: grub,v 1.3 2003/12/04 12:33:15 at Exp $ #-------------------------------------------------------------------- # Copyright (C) 2000, 2001, 2002 by MandrakeSoft. # Chmouel Boudjnah . # # Redistribution of this file is permitted under the terms of the GNU # Public License (GPL) #-------------------------------------------------------------------- # Copyright (C) 2003 by ALT Linux Team, # Alexey Tourbin . #-------------------------------------------------------------------- # description: Add/remove entry for grub bootloader. use strict; use bootloader_utils qw(mnt2dev getroot); use Getopt::Long qw(GetOptions); GetOptions "r|remove" => \my $remove, "m|memtest" => \my $memtest and (my $version = shift) and (@ARGV == 0) or die "usage: $0 [-r|--remove] [-m|--memtest] version\n"; sub dev2grub { my $dev = shift; my ($disk, $part) = $dev =~ /([^\d\s]+)(\d+)/ or return; # Sample device.map entry: # (hd0) /dev/hda # Sample convertion: # /dev/hda5 => (hd0,4) $part--; my $map = $ENV{GRUB_DEVICE_MAP} || "/boot/grub/device.map"; open my $fh, $map or return; my $grub_part; while (<$fh>) { if (/\((\w+d\d+)\)\s+\Q$disk\E$/) { $grub_part = "($1,$part)"; last; } } return $grub_part; } my $boot = mnt2dev("/boot") ? "" : "/boot"; my $grub_part = dev2grub(getroot()); die "Can't convert grub_partition\n" unless $grub_part; sub add_memtest { local $_ = shift; /\/memtest-\Q$version\E\b/ or $_ .= < @sections; } sub add_kernel { local $_ = shift; /\/vmlinuz-\Q$version\E\b/ or $_ .= < @sections; } { # open menu.lst for update my $menu_lst = $ENV{GRUB_MENU_LST} || "/boot/grub/menu.lst"; open my $fh, "+<", $menu_lst or die "Cannot open $menu_lst\n"; local $/ = undef; my $content = <$fh>; # modify the content if ($memtest && $remove) { $content = remove_memtest($content); } elsif ($memtest) { $content = add_memtest($content); } elsif ($remove) { $content = remove_kernel($content); } else { $content = add_kernel($content); } # debug print $content; exit 0; # do the update seek $fh, 0, 0; print $fh $content; truncate $fh, tell $fh; # autoclosed } --V9ABGQrVMw+oEm4j-- --Dujhm+tC3mnf5SZX Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQE/4d2bfBKgtDjnu0YRAmq8AKCNnOJgzUFAUIsaZn4GmfjKlIJDVQCg5uUu gkz8BwZo2GK+NvEv3nXj0tE= =93Xg -----END PGP SIGNATURE----- --Dujhm+tC3mnf5SZX--