Patch title: Release 90 bulk changes
Abstract:
File: /fullpliant/embedded/install.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
submodule "/pliant/fullpliant/computer.pli"
module "/pliant/fullpliant/debian.pli"
module "/pliant/linux/kernel/device.pli"
module "configure.pli"
module "compile.pli"


constant debian_user (shunt secured 1234 0)
constant debian_group (shunt secured 1234 0)
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream/pipe.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
submodule "/pliant/fullpliant/computer.pli"
module "/pliant/fullpliant/debian.pli"
module "/pliant/linux/kernel/device.pli"
module "configure.pli"
module "compile.pli"


constant debian_user (shunt secured 1234 0)
constant debian_group (shunt secured 1234 0)
constant configure_timeout 15






function process_kill_user uid
  arg Int uid
  var Array:FileInfo all := file_list "file:/proc/" standard+relative+directories
  for (var Int i) 0 all:size-1
    if (all:i:name parse (var Int pid) "/")
      (var Stream s) open "file:/proc/"+string:pid+"/status" in+safe
      var Str name := "" ; var Int ppid := undefined
      while not s:atend
        var Str l := s readline
        if (l parse "Name:" any:(var Str str))
          name := str
        if (l parse "Uid:" (var Int num) any) and num=uid
          console "killing " name eol
          os_kill pid os_SIGKILL


function embedded_debian_configure c -> status
  arg_rw Data:Computer c ; arg Status status
  # remove inetd (who knows what it may launch)
  file_delete "target:/usr/sbin/inetd"
  # packages list
  if (file_query "target:/var/lib/dpkg/available" standard)=
    (var Stream s) open "target:/var/lib/dpkg/available" out
    s close
  # dynamic libraries
  file_move "target:/sbin/ldconfig.new" "target:/sbin/ldconf
  if (file_query "target:/etc/ld.so.conf" standard)=undefine
    (var Stream s) open "target:/etc/ld.so.conf" out
    s writeline "/usr/X11R6/lib"
    s writeline "/usr/local/lib"
  # sh
  if (file_query "target:/bin/sh" standard)=undefined
    file_link "file:bash" "target:/bin/sh"
  # awk
  if (file_query "target:/usr/bin/awk" standard)=undefined
    file_link "file:/usr/bin/mawk" "target:/usr/bin/awk"
  # perl
  if (file_query "target:/usr/bin/perl" extended)=undefined
    var Array:FileInfo files := file_list "target:/usr/bin/"
    for (var Int i) 0 files:size-1
      if (files:i:name parse "perl" (var Float f))
        file_link "file:/usr/bin/"+files:i:name "target:/usr
  if secured
    var Int count := 0
    count += file_switch_owner (file_query "target:/" extend
    var Array:FileInfo files := file_list "target:/" extende
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i 0 0 debian_user deb
    console "changed owner of " count " files" eol
  # generate devices
  if not secured
    execute "MAKEDEV generic" path "target:/dev/"
  kernel_make_device "target:/dev/null"
  if (exists c:env:"package":"libraw1394-5")
    kernel_make_device "target:/dev/raw1394"
  if false # these should be configured by Debian dpkg but a
    # tk
    execute "update-alternatives --install /usr/bin/tclsh tc
    # mozilla
    execute "update-mozilla-chrome" root "target:/" path "ta
    var Array:FileInfo files := file_list "target:/usr/bin/"
    for (var Int i) 0 files:size-1
      files:i:name parse "mozilla-bin-" any:(var Str mozilla
    execute "update-alternatives --install /usr/bin/mozilla 
  # now run Debian packages configuration scripts
  status := embedded_packages_configure c
  if secured
    for (var Int lap) 1 5
      var Array:FileInfo files := file_list "target:/var/lib
      for (var Int i) 0 files:size-1
        if files:i:extension=".preinst"
          console "installing " files:i:stripped_name " (lap
          execute "/var/lib/dpkg/info/"+files:i:stripped_nam
      for (var Int i) 0 files:size-1
        if files:i:extension=".postinst"
          console "configuring " files:i:stripped_name " (la
function embedded_debian_configure c -> status
  arg_rw Data:Computer c ; arg Status status
  # remove inetd (who knows what it may launch)
  file_delete "target:/usr/sbin/inetd"
  # packages list
  if (file_query "target:/var/lib/dpkg/available" standard)=
    (var Stream s) open "target:/var/lib/dpkg/available" out
    s close
  # dynamic libraries
  file_move "target:/sbin/ldconfig.new" "target:/sbin/ldconf
  if (file_query "target:/etc/ld.so.conf" standard)=undefine
    (var Stream s) open "target:/etc/ld.so.conf" out
    s writeline "/usr/X11R6/lib"
    s writeline "/usr/local/lib"
  # sh
  if (file_query "target:/bin/sh" standard)=undefined
    file_link "file:bash" "target:/bin/sh"
  # awk
  if (file_query "target:/usr/bin/awk" standard)=undefined
    file_link "file:/usr/bin/mawk" "target:/usr/bin/awk"
  # perl
  if (file_query "target:/usr/bin/perl" extended)=undefined
    var Array:FileInfo files := file_list "target:/usr/bin/"
    for (var Int i) 0 files:size-1
      if (files:i:name parse "perl" (var Float f))
        file_link "file:/usr/bin/"+files:i:name "target:/usr
  if secured
    var Int count := 0
    count += file_switch_owner (file_query "target:/" extend
    var Array:FileInfo files := file_list "target:/" extende
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i 0 0 debian_user deb
    console "changed owner of " count " files" eol
  # generate devices
  if not secured
    execute "MAKEDEV generic" path "target:/dev/"
  kernel_make_device "target:/dev/null"
  if (exists c:env:"package":"libraw1394-5")
    kernel_make_device "target:/dev/raw1394"
  if false # these should be configured by Debian dpkg but a
    # tk
    execute "update-alternatives --install /usr/bin/tclsh tc
    # mozilla
    execute "update-mozilla-chrome" root "target:/" path "ta
    var Array:FileInfo files := file_list "target:/usr/bin/"
    for (var Int i) 0 files:size-1
      files:i:name parse "mozilla-bin-" any:(var Str mozilla
    execute "update-alternatives --install /usr/bin/mozilla 
  # now run Debian packages configuration scripts
  status := embedded_packages_configure c
  if secured
    for (var Int lap) 1 5
      var Array:FileInfo files := file_list "target:/var/lib
      for (var Int i) 0 files:size-1
        if files:i:extension=".preinst"
          console "installing " files:i:stripped_name " (lap
          execute "/var/lib/dpkg/info/"+files:i:stripped_nam
      for (var Int i) 0 files:size-1
        if files:i:extension=".postinst"
          console "configuring " files:i:stripped_name " (la
          var Link:CBool done :> new CBool false
          var Link:CBool ack :> new CBool false
          var Float slice := 0.025
          thread
            var Int counter := 0
            while not done and counter<(cast configure_timeout/slice Int)
              sleep slice
              counter += 1
            if not done
              process_kill_user debian_user
            ack := true
          execute "/var/lib/dpkg/info/"+files:i:stripped_nam
          execute "/var/lib/dpkg/info/"+files:i:stripped_nam
          done := true
          while not ack
            sleep slice
      process_kill_user debian_user
  # cleanup
  file_delete "target:/initrd/"
  file_delete "target:/cdrom/"
  file_delete "target:/floppy/"
  if secured
    var Int count := 0
    count += file_switch_owner (file_query "target:/" extend
    var Array:FileInfo files := file_list "target:/" extende
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i debian_user debian_
    console "reverted owner of " count " files" eol



  # cleanup
  file_delete "target:/initrd/"
  file_delete "target:/cdrom/"
  file_delete "target:/floppy/"
  if secured
    var Int count := 0
    count += file_switch_owner (file_query "target:/" extend
    var Array:FileInfo files := file_list "target:/" extende
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i debian_user debian_
    console "reverted owner of " count " files" eol