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


function enumerate_partitions c partitions disks
  arg Data:Computer c ; arg_rw Dictionary partitions disks
  partitions := var Dictionary empty_dictionary
  disks := var Dictionary empty_dictionary
  each pa c:env:"partition"
    var Pointer:DiskPartition p :> partitions kmap pa:"devic
    p name := keyof pa
    p device := pa "device"
    p raid_devices := pa "raid_devices"
    p mountpoint := pa "mountpoint"
abstract
  [This module will install a ready to operate FullPliant sy


function enumerate_partitions c partitions disks
  arg Data:Computer c ; arg_rw Dictionary partitions disks
  partitions := var Dictionary empty_dictionary
  disks := var Dictionary empty_dictionary
  each pa c:env:"partition"
    var Pointer:DiskPartition p :> partitions kmap pa:"devic
    p name := keyof pa
    p device := pa "device"
    p raid_devices := pa "raid_devices"
    p mountpoint := pa "mountpoint"
    pa:"size_mb" parse (var Int mb)
    if (pa:"size_mb" parse (var Int mb))
      p size := mb*2n^20
    p filesystem := shunt pa:"filesystem"<>"" pa:"filesystem
    p options := pa "options"
    disks kmap p:disk Str := p disk
    var Str devices := p raid_devices
    while devices<>""
      if not (devices parse any:(var Str device) _ any:(var 
        device := devices ; remain := ""
      p size := mb*2n^20
    p filesystem := shunt pa:"filesystem"<>"" pa:"filesystem
    p options := pa "options"
    disks kmap p:disk Str := p disk
    var Str devices := p raid_devices
    while devices<>""
      if not (devices parse any:(var Str device) _ any:(var 
        device := devices ; remain := ""
      var Str device := shunt (device search ":" -1)=(-1) "device:/"+device device
      var Pointer:DiskPartition p :> partitions kmap device 
      var Pointer:DiskPartition p :> partitions kmap device 
      p device := shunt (device search ":" -1)=(-1) "device:
      p device := device
      p filesystem := "raid"
      disks kmap p:disk Str := p disk
      devices := remain
  disks remove "device:/md" null


function install_partition c name
  arg Data:Computer c ; arg Str name
  enumerate_partitions c (var Dictionary partitions) (var Di
  each d disks type Str
    if d=name or name=""
      (var Array:DiskPartition a) size := 0
      p filesystem := "raid"
      disks kmap p:disk Str := p disk
      devices := remain
  disks remove "device:/md" null


function install_partition c name
  arg Data:Computer c ; arg Str name
  enumerate_partitions c (var Dictionary partitions) (var Di
  each d disks type Str
    if d=name or name=""
      (var Array:DiskPartition a) size := 0
      each p partitions type DiskPartition
        if p:disk=d
          a += p
      partition_create d a
      for (var Int i) 1 16
        each p partitions type DiskPartition
          if p:device=d+string:i # p:disk=d
            a += p
      if a:size>0
        partition_create d a



  file_tree_create "target:/bin/"
  file_tree_create "target:/dev/"
  file_tree_create "target:/proc/"
  file_tree_create "target:/tmp/"
  if medium="nfs" or medium="cdrom"
    file_tree_create "target:/mnt/target/"



  file_tree_create "target:/bin/"
  file_tree_create "target:/dev/"
  file_tree_create "target:/proc/"
  file_tree_create "target:/tmp/"
  if medium="nfs" or medium="cdrom"
    file_tree_create "target:/mnt/target/"
  if medium="cdrom" # get around a bug un raidtools
    (var Stream s) open "target:/etc/mtab" out+mkdir+safe
    s close
  file_tree_create security


  console "Resolving shared libraries dependencies" eol
  var (Dictionary Str Str) dlls
  (var DebianDistribution debian) bind c
  (var Stream log) open "file:/tmp/packages.log" out+safe
  (var Stream log2) open "file:/tmp/dll.log" out+safe
  each p c:env:"package"
    var Str name := keyof p
    if (debian unpack1 name p:"file" "file:/tmp/package/")=s
      var Str list := file_temporary
      if (execute "tar -zt -f "+file_os_name:"file:/tmp/pack
        (var Stream s) open list in+safe
        while not s:atend
          if (s:readline parse "." any:(var Str filename)) a
            var Str libpath := filename 0 (filename search_l
            var Str libname := filename (filename search_las
            if libpath="/lib/" or libpath="/usr/lib/"
              dlls insert libname string:name+" "+string:fil
      else
        console "Failed to list package " name eol
        log writeline name+": failed to list"
      file_delete list
    else
      console "Failed to unpack package " name eol
      log writeline name+": failed to unpack"
  each p c:env:"package"
    var Str name := keyof p
    var CBool some := false
    each f p
      if (keyof:f parse "/" any) and (f parse "/bin/" any)
        some := true
    if some
      if (debian unpack1 name p:"file" "file:/tmp/package/")
        file_tree_delete "file:/tmp/files/"
        file_extract "file:/tmp/package/data.tar.gz" "file:/
        each f p
  file_tree_create security


  console "Resolving shared libraries dependencies" eol
  var (Dictionary Str Str) dlls
  (var DebianDistribution debian) bind c
  (var Stream log) open "file:/tmp/packages.log" out+safe
  (var Stream log2) open "file:/tmp/dll.log" out+safe
  each p c:env:"package"
    var Str name := keyof p
    if (debian unpack1 name p:"file" "file:/tmp/package/")=s
      var Str list := file_temporary
      if (execute "tar -zt -f "+file_os_name:"file:/tmp/pack
        (var Stream s) open list in+safe
        while not s:atend
          if (s:readline parse "." any:(var Str filename)) a
            var Str libpath := filename 0 (filename search_l
            var Str libname := filename (filename search_las
            if libpath="/lib/" or libpath="/usr/lib/"
              dlls insert libname string:name+" "+string:fil
      else
        console "Failed to list package " name eol
        log writeline name+": failed to list"
      file_delete list
    else
      console "Failed to unpack package " name eol
      log writeline name+": failed to unpack"
  each p c:env:"package"
    var Str name := keyof p
    var CBool some := false
    each f p
      if (keyof:f parse "/" any) and (f parse "/bin/" any)
        some := true
    if some
      if (debian unpack1 name p:"file" "file:/tmp/package/")
        file_tree_delete "file:/tmp/files/"
        file_extract "file:/tmp/package/data.tar.gz" "file:/
        each f p
          if (keyof:f parse "/" any) and (f parse "/bin/" an
          if (keyof:f parse "/" any) and ((f parse "/bin/" any) or (f parse "/lib/" any))
            var List:Str libraries := file_libraries (file_o
            each lib libraries
              if exists:(dlls first lib) and ((dlls first li
                log2 writeline f+" requires "+lib+" in "+pac
                c "package" packname filename := "/lib/"+lib
              else
                console "Failed to find package containing l
                log writeline name+": find package containin


  if medium="cdrom"
    file_copy "data:/pliant/fullpliant/pci_device_listing1.t
    file_copy "data:/pliant/fullpliant/pci_device_listing2.t
            var List:Str libraries := file_libraries (file_o
            each lib libraries
              if exists:(dlls first lib) and ((dlls first li
                log2 writeline f+" requires "+lib+" in "+pac
                c "package" packname filename := "/lib/"+lib
              else
                console "Failed to find package containing l
                log writeline name+": find package containin


  if medium="cdrom"
    file_copy "data:/pliant/fullpliant/pci_device_listing1.t
    file_copy "data:/pliant/fullpliant/pci_device_listing2.t
    (var Stream s) open "target:/etc/mtab" out+mkdir+safe # get around a bug in raidtools and tune2fs
    s close

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

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