home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / lib / dpkg / methods / multicd / setup < prev    next >
Text File  |  1999-02-08  |  17KB  |  644 lines

  1. #!/bin/sh  
  2.  
  3. set -e
  4. vardir="$1"
  5. method=$2
  6. option=$3
  7.  
  8. test -d "$vardir/methods/$method" || mkdir "$vardir/methods/$method"
  9. cd "$vardir/methods/$method"
  10. tp=/tmp/ddm$$
  11.  
  12. iarch=`dpkg --print-installation-architecture`
  13. dist=stable
  14.  
  15. xit=1
  16. trap '
  17.     rm -f $tp.?
  18.     if [ -n "$umount" ]
  19.     then
  20.         umount "$umount" >/dev/null 2>&1
  21.     fi
  22.     exit $xit
  23. ' 0
  24.  
  25. if ls -d "$tp.?" >/dev/null 2>&1
  26. then
  27.     rm $tp.?
  28. fi
  29.  
  30. #debug() { echo "DEBUG: $@"; }
  31. debug() { true; }
  32. ismulti() { debug $1 $2; test -e "$1/.disk/info" || test -e "$1$2/.disk/info"; }
  33. getdisklabel () {
  34.     debug "$1" "$2"
  35.     if [ -f $1/.disk/info ]
  36.     then
  37.     echo -n `head -1 "$1/.disk/info"`
  38.     else
  39.     echo -n `head -1 "$1$2/.disk/info"`
  40.     fi
  41. }
  42.  
  43. yesno () {
  44.     while true
  45.     do
  46.         echo -n "$2 [$1]  "
  47.         read response
  48.         if [ -z "$response" ]
  49.         then
  50.             response="$1"
  51.         fi
  52.         case "$response" in
  53.         [Nn]*)    yesno=no ; return ;;
  54.         [Yy]*)    yesno=yes ; return ;;
  55.         esac
  56.     done
  57. }
  58.  
  59. getblockdev () {
  60.     mountpoint="$vardir/methods/mnt"
  61.     if [ -z "$defaultdevice" ]
  62.     then
  63.         defaultdevice="$newdefaultdevice"
  64.     elif [ "$defaultdevice" != "$newdefaultdevice" ]
  65.     then
  66.         echo \
  67.     "Last time you specified installation from $defaultdevice."
  68.     fi
  69.     promptstring="$1"
  70.     while [ -z "$blockdevice" ]
  71.     do
  72.         echo -n "$promptstring [$defaultdevice]:  "
  73.         read response
  74.         if [ -z "$response" ]
  75.         then
  76.             response="$defaultdevice"
  77.         fi
  78.         if [ ! -b "$response" ]
  79.         then
  80.             echo "$response is not a block device - will try as loopback.";
  81.             loop=",loop"
  82.         fi
  83.         tryblockdevice="$response"
  84.         if [ $option = multi_cd ]
  85.         then
  86.             fstype=iso9660
  87.         elif [ $option = harddisk2 ]
  88.         then
  89.             blockbase="`echo \"$tryblockdevice\" | sed -e 's/[0-9]\{1,\}$//'`"
  90.             set +e
  91.             echo -e "p\nq\n" | fdisk "$blockbase" 2>/dev/null >$tp.f
  92.             set -e
  93.             proposeddevice="$tryblockdevice" perl -ne '
  94. next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/;
  95. next unless s:^/\S+:: && $& eq $ENV{"proposeddevice"};
  96. next unless s/^ +(\* +)?\d+ +\d+ +\d+ +\d+\+? +//;
  97. next unless m/^([0-9a-f]{1,2}) /i;
  98. %types= ( "1","msdos", "4","msdos", "6","msdos", "7","hpfs", "80","minix",
  99.           "81","minix", "83","ext2" );
  100. print $types{$1}; exit(0);    ' <$tp.f >$tp.m
  101.             defaultfstype="`cat $tp.m`"
  102.             if [ -n "$defaultfstype" ]
  103.             then
  104.                 cat <<END
  105. The partition table for $blockbase claims that $tryblockdevice
  106. contains filesystem type $defaultfstype.
  107. END
  108.                 if ! grep "    $defaultfstype$" /proc/filesystems >/dev/null
  109.                 then
  110.                     echo \
  111.     "Your kernel does not appear to support that filesystem type."
  112.                     defaultfstype=""
  113.                 fi
  114.             fi
  115.             echo -n "Supported filesystems: "
  116.             sed -e 's/^.*    / /' /proc/filesystems | tr '\n' ' '
  117.             echo -n "
  118. Enter filesystem type (for $tryblockdevice) [$defaultfstype]:  "
  119.             read fstype
  120.             if [ -z "$fstype" ]
  121.             then
  122.                 fstype="$defaultfstype"
  123.             fi
  124.         fi
  125.         umount="$mountpoint"
  126.         if mount -rt "$fstype" -o nosuid,nodev$loop "$tryblockdevice" "$mountpoint"
  127.         then
  128.             echo
  129.             blockdevice="$tryblockdevice"
  130.         else
  131.             umount=""
  132.             echo \
  133.     "Unable to mount $tryblockdevice on $mountpoint, type $fstype."
  134.         fi
  135.     done
  136. }
  137.  
  138. outputparam () {
  139.     echo "$2" | sed -e "s/'/'\\\\''/; s/^/$1='/; s/$/'/" >&3
  140. }
  141.  
  142. ## MAIN
  143. intrkey="`stty -a | sed -n 's/.*intr = \([^;]*\);.*/\1/p'`"
  144. echo "
  145. If you make a mistake, use the interrupt key ($intrkey) to abort.
  146. "
  147.  
  148. # State variables, `best first'
  149. #  {main,ctb,nf,nonus,lcl}_{packages,binary}
  150. #   Empty before we've found them or if they're not available,
  151. #   set to the relevant bit under mountpoint otherwise.
  152. #  hierbase
  153. #   A directory containing a Debian FTP site mirror tree.
  154. #  mountpoint
  155. #   The mountpoint for the filesystem containing the stuff
  156. #   empty or unset if we don't know yet, or if we haven't mounted anything;
  157. #   may also be empty if `directory' was set.
  158. #  blockdevice
  159. #   The actual block device to mount.
  160. #  fstype
  161. #   The filesystem type to use.
  162. #  defaultdevice
  163. #   The default block device to mount.
  164.  
  165. p_usedevel=no
  166. if [ -f shvar.$option ]
  167. then
  168.     . ./shvar.$option
  169.     defaultdevice="$p_blockdev"
  170.     defaultnfsserver="$p_nfsserver"
  171.     defaultnfsrempath="$p_nfsrempath"
  172.     usedevel="$p_usedevel"
  173. fi
  174.  
  175. if [ $option = multi_cd ]
  176. then
  177.     mount >$tp.m
  178.     sed -n 's/ ([^)]*)$//; s/^[^ ]* on //; s/ type iso9660$//p' <$tp.m >$tp.l
  179.     ncdroms=`wc -l <$tp.l`
  180.     if [ $ncdroms -gt 1 ]
  181.     then
  182.         response=""
  183.         while [ -z "$response" ]
  184.         do
  185.             echo \
  186.     'Several CD-ROMs (or other ISO9660 filesystems) are mounted:'
  187.             egrep 'type iso9660 \([^)]*\)$' <$tp.m | nl
  188.             echo -n \
  189.     'Is it any of these ?  Type a number, or `n'\'' for none.  '
  190.             read response
  191.             response="`echo \"$response\" | sed -e 's/[     ]*$//'`"
  192.             if expr "$response" : '[0-9][0-9]*$' >/dev/null && \
  193.                [ $response -ge 1 -a $response -le $ncdroms ]
  194.             then
  195.                 mountpoint="`sed -n $response'p' <$tp.l`"
  196.                 echo
  197.             elif expr "$response" : '[Nn]' >/dev/null
  198.             then
  199.                 mountpoint=""
  200.             else
  201.                 response=""
  202.             fi
  203.         done
  204.     elif [ $ncdroms = 1 ]
  205.     then
  206.         mountpoint="`cat $tp.l`"
  207.         perl -ne 'print if s/ type iso9660 \([^)]*\)$// && s/ on .*$//;' \
  208.             <$tp.m >$tp.d
  209.         blockdevice="`cat $tp.d`"
  210.         yesno yes \
  211.     "I see a CD-ROM: $blockdevice, mounted on $mountpoint.  Is it the right one ?"
  212.         if [ $yesno = no ]
  213.         then
  214.             echo 'Unmounting it ...'
  215.             umount="$mountpoint"
  216.             while true
  217.             do
  218.                 echo -n \
  219.     'Please insert the right disc, and hit return:  '
  220.                 read response
  221.                 if mount -rt iso9660 -o nosuid,nodev \
  222.                     "$blockdevice" "$mountpoint"
  223.                 then
  224.                     echo
  225.                     break
  226.                 fi
  227.             done
  228.         fi
  229.     fi
  230.     if [ -z "$mountpoint" ]
  231.     then
  232.         if [ -b /dev/cdrom ]
  233.         then
  234.             echo \
  235.     'I see that /dev/cdrom exists and is a block device.'
  236.             newdefaultdevice=/dev/cdrom
  237.         fi
  238.         getblockdev 'Insert the CD-ROM and enter the block device name'
  239.     fi
  240. fi
  241.  
  242. if [ $option = multi_nfs ]
  243. then
  244.     mountpoint="$vardir/methods/mnt"
  245.     while [ -z "$nfsserver" ]
  246.     do
  247.         echo -n \
  248. "What is the name of the NFS server ? [$defaultnfsserver]  "
  249.         read response
  250.         if [ -z "$response" -a -n "$defaultnfsserver" ]
  251.         then
  252.             response="$defaultnfsserver"
  253.         fi
  254.         if [ -z "$response" ]; then continue; fi
  255.         if [ -x /usr/bin/rpcinfo ]
  256.         then
  257.             if rpcinfo -u "$response" mountd >/dev/null
  258.             then
  259.                 nfsserver="$response"
  260.             else
  261.                 echo "$response appears not to be an NFS server."
  262.             fi
  263.         elif [ -x /bin/ping ]
  264.         then
  265.             if ping -q -c 1 "$response" | grep -q ', 1 packets received'
  266.             then
  267.                 nfsserver="$response"
  268.             else
  269.                 echo "$response appears to be down or nonexistent."
  270.             fi
  271.         else
  272.             echo \
  273. "(I can't check that now because there is no /usr/bin/rpcinfo or /bin/ping.)"
  274.             nfsserver="$response"
  275.         fi
  276.     done
  277.     while [ -z "$nfsrempath" ]
  278.     do
  279.         echo -n "
  280. What is the pathname on the NFS server of the filesystem with
  281. the Debian files ? [$defaultnfsrempath]  "
  282.         read response
  283.         if [ -z "$response" -a -n "$defaultnfsrempath" ]
  284.         then
  285.             response="$defaultnfsrempath"
  286.         else
  287.             response="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`"
  288.         fi
  289.         umount="$mountpoint"
  290.         if mount -rt nfs -o nosuid,nodev "$nfsserver:$response" "$mountpoint"
  291.         then
  292.             echo
  293.             nfsrempath="$response"
  294.         else
  295.             umount=""
  296.             echo \
  297. "Unable to mount NFS filesystem $nfsserver:$response."
  298.         fi
  299.     done
  300.     nfs="$nfsserver:$nfsrempath"
  301. fi
  302.  
  303. if [ $option = harddisk2 ]
  304. then
  305.     set +e
  306.     echo -e 'p\nq\n' | fdisk /dev/hda 2>/dev/null >$tp.f
  307.     if [ $? != 0 ]
  308.     then
  309.         echo -e 'p\nq\n' | fdisk /dev/sda 2>/dev/null >$tp.f
  310.     fi
  311.     set -e
  312.     perl -ne '
  313. next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/;
  314. next unless / [146] +DOS \d+-bit \S+$/;
  315. next unless m:^/\S+:;
  316. print $&;        ' <$tp.f >$tp.d
  317.     newdefaultdevice="`cat $tp.d`"
  318.     echo "
  319. I need to know which disk partition contains the distribution files;
  320. disk partitions are specified by the block device name in Linux."
  321.     if [ -n "$newdefaultdevice" ]
  322.     then
  323.         echo \
  324. "By the way, $newdefaultdevice looks like a DOS partition."
  325.     fi
  326.     getblockdev "Enter the partition's block device name"
  327. fi
  328.  
  329. if [ -n "$mountpoint" ]
  330. then
  331.     # We must have $mountpoint
  332.     if [ $option = multi_cd ]
  333.     then
  334.         echo \
  335. 'All directory names should be entered relative to the root of the CD-ROM.
  336. '
  337.     elif [ $option = multi_nfs ]
  338.     then
  339.         echo \
  340. "All directory names should be entered relative to the root of the NFS
  341. filesystem, ie relative to $nfsrempath on the server.
  342. "
  343.     else
  344.         echo \
  345. "All directory names should be entered relative to the root of the
  346. $fstype filesystem on $blockdevice.
  347. "
  348.     fi
  349. fi
  350.  
  351. # now try to get the users idea where the debian
  352. # hierarchy start below the mointpoint
  353.  
  354. debug "mountpoint: $mountpoint"
  355. while true
  356. do
  357.     if ismulti "${mountpoint}" "${hierbase}"; then
  358.         multi=yes
  359.     fi
  360.  
  361.     if [ $option = multi_cd ]
  362.     then
  363.         echo \
  364. "I would like to know where on the CD-ROM the top level of the Debian
  365. distribution is - this will usually contain the \`dists' directory.
  366.  
  367. If the CD-ROM is badly organised and doesn't have a straightforward copy of
  368. the distribution you may answer \`none' and we'll go through the parts
  369. I need individually."
  370.     else
  371.         echo \
  372. "In order to make it easy for me to find the relevant files I'd ideally
  373. like to install from a straightforward copy of the Debian distribution.
  374. To use this I'll need to know where the top level of that copy of the
  375. distribution is - this directory usually contains the Packages-Master file.
  376.  
  377. If you do not have a straightforward copy of the distribution available
  378. just answer \`none' and we'll go through the parts I need individually."
  379.     fi
  380.  
  381.     defhierbase=none
  382.     if [ -n "$p_hierbase" ]; then
  383.         if [ -d "$mountpoint/$p_hierbase/dists/$dist/main/binary-$iarch" \
  384.             -o -n "$multi" ]; then
  385.             echo "Last time you said \`$p_hierbase', and that looks plausible."
  386.             defhierbase="$p_hierbase"
  387.         else
  388.             echo "
  389. Last time you said \`$p_hierbase', but that doesn't look plausible,
  390. since \`$p_hierbase/dists/$dist/main/binary-$iarch' doesn't seem to exist.
  391. And I can't get the impression that you're using a multi-CD  set."
  392.         fi
  393.     fi
  394.  
  395.     # at this point defhierbase is set if it looks plausible
  396.     # if `none' was entered, we assume a CD with a debian/ directory
  397.  
  398.     if [ none = "$defhierbase" -a -d "$mountpoint/debian/dists/$dist/main/binary-$iarch" ]
  399.     then
  400.         echo "\`/debian' exists and looks plausible, so that's the default."
  401.         defhierbase=/debian
  402.     fi
  403.  
  404.     echo -n "Distribution top level ? [$defhierbase]  "
  405.     read response
  406.     if [ -z "$response" ]; then response="$defhierbase"; fi
  407.     if [ none = "$response" ]; then
  408.         hierbase=""
  409.         break
  410.     elif ismulti "$mountpoint" "$response" && [ -z "$multi" ]; then
  411.         multi=yes
  412.     fi
  413.  
  414.     if ! [ -d "$mountpoint/$response/dists/$dist/main/binary-$iarch" \
  415.             -o -n "$multi" ]; then
  416.         echo \
  417. "Neither $response/dists/$dist/main/binary-$iarch does not exist,
  418. nor are you using a multi-CD set"
  419.         break
  420.     fi
  421.  
  422.     hierbase="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:; s:/\+:/:g;'`"
  423.     debug "hierbase: [$hierbase]"
  424.  
  425.     if [ -n "$multi" ]; then
  426.         disklabel=`getdisklabel "$mountpoint" "/$response"`
  427.         echo "Ok, this is $disklabel."
  428.         #echo "Updating multi CD contents file cache ..."
  429.         #multi_contentsfile="${mountpoint}/${response}/.disk/contents.gz"
  430.         #zcat "$multi_contentsfile" > disk-contents.$option
  431.     fi
  432.  
  433.     break;
  434. done
  435.  
  436. distribution=$dist
  437. if [ -n "$hierbase" ]
  438. then
  439.     if [ -d "$mountpoint/$hierbase/dists/unstable/binary-$iarch" ]
  440.     then
  441.         echo \
  442. '
  443. Both a stable released distribution and a work-in-progress
  444. development tree are available for installation.  Would you like to
  445. use the unreleased development tree (this is only recommended for
  446. experts who like to live dangerously and want to help with testing) ?'
  447.         yesno "$p_usedevel" 'Use unreleased development distribution ?'
  448.         usedevel="$yesno"
  449.         if [ "$usedevel" = yes ]
  450.         then
  451.             distribution=development
  452.         fi
  453.     else
  454.         usedevel=no
  455.     fi
  456.     echo
  457. fi
  458.  
  459. case "$hierbase" in
  460. /* )    ;;
  461. '' )    ;;
  462. * )    hierbase="/$hierbase" ;;
  463. esac
  464.  
  465. check_binary () {
  466.     # args: area-in-messages directory
  467.     debug "check_binary($@)"
  468.     
  469.     if [ ! -d "${mountpoint}$2" -a -z "$multi" ]
  470.     then
  471.         echo "\`$2' does not exist."
  472.         return
  473.     fi
  474.  
  475. # In this special case it is ok for a sub-distribution to not contain any
  476. # .deb files.  Each CD should contain all Packages.cd files but doesn't
  477. # need to contain the .deb files.
  478. #
  479. #      if ! { find "$mountpoint$2" -follow -name '*.deb' -print \
  480. #          | head -1 | grep . ; } >/dev/null 2>&1 && [ -z "$multi" ];
  481. #      then
  482. #          echo "\`$2' does not contain any *.deb packages."
  483. #          return
  484. #      fi
  485.  
  486.     this_binary="$2"
  487.     echo "Using \`$this_binary' as $1 binary dir"
  488.  
  489.     if [ -n "$multi" ]; then
  490.         this_disk=`getdisklabel ${mountpoint} "/$hierbase"`
  491.         echo "      from disk \`$this_disk'"
  492.     fi
  493. }
  494.  
  495. find_area () {
  496.     # args: area-in-messages area-in-vars subdirectory-in-hier
  497.     #       last-time-binary last-time-packages
  498.     debug "find_area($@)"
  499.     this_binary=''
  500.     this_packages=''
  501.     this_disk=''
  502.     if [ -n "$hierbase" ]
  503.     then
  504.         check_binary $1 `echo "$hierbase/dists/$3/$1/binary-$iarch" | sed 's:/\+:/:g'`
  505.         debug "THIS_BINARY $this_binary"
  506.     fi
  507.     if [ $option = multi_cd -a $2 = nf -a -z "$this_binary" ]
  508.     then
  509.         echo '
  510. Note: most CD-ROM distributions of Debian do not include programs
  511. available in the `non-free'\'' directory of the distribution site.
  512. This is because these programs have copyrights that prevent
  513. distribution for profit on a CD-ROM - ie they are not free software.
  514. If you wish to install these programs you'\''ll have to get them from an
  515. alternative source.'
  516.     fi
  517.     while [ -z "$this_binary" ]
  518.     do
  519.         defaultbinary="$4"
  520.         echo "
  521. Which directory contains the *.deb packages from the $1 distribution
  522. area (this directory is named \`$3/binary' on the distribution site) ?
  523. Say \`none' if this area is not available."
  524.         if [ $2 != main -a -z "$defaultbinary" ]
  525.         then
  526.             defaultbinary=none
  527.         fi
  528.         echo -n \
  529. "Enter _$1_ binary dir. [$4]
  530.  ?  "
  531.         read response
  532.         if [ -z "$response" -a -n "$defaultbinary" ]
  533.         then
  534.             response="$defaultbinary"
  535.         fi
  536.         if [ none = "$response" ]
  537.         then
  538.             break
  539.         fi
  540.         case "$response" in
  541.         '' | none)    continue        ;;
  542.         esac
  543.         check_binary $1 "`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`"
  544.     done
  545.     if [ -n "$this_binary" ]
  546.     then
  547.         if [ "$multi" = "yes" ]; then
  548.             for f in Packages.cd.gz packages.cd.gz Packages.cd packages.cd
  549.             do
  550.                 if [ -f "$mountpoint/$this_binary/$f" ]
  551.                 then
  552.                     this_packages="$this_binary/$f"
  553.                     echo "Using \`$this_packages' for $1."
  554.                     break
  555.                 fi
  556.             done
  557.         else 
  558.             if [ -f "${mountpoint}${hierbase}/.disk/packages/$1/Packages.gz" ]; then
  559.                 this_packages=`echo "${hierbase}/.disk/packages/$1/Packages.gz"|sed 's:/\+:/:g'`
  560.                 echo "Using \`${this_packages}' for $1."
  561.             fi
  562.         fi
  563.         while [ -z "$this_packages" ]
  564.         do
  565.             echo -n "
  566. I can't find the $1 \`Packages.cd' file.  The information in the
  567. \`Packages.cd' file is important for package selection during new
  568. installations, and is very useful for upgrades.
  569.  
  570. If you overlooked it when downloading you should do get it now and
  571. return to this installation procedure when you have done so: you will
  572. find one Packages.cd file and one Packages.cd.gz file -- either will do --
  573. in the \`binary' subdirectory of each area on the FTP sites and
  574. CD-ROMs.  Alternatively (and this will be rather slow) I can scan the
  575. packages in the distribution area - say \`scan' if you want me to do so.
  576.  
  577. You need a separate Packages.cd file from each of the distribution areas
  578. you wish to install.
  579.  
  580. Where is the _$1_ \`Packages.cd' file (if none is available, say \`none')
  581. [$5]
  582.  ?  "
  583.             read response
  584.             if [ -z "$response" -a -n "$5" ]
  585.             then
  586.                 response="$5"
  587.             fi
  588.             case "$response" in
  589.             '')        break                ;;
  590.             none)        break                ;;
  591.             scan)        this_packages=scan        ;;
  592.             /*)        this_packages="$response"    ;;
  593.             *)        this_packages="/$response"    ;;
  594.             esac
  595.         done
  596.     fi
  597.     eval $2'_binary="$this_binary"'
  598.     eval $2'_packages="$this_packages"'
  599.     eval $2'_disk="$this_disk"'
  600. }
  601.  
  602. find_area main main "$distribution" "$p_main_binary" "$p_main_packages"
  603. find_area contrib ctb "$distribution" "$p_ctb_binary" "$p_ctb_packages"
  604. find_area non-free nf "$distribution" "$p_nf_binary" "$p_nf_packages"
  605. find_area non-US nonus "$distribution" "$p_nonus_binary" "$p_nonus_packages"
  606. find_area local lcl local "$p_lcl_binary" "$p_lcl_packages"
  607.  
  608. echo -n '
  609. Hit RETURN to continue.  '
  610. read response
  611.  
  612. exec 3>shvar.$option.new
  613.  
  614. outputparam p_blockdev "$blockdevice"
  615. outputparam p_fstype "$fstype"
  616. outputparam p_mountpoint "$mountpoint"
  617. outputparam p_nfsserver "$nfsserver"
  618. outputparam p_nfsrempath "$nfsrempath"
  619. outputparam p_nfs "$nfs"
  620. outputparam p_hierbase "$hierbase"
  621. outputparam p_usedevel "$usedevel"
  622. outputparam p_main_packages "$main_packages"
  623. outputparam p_main_binary "$main_binary"
  624. outputparam p_main_disk "$main_disk"
  625. outputparam p_ctb_packages "$ctb_packages"
  626. outputparam p_ctb_binary "$ctb_binary"
  627. outputparam p_ctb_disk "$ctb_disk"
  628. outputparam p_nf_packages "$nf_packages"
  629. outputparam p_nf_binary "$nf_binary"
  630. outputparam p_nf_disk "$nf_disk"
  631. outputparam p_nonus_binary "$nonus_binary"
  632. outputparam p_nonus_packages "$nonus_packages"
  633. outputparam p_nonus_disk "$nonus_disk"
  634. outputparam p_lcl_packages "$lcl_packages"
  635. outputparam p_lcl_binary "$lcl_binary"
  636. outputparam p_multi "$multi"
  637. outputparam p_multi_contentsfile "$multi_contentsfile"
  638.  
  639. mv shvar.$option.new shvar.$option
  640.  
  641. xit=0
  642.  
  643. # vim:ts=4:sw=4:aw:ai:
  644.