Patch title: Release 89 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"

public
  constant fullpliant_custom_path "file:/fullpliant/custom/"
constant force_nonintractive true
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"

public
  constant fullpliant_custom_path "file:/fullpliant/custom/"
constant force_nonintractive true
constant secured true


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



function unix_service_pids name -> pids
  arg Str name ; arg Str pids
  pids := ""
  var Array:FileInfo files := file_list "file:/proc/" standa
  for (var Int i) 0 files:size-1
    if (files:i:name parse (var Int pid) "/")
      (var Stream s) open "file:/proc/"+string:pid+"/cmdline
      var Str cmd := s readline
      cmd := cmd 0 (cmd search "[0]" cmd:len)
      if cmd=name
        pids += " "+string:pid+" "


function auto_answer c package0 cmd log -> err
  arg_rw Data:Computer c ; arg Str package0 cmd ; arg_rw Str
  stream_pipe (var Str kbd_in) (var Str kbd_out)
  stream_pipe (var Str con_in) (var Str con_out)
  (var FastSem sem) request
  thread
    share sem log
    var Str kbd_layout := c:env:"hardware":"keyboard":"layou
    (var Stream con) open con_in in+safe
    (var Stream kbd) open kbd_out out+linecache+safe
    var Str package := package0 ; var Int counter := 0
    while not con:atend
      con configure "timeout 2"
      var Str l := con readline
      con configure "timeout ?"
      if (l parse word:"Setting" word:"up" any:(var Str pkg)
        package := pkg ; counter := 0
      log writeline "   "+l ; console "   " l eol
      var Str a := "no answer"
      if (l parse any "?" any) or (l parse any "[lb]" any "[
        a := ""
      if pkg="console-tools"
        if (l parse "What keytable to load" any)
          if (kbd_layout parse any:(var Str head) "/" any:(v
            a := head ; kbd_layout := tail
          else
            a := kbd_layout ; kbd_layout := ""
        eif (l parse "Do you want to test the new keymap rig
          a := "n"
        eif (l parse any "Do you want changes to take effect
          a := "n"
      each r c:env:"package":package
        if (keyof:r parse "question" any:(var Str id)) and (
          a := c:env:"package":package "answer"+id
      counter += 1
      if a="no answer" and counter%60=0
        if counter%180=0
          a := "1"
        eif counter%180=120
          a := "no"
        else
          a := ""
      if a<>"no answer"
        log writeline "-> "+a ; console "-> " a eol
        kbd writeline a
    sem release 
function unix_service_pids name -> pids
  arg Str name ; arg Str pids
  pids := ""
  var Array:FileInfo files := file_list "file:/proc/" standa
  for (var Int i) 0 files:size-1
    if (files:i:name parse (var Int pid) "/")
      (var Stream s) open "file:/proc/"+string:pid+"/cmdline
      var Str cmd := s readline
      cmd := cmd 0 (cmd search "[0]" cmd:len)
      if cmd=name
        pids += " "+string:pid+" "


function auto_answer c package0 cmd log -> err
  arg_rw Data:Computer c ; arg Str package0 cmd ; arg_rw Str
  stream_pipe (var Str kbd_in) (var Str kbd_out)
  stream_pipe (var Str con_in) (var Str con_out)
  (var FastSem sem) request
  thread
    share sem log
    var Str kbd_layout := c:env:"hardware":"keyboard":"layou
    (var Stream con) open con_in in+safe
    (var Stream kbd) open kbd_out out+linecache+safe
    var Str package := package0 ; var Int counter := 0
    while not con:atend
      con configure "timeout 2"
      var Str l := con readline
      con configure "timeout ?"
      if (l parse word:"Setting" word:"up" any:(var Str pkg)
        package := pkg ; counter := 0
      log writeline "   "+l ; console "   " l eol
      var Str a := "no answer"
      if (l parse any "?" any) or (l parse any "[lb]" any "[
        a := ""
      if pkg="console-tools"
        if (l parse "What keytable to load" any)
          if (kbd_layout parse any:(var Str head) "/" any:(v
            a := head ; kbd_layout := tail
          else
            a := kbd_layout ; kbd_layout := ""
        eif (l parse "Do you want to test the new keymap rig
          a := "n"
        eif (l parse any "Do you want changes to take effect
          a := "n"
      each r c:env:"package":package
        if (keyof:r parse "question" any:(var Str id)) and (
          a := c:env:"package":package "answer"+id
      counter += 1
      if a="no answer" and counter%60=0
        if counter%180=0
          a := "1"
        eif counter%180=120
          a := "no"
        else
          a := ""
      if a<>"no answer"
        log writeline "-> "+a ; console "-> " a eol
        kbd writeline a
    sem release 
  err := execute cmd root "target:/" path "target:/" input k
  err := execute cmd root "target:/" path "target:/" input kbd_in output con_out user debian_user group debian_group
  sem request ; sem release


  sem request ; sem release


function file_switch_owner info from_user from_group to_user to_group -> count
  arg FileInfo info ; arg Int from_user from_group to_user to_group ; arg Int count
  count := 0
  if (info:options option "uid" Int undefined)=from_user
    file_rights info:name to_user undefined 0 0 ; count += 1
  if (info:options option "gid" Int undefined)=from_group
    file_rights info:name undefined to_group 0 0

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
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:/" extended) 0 0 debian_user debian_group
    var Array:FileInfo files := file_list "target:/" extended+recursive+directories
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i 0 0 debian_user debian_group
    console "changed owner of " count " files" eol
  # generate devices
  # generate devices
  execute "MAKEDEV generic" path "target:/dev/"
  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
  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
    execute "update-alternatives --install /usr/bin/tclsh tclsh /usr/bin/tclsh8.0 800 --slave /usr/share/man/man1/tclsh.1.gz tclsh.1 /usr/share/man/man1/tclsh8.0.1.gz" root "target:/" path "target:/" user debian_user group debian_group
    # mozilla
    # mozilla
    execute "update-mozilla-chrome" root "target:/" path "ta
    execute "update-mozilla-chrome" root "target:/" path "target:/" user debian_user group debian_group
    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
    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 
    execute "update-alternatives --install /usr/bin/mozilla mozilla /usr/bin/mozilla-"+mozilla_version+" 50 --slave /usr/share/man/man1/mozilla.1.gz mozilla.1.gz /usr/share/man/man1/mozilla-"+mozilla_version+".1.gz --slave /usr/bin/mozilla-bin mozilla-bin /usr/bin/mozilla-bin-"+mozilla_version+" --slave /usr/share/man/man1/mozilla-bin.1.gz mozilla-bin.1.gz /usr/share/man/man1/mozilla-bin-"+mozilla_version+".1.gz" root "target:/" path "target:/" user debian_user group debian_group
  # now run Debian packages configuration scripts
  status := embedded_packages_configure c
  # 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/dpkg/info/" standard
      for (var Int i) 0 files:size-1
        if files:i:extension=".preinst"
          console "installing " files:i:stripped_name " (lap " lap ")" eol
          execute "/var/lib/dpkg/info/"+files:i:stripped_name+".preinst install" root "target:/" path "target:/" user debian_user group debian_group
      for (var Int i) 0 files:size-1
        if files:i:extension=".postinst"
          console "configuring " files:i:stripped_name " (lap " lap ")" eol
          execute "/var/lib/dpkg/info/"+files:i:stripped_name+".postinst configure" root "target:/" path "target:/" user debian_user group debian_group
  # cleanup
  file_delete "target:/initrd/"
  file_delete "target:/cdrom/"
  file_delete "target:/floppy/"
  # 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:/" extended) debian_user debian_group 0 0
    var Array:FileInfo files := file_list "target:/" extended+recursive+directories
    for (var Int i) 0 files:size-1
      count += file_switch_owner files:i debian_user debian_group 0 0
    console "reverted owner of " count " files" eol