[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/8] osstest: add a FreeBSD host install recipe
Roger Pau Monne writes ("[PATCH v3 4/8] osstest: add a FreeBSD host install recipe"): > The installation is performed using the bsdinstall tool, which is part > of the FreeBSD base system. The installer image is setup with the > osstest ssh keys and sshd enabled by default, which allows the test > harness to just ssh into the box, create the install config file and > launch the scripted install. thanks. > +# The installer image must be named 'install.img', and the sets > +# 'kernel.txz', 'base.txz' and finally the 'MANIFEST' file that contains > +# the checksums. Thanks for the good doc comment. > +sub setup_netboot_installer () { > + my $image = "$path_prefix/install.img"; > + my $pxeimg = target_tftp_prefix($ho) . "--freebsd.img"; > + my $hash = `sha256sum $image | head -c 16` or die $!; You should do this ` -' stripping in Perl. That way, also, you won't lose the exit status from sha256sum as you do here. > + my $tftp_freebsd = > "$ho->{Tftp}{Path}/$ho->{Tftp}{TmpDir}/freebsd-images/"; > + my $script = <<'END'; > +basedir=$0 > +imagepath=$1 > +sharedpath=$2 > +targetpath=$3 Please pass a dummy argument to the script (I usually use `x') and shift all these arguments along. Passing a real argument as $0 is IMO strange. > +cd $basedir > +if [ ! -f $sharedpath ]; then > + mkdir -p `dirname $sharedpath` > + cp $imagepath $sharedpath Please use the copy-to-tempfile-and-rename pattern. AFAICT your filename pattern for the per-hash filename is $tftp_freebsd/$r{arch}/$hash/install.img Is there some reason why this needs - to be qualified with $r{arch} - to have a bunch of per-hash directories containing one file each ? Why not $tftp_freebsd/by-hash/$hash.img ? > +# Dir format from basedir is $arch/$hash/install.img > +for hashdir in `find -mindepth 2 -maxdepth 2 -type d`; do 1. use xargs or -exec -rm 2. use find -links 3. add -ctime +7 or something, so we don't delete things which have just been added (or used) > + my @cmd = ( "with-lock-ex", "-w", "$tftp_freebsd/lock", > + "bash", "-exc", "$script", > + "$tftp_freebsd", "$image", "$r{arch}/$hash/install.img", > + "$ho->{Tftp}{Path}/$pxeimg" ); Use of qw() would make this a lot less visually noisy. > + ensuredir("$tftp_freebsd"); " " are redundant in Perl. It's not sh :-). > + logm("Trying to find a disk to install to"); > + $disk = target_cmd_output_root($ho, <<END, 30); > +for disk in @disk_names; do Did you want to add set -e ? > + if [ -c "/dev/\$disk" ]; then > + echo \$disk > + exit 0 > + fi > +done > +exit 1 > +END > + defined($disk) or die "Unable to find a valid disk"; target_cmd_output_root will never return undef. I think this error check is redundant, therefore. > + logm("Trying to figure out primary nic device name"); > + $nic = target_cmd_output_root($ho, <<END, 30); > +nics=`ifconfig -l` I think this definitely needs set -e. > +for nic in \$nics; do > + addr=`ifconfig \$nic inet|grep inet|awk {'print \$2'}` > + if [ "\$addr" = "$ho->{Ip}" ]; then > + echo \$nic > + exit 0 > + fi > +done > +exit 1 > +END Is it likely that the disk or network device name, for a particular device, will change, for example across versions of FreeBSD ? > + logm("Uploading the install sets to the system"); > + target_cmd_root($ho, <<END, 30); > +mkdir -p $target_sets Missing set -e. > + logm("Creating the installer script"); > + target_putfilecontents_root_stash($ho, 10, <<END, '~/installscript'); > +set -a > +BSDINSTALL_DISTDIR="$target_sets" > +ZFSBOOT_DISKS="$disk" > +DISTRIBUTIONS="@sets" > +nonInteractive=1 > + > +#!/bin/sh > +set -ex There's a #! halfway through this script. > +# Setup serial console > +printf "%s" "-h -S$c{Baud}" >> /boot.config Are you deliberately leaving /boot.config with no final newline ? > +cat << ENDBOOT >> /boot/loader.conf > +boot_serial="YES" > +comconsole_speed="$c{Baud}" > +console="comconsole" > +boot_verbose="YES" > +beastie_disable="YES" :-) re beastie. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |