Patch title: Release 85 bulk changes
Abstract:
File: /pliant/fullpliant/install.pli
Key:
    Removed line
    Added line
   
abstract
  [This module will install a ready to operate FullPliant sy


function lilo_install c root_path lilo_boot_device kernel_ro
  arg Data:Computer c ; arg Str root_path lilo_boot_device k
  (var Stream s) open root_path+"boot/lilo.conf" out+safe
  if s=failure
    console "Failed to create lilo configuration file" eol
    return failure
  s writeline "read-only"
  s writeline "delay=50"
  s writeline "lock"
  s writeline "boot="+file_os_name:lilo_boot_device
  s writeline "image=/boot/kernel"
  s writeline "  label=fullpliant"
  s writeline "  root="+file_os_name:kernel_root
  s writeline "  append=[dq]"+kernel_options+"[dq]"
  if c:env:"partition":"root":"video_bios_mode"<>""
    s writeline "  vga="+c:env:"partition":"root":"video_bio
  eif c:env:"hardware":"video":"bios_mode"<>""
    s writeline "  vga="+c:env:"hardware":"video":"bios_mode
  each p c:env:"partition" filter keyof:p<>"root"
    if p:"kernel"<>""
      filesystem_mount p:"device" "file:/mnt/"+keyof:p+"/" "
      s writeline "image=/mnt/"+keyof:p+"/boot/"+p:"kernel"
      s writeline "  label="+keyof:p
      s writeline "  root="+(file_os_name p:"device")
      s writeline "  append=[dq]"+p:"kernel_options"+"[dq]"
      if p:"video_bios_mode"<>""
        s writeline "  vga="+p:"video_bios_mode"
      eif c:env:"hardware":"video":"bios_mode"<>""
        s writeline "  vga="+c:env:"hardware":"video":"bios_
    eif p:"os"<>""
      s writeline "other="+(file_os_name p:"device")
      s writeline "  label="+keyof:p
abstract
  [This module will install a ready to operate FullPliant sy


function lilo_install c root_path lilo_boot_device kernel_ro
  arg Data:Computer c ; arg Str root_path lilo_boot_device k
  (var Stream s) open root_path+"boot/lilo.conf" out+safe
  if s=failure
    console "Failed to create lilo configuration file" eol
    return failure
  s writeline "read-only"
  s writeline "delay=50"
  s writeline "lock"
  s writeline "boot="+file_os_name:lilo_boot_device
  s writeline "image=/boot/kernel"
  s writeline "  label=fullpliant"
  s writeline "  root="+file_os_name:kernel_root
  s writeline "  append=[dq]"+kernel_options+"[dq]"
  if c:env:"partition":"root":"video_bios_mode"<>""
    s writeline "  vga="+c:env:"partition":"root":"video_bio
  eif c:env:"hardware":"video":"bios_mode"<>""
    s writeline "  vga="+c:env:"hardware":"video":"bios_mode
  each p c:env:"partition" filter keyof:p<>"root"
    if p:"kernel"<>""
      filesystem_mount p:"device" "file:/mnt/"+keyof:p+"/" "
      s writeline "image=/mnt/"+keyof:p+"/boot/"+p:"kernel"
      s writeline "  label="+keyof:p
      s writeline "  root="+(file_os_name p:"device")
      s writeline "  append=[dq]"+p:"kernel_options"+"[dq]"
      if p:"video_bios_mode"<>""
        s writeline "  vga="+p:"video_bios_mode"
      eif c:env:"hardware":"video":"bios_mode"<>""
        s writeline "  vga="+c:env:"hardware":"video":"bios_
    eif p:"os"<>""
      s writeline "other="+(file_os_name p:"device")
      s writeline "  label="+keyof:p
  if (file_query "file:/boot/memtest86.bin" standard)=success
    s writeline "image=/boot/memtest86.bin"
    s writeline "  label=memtest"
  s close
  var Str flags := ""
  var Str geometry := lilo_options option "geometry" Str
  flags += (shunt geometry="chs" "" geometry="lba32" " -L" "
  var Int err := execute "lilo -C /boot/lilo.conf"+flags roo
  if err<>0 and geometry=""
    err := execute "lilo -C /boot/lilo.conf -L" root root_pa
    if err<>0 and geometry=""
      err := execute "lilo -C /boot/lilo.conf" root root_pat
  # file_delete root_path+"boot/lilo.conf"
  each p c:env:"partition"
    if p:"kernel"<>""
      filesystem_dismount "file:/mnt/"+keyof:p+"/"
  status := shunt err=0 success failure



  (var DebianDistribution debian) bind c
  s close
  var Str flags := ""
  var Str geometry := lilo_options option "geometry" Str
  flags += (shunt geometry="chs" "" geometry="lba32" " -L" "
  var Int err := execute "lilo -C /boot/lilo.conf"+flags roo
  if err<>0 and geometry=""
    err := execute "lilo -C /boot/lilo.conf -L" root root_pa
    if err<>0 and geometry=""
      err := execute "lilo -C /boot/lilo.conf" root root_pat
  # file_delete root_path+"boot/lilo.conf"
  each p c:env:"partition"
    if p:"kernel"<>""
      filesystem_dismount "file:/mnt/"+keyof:p+"/"
  status := shunt err=0 success failure



  (var DebianDistribution debian) bind c
  console "Extrating Debian files" eol
  console "Extracting Debian files" eol
  (var Stream log) open "file:/tmp/packages.log" out+safe
  each p c:env:"package"
    var Str name := keyof p
    # console "  " name eol
    if (debian unpack1 name p:"file" "file:/tmp/package/")=s
      var CBool some := false
      each f p
        if (keyof:f parse "/" any:(var Str subpath))
          some := true
      if some
        file_tree_delete "file:/tmp/files/"
        file_extract "file:/tmp/package/data.tar.gz" "file:/
        each f p
          var Str src := keyof f
          if (src parse "/" any)
            var Str link := (file_query "file:/tmp/files"+sr
            if (link 0 1)="/"
              src := "file:/tmp/files"+link
            eif link<>""
              src := "file:/tmp/files"+(src 0 (src search_la
            else
              src := "file:/tmp/files"+src
            var Str dest := "target:"+f
            if src:len>0 and (src src:len-1)="*" and dest:le
              var Int cut := (src search_last "/" 0)+1
              var Str src_path := src 0 cut
              var Str src_base := src cut src:len-1-cut
              var Array:FileInfo files := file_list src_path
              var Int count := 0
              for (var Int i) 0 files:size-1
                if (files:i:name 0 src_base:len)=src_base
                  count += 1
                  if (file_copy src_path+files:i:name dest+f
                    console "Failed to copy file " src_path+
                    log writeline name+": "+src_path+files:i
              if count=0
                console "There is no "+src+" file in package
                log writeline name+": "+src
            else
              if (file_copy src dest extended)=failure
                console "Failed to copy file " keyof:f " to 
                log writeline name+": "+keyof:f+" -> "+f
                var Array:FileInfo files := file_list "file:
                for (var Int i) 0 files:size-1
                  log writeline "  "+files:i:name+" "+(strin
    else
      console "Failed to unpack package " name eol
      log writeline name+": failed to unpack"
  file_link "file:libdl.so.2" "target:/lib/libdl.so"
  file_tree_delete "file:/tmp/files/"
  file_tree_delete "file:/tmp/package/"
  if static
    if (file_query fullpliant_binary_path+"e2fsck" standard)
      console "Building static e2fsck" eol
      if not (c:env:"package":"e2fsprogs":"version" parse an
        version := "1.18"
      var Str ext2utils := "e2fsprogs-"+version
      var Str local := fullpliant_source_path+ext2utils+".ta
      var Str remote := "http://web.mit.edu/tytso/www/linux/
      if (file_query local standard)=undefined
        console "downloading " remote eol
        if (file_copy remote local standard)=failure
          return (failure "Failed to download ext2 utils sou
      file_tree_delete "file:/usr/src/"+ext2utils+"/"
      file_extract local "file:/usr/src/"
      console "  building e2fsck." eol
      # we cannot redirect ./configure output to /dev/null s
      shell "cd /usr/src/"+ext2utils+"/ ; ./configure --disa
      if (file_copy "file:/usr/src/"+ext2utils+"/e2fsck/e2fs
        return failure:"Failed to build e2fsck."
      if (file_copy "file:/usr/src/"+ext2utils+"/misc/mke2fs
        return failure:"Failed to build mke2fs."
      if (file_copy "file:/usr/src/"+ext2utils+"/misc/tune2f
        return failure:"Failed to build mke2fs."
    file_copy fullpliant_binary_path+"e2fsck" "target:/bin/e
    file_copy fullpliant_binary_path+"mke2fs" "target:/bin/m
    file_copy fullpliant_binary_path+"tune2fs" "target:/bin/
  status := install_check_libraries "target:/bin/" "target:/
  if status=failure
    return


  pliant_multi_file_system dismount "target:/"
  console "done." eol
  status := success
  
export install_tree
  (var Stream log) open "file:/tmp/packages.log" out+safe
  each p c:env:"package"
    var Str name := keyof p
    # console "  " name eol
    if (debian unpack1 name p:"file" "file:/tmp/package/")=s
      var CBool some := false
      each f p
        if (keyof:f parse "/" any:(var Str subpath))
          some := true
      if some
        file_tree_delete "file:/tmp/files/"
        file_extract "file:/tmp/package/data.tar.gz" "file:/
        each f p
          var Str src := keyof f
          if (src parse "/" any)
            var Str link := (file_query "file:/tmp/files"+sr
            if (link 0 1)="/"
              src := "file:/tmp/files"+link
            eif link<>""
              src := "file:/tmp/files"+(src 0 (src search_la
            else
              src := "file:/tmp/files"+src
            var Str dest := "target:"+f
            if src:len>0 and (src src:len-1)="*" and dest:le
              var Int cut := (src search_last "/" 0)+1
              var Str src_path := src 0 cut
              var Str src_base := src cut src:len-1-cut
              var Array:FileInfo files := file_list src_path
              var Int count := 0
              for (var Int i) 0 files:size-1
                if (files:i:name 0 src_base:len)=src_base
                  count += 1
                  if (file_copy src_path+files:i:name dest+f
                    console "Failed to copy file " src_path+
                    log writeline name+": "+src_path+files:i
              if count=0
                console "There is no "+src+" file in package
                log writeline name+": "+src
            else
              if (file_copy src dest extended)=failure
                console "Failed to copy file " keyof:f " to 
                log writeline name+": "+keyof:f+" -> "+f
                var Array:FileInfo files := file_list "file:
                for (var Int i) 0 files:size-1
                  log writeline "  "+files:i:name+" "+(strin
    else
      console "Failed to unpack package " name eol
      log writeline name+": failed to unpack"
  file_link "file:libdl.so.2" "target:/lib/libdl.so"
  file_tree_delete "file:/tmp/files/"
  file_tree_delete "file:/tmp/package/"
  if static
    if (file_query fullpliant_binary_path+"e2fsck" standard)
      console "Building static e2fsck" eol
      if not (c:env:"package":"e2fsprogs":"version" parse an
        version := "1.18"
      var Str ext2utils := "e2fsprogs-"+version
      var Str local := fullpliant_source_path+ext2utils+".ta
      var Str remote := "http://web.mit.edu/tytso/www/linux/
      if (file_query local standard)=undefined
        console "downloading " remote eol
        if (file_copy remote local standard)=failure
          return (failure "Failed to download ext2 utils sou
      file_tree_delete "file:/usr/src/"+ext2utils+"/"
      file_extract local "file:/usr/src/"
      console "  building e2fsck." eol
      # we cannot redirect ./configure output to /dev/null s
      shell "cd /usr/src/"+ext2utils+"/ ; ./configure --disa
      if (file_copy "file:/usr/src/"+ext2utils+"/e2fsck/e2fs
        return failure:"Failed to build e2fsck."
      if (file_copy "file:/usr/src/"+ext2utils+"/misc/mke2fs
        return failure:"Failed to build mke2fs."
      if (file_copy "file:/usr/src/"+ext2utils+"/misc/tune2f
        return failure:"Failed to build mke2fs."
    file_copy fullpliant_binary_path+"e2fsck" "target:/bin/e
    file_copy fullpliant_binary_path+"mke2fs" "target:/bin/m
    file_copy fullpliant_binary_path+"tune2fs" "target:/bin/
  status := install_check_libraries "target:/bin/" "target:/
  if status=failure
    return


  pliant_multi_file_system dismount "target:/"
  console "done." eol
  status := success
  
export install_tree