<xmp><!-- <body><!--'"</title></head>--> <script type="text/javascript"> //OwnerIQ var __oiq_pct = 50; if( __oiq_pct>=100 || Math.floor(Math.random()*100/(100-__oiq_pct)) > 0 ) { var _oiqq = _oiqq || []; _oiqq.push(['oiq_addPageBrand','Lycos']); _oiqq.push(['oiq_addPageCat','Internet > Websites']); _oiqq.push(['oiq_addPageLifecycle','Intend']); _oiqq.push(['oiq_doTag']); (function() { var oiq = document.createElement('script'); oiq.type = 'text/javascript'; oiq.async = true; oiq.src = document.location.protocol + '//px.owneriq.net/stas/s/lycosn.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(oiq, s); })(); } //Google Analytics var _gaq = _gaq || []; _gaq.push(['_setAccount','UA-21402695-19']); _gaq.push(['_setDomainName','tripod.com']); _gaq.push(['_setCustomVar',1,'member_name','trcmdisk01',3]); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); //Lycos Init function getReferrer() { var all= this.document.cookie; if (all== '') return false; var cookie_name = 'REFERRER='; var start = all.lastIndexOf(cookie_name); if (start == -1) return false; start += cookie_name.length; var end = all.indexOf(';', start); if (end == -1) end = all.length; return all.substring(start, end); } function getQuery() { var rfr = getReferrer(); if (rfr == '') return false; var q = extractQuery(rfr, 'yahoo.com', 'p='); if (q) return q; q = extractQuery(rfr, '', 'q='); return q ? q : ""; } function extractQuery(full, site, q_param) { var start = full.lastIndexOf(site); if (start == -1) return false; start = full.lastIndexOf(q_param); if (start == -1) return false; start += q_param.length; var end = full.indexOf('&', start); if (end == -1) end = full.length; return unescape(full.substring(start, end)).split(" ").join("+"); } function generateHref(atag, template){ atag.href=template.replace('_MYURL_', window.location.href.replace('http://', '')).replace('_MYTITLE_','Check%20out%20this%20Tripod%20Member%20site!'); } var lycos_ad = Array(); var lycos_onload_timer; var cm_role = "live"; var cm_host = "tripod.lycos.com"; var cm_taxid = "/memberembedded"; var tripod_member_name = "trcmdisk01"; var tripod_member_page = "trcmdisk01/linux/s_xubuntu160401.html"; var tripod_ratings_hash = "1493374353:6edaa173ff164b9e243da71be333a45d"; var lycos_ad_category = null; var lycos_ad_remote_addr = "54.158.39.172"; var lycos_ad_www_server = "www.tripod.lycos.com"; var lycos_ad_track_small = "http://members.tripod.com/adm/img/common/ot_smallframe.gif?rand=940272"; var lycos_ad_track_served = "http://members.tripod.com/adm/img/common/ot_adserved.gif?rand=940272"; var lycos_search_query = getQuery(); </script> <script type="text/javascript" src="http://scripts.lycos.com/catman/init.js"></script> <script type='text/javascript'> var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; (function() { var gads = document.createElement('script'); gads.async = true; gads.type = 'text/javascript'; var useSSL = 'https:' == document.location.protocol; gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; var node = document.getElementsByTagName('script')[0]; node.parentNode.insertBefore(gads, node); })(); </script> <script type='text/javascript'> googletag.cmd.push(function() { googletag.defineSlot('/95963596/TRI_300X250_dfp', [300, 250], 'div-gpt-ad-1450204159126-0').addService(googletag.pubads()); googletag.defineSlot('/95963596/TRI_above_728x90_dfp', [728, 90], 'div-gpt-ad-1450204159126-1').addService(googletag.pubads()); googletag.defineSlot('/95963596/TRI_below_728x90_dfp', [728, 90], 'div-gpt-ad-1450204159126-2').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }); </script> <script type="text/javascript"> (function(isV) { if( !isV ) { return; } var adMgr = new AdManager(); var lycos_prod_set = adMgr.chooseProductSet(); var slots = ["leaderboard", "leaderboard2", "toolbar_image", "toolbar_text", "smallbox", "top_promo", "footer2", "slider"]; var adCat = this.lycos_ad_category; adMgr.setForcedParam('page', (adCat && adCat.dmoz) ? adCat.dmoz : 'member'); if (this.lycos_search_query) { adMgr.setForcedParam("keyword", this.lycos_search_query); } else if(adCat && adCat.find_what) { adMgr.setForcedParam('keyword', adCat.find_what); } for (var s in slots) { var slot = slots[s]; if (adMgr.isSlotAvailable(slot)) { this.lycos_ad[slot] = adMgr.getSlot(slot); } } adMgr.renderHeader(); adMgr.renderFooter(); }((function() { var w = 0, h = 0, minimumThreshold = 300; if (top == self) { return true; } if (typeof(window.innerWidth) == 'number' ) { w = window.innerWidth; h = window.innerHeight; } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { w = document.documentElement.clientWidth; h = document.documentElement.clientHeight; } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { w = document.body.clientWidth; h = document.body.clientHeight; } return ((w > minimumThreshold) && (h > minimumThreshold)); }()))); window.onload = function() { var f = document.getElementById("FooterAd"); var b = document.getElementsByTagName("body")[0]; b.appendChild(f); f.style.display = "block"; document.getElementById('lycosFooterAdiFrame').src = '/adm/ad/footerAd.iframe.html'; // DOM Inj Ad (function(isTrellix) { var e = document.createElement('iframe'); e.style.border = '0'; e.style.margin = 0; e.style.display = 'block'; e.style.cssFloat = 'right'; e.style.height = '254px'; e.style.overflow = 'hidden'; e.style.padding = 0; e.style.width = '300px'; var isBlokedByDomain = function( href ) { var blockedDomains = [ "ananyaporn13000.tripod.com", "xxxpornxxx.tripod.com" ]; var flag = false; for( var i=0; i<blockedDomains.length; i++ ) { if( href.search( blockedDomains[ i ] ) >= 0 ) { flag = true; } } return flag; } var getMetaContent = function( metaName ) { var metas = document.getElementsByTagName('meta'); for (i=0; i<metas.length; i++) { if( metas[i].getAttribute("name") == metaName ) { return metas[i].getAttribute("content"); } } return false; } var getCommentNodes = function(regexPattern) { var nodes = {}; var nodesA = []; var preferredNodesList = ['a', 'c', 'b']; (function getNodesThatHaveComments(n, pattern) { if (n.hasChildNodes()) { if (n.tagName === 'IFRAME') { return false; } for (var i = 0; i < n.childNodes.length; i++) { if ((n.childNodes[i].nodeType === 8) && (pattern.test(n.childNodes[i].nodeValue))) { var areaName = pattern.exec(n.childNodes[i].nodeValue)[1]; nodes[areaName] = n; } else if (n.childNodes[i].nodeType === 1) { getNodesThatHaveComments(n.childNodes[i], pattern); } } } }(document.body, regexPattern)); for (var i in preferredNodesList) { if (nodes[preferredNodesList[i]]) { if( isTrellix && nodes[preferredNodesList[i]].parentNode.parentNode.parentNode.parentNode ) { nodesA.push(nodes[preferredNodesList[i]].parentNode.parentNode.parentNode.parentNode); } else { nodesA.push( nodes[preferredNodesList[i]] ); } } } return nodesA; } var properNode = null; var areaNodes = getCommentNodes( new RegExp( '^area Type="area_(\\w+)"' ) ); for (var i = 0; i < areaNodes.length; i++) { var a = parseInt(getComputedStyle(areaNodes[i]).width); if ((a >= 300) && (a <= 400)) { properNode = areaNodes[i]; break; } } var propertyName = getMetaContent("property") || false; if( isTrellix && (properNode) ) { e.src = '/adm/ad/injectAd.iframe.html'; properNode.insertBefore(e, properNode.firstChild); } else if( isTrellix && !( properNode ) ) // Slap the ad eventhought there is no alocated slot { e.src = '/adm/ad/injectAd.iframe.html'; e.style.cssFloat = 'none'; var cdiv = document.createElement('div'); cdiv.style = "width:300px;margin:10px auto;"; cdiv.appendChild( e ); b.insertBefore(cdiv, b.lastChild); } else if( !isBlokedByDomain( location.href ) ) { var injF = document.createElement('iframe'); injF.style.border = '0'; injF.style.margin = 0; injF.style.display = 'block'; injF.style.cssFloat = 'none'; injF.style.height = '254px'; injF.style.overflow = 'hidden'; injF.style.padding = 0; injF.style.width = '300px'; injF.src = '/adm/ad/injectAd.iframe.html'; if( b && ( !isTrellix || ( typeof isTrellix == "undefined" ) ) ) // All other tripod props { var cdiv = document.createElement('div'); cdiv.style = "width:300px;margin:10px auto;"; cdiv.appendChild( injF ); b.insertBefore(cdiv, b.lastChild); } } }( document.isTrellix )); } </script> <div id="tb_container" style="background:#DFDCCF; border-bottom:1px solid #393939; position:relative; z-index:999999999!important"> <!--form name="search" onSubmit="return searchit()" id='header_search' > <input type="text" placeholder="Search" size=30 name="search2" value=""> <input type="button" value="Go!" onClick="searchit()"> </form> <style> form#header_search { width: 916px; margin: 0 auto 8px; position: relative; } form#header_search input { height: 40px; font-size: 14px; line-height: 40px; padding: 0 8px; box-sizing: border-box; background: #F4F2E9; border: 1px solid #BBB8B8; transition: background-color 300ms ease-out, color 300ms ease; } form#header_search input[type="text"] { width: 100%; } form#header_search input[type="text"]:focus { border-color: #A2D054; background-color: #fff; box-shadow: 0 0px 12px -4px #A2D054; } form#header_search input[type="button"] { position: absolute; top: 1px; right: 1px; opacity: 1; background: #DFDCCF; color: #463734; width: 125px; cursor: pointer; height: 38px; border: none; } form#header_search input[type="text"]:focus ~ input[type='button']:hover, form#header_search input[type='button']:hover { background-color: #A5CE56; color: #fff; } form#header_search input[type="text"]:focus ~ input[type='button'] { background-color: #52AEDF; color: #fff; } </style> <script> function searchit(){ // determine environment var search_env if (lycos_ad_www_server.indexOf(".pd.") > -1) { search_env = 'http://search51.pd.lycos.com/a/'; } else if (lycos_ad_www_server.indexOf(".qa.") > -1) { search_env = 'http://search51.qa.lycos.com/a/'; } else { search_env = 'http://search51.lycos.com/a/'; } var search_term = encodeURIComponent(document.search.search2.value) var search_url = search_env+search_term; window.open(search_url); return false } </script--> <style> .adCenterClass{margin:0 auto} </style> <div id="tb_ad" class="adCenterClass" style="display:block!important; overflow:hidden; width:916px;"> <a href="http://adtrack.ministerial5.com/clicknew/?a=637394" title="build your own website at Tripod.com" style="float:left; width:186px; border:0"> <img src="http://ly.lygo.com/ly/tpSite/images/freeAd2.jpg" alt="Make your own free website on Tripod.com" style="border:0; display:block" /> </a> <div id="ad_container" style="display:block!important; float:left; width:728px "> <script type="text/javascript">document.write(lycos_ad['leaderboard']);</script> </div> </div> </div> <script type="text/javascript">document.write(lycos_ad['slider']);</script> <!-- added 7/22 --> <div id="FooterAd" style="background:#DFDCCF; border-top:1px solid #393939; clear:both; display:none; width:100%!important; position:relative; z-index:999999!important; height:90px!important"> <div class="adCenterClass" style="display:block!important; overflow:hidden; width:916px;"> <a href="http://adtrack.ministerial5.com/clicknew/?a=637394" title="build your own website at Tripod.com" style="float:left; display:block; width:186px; border:0"> <img src="http://ly.lygo.com/ly/tpSite/images/freeAd2.jpg" alt="Make your own free website on Tripod.com" style="border:0; display:block; " /> </a> <div id="footerAd_container" style="display:block!important; float:left; width:728px"> <iframe id="lycosFooterAdiFrame" style="border:0; display:block; float:left; height:96px; overflow:hidden; padding:0; width:750px"></iframe> </div> </div> </div> --></xmp>


Linux logo

Xubuntu User Scripting.

zkp :: FDF/SSP


+++ zkp
#!/bin/sh
#========

# Screaming CuckooBroad Associates 2015 -=[zkp]=- for Xubuntu 15.04 (Linux 3.19.0)
# resides in /usr/bin (in ${PATH} for all users)
# usage: $(zkp) alone globally returns kpZone path; any parm runs the editor

  KPU=/etc/kpzone/kData/unx
# KPU=/opt/bin/kpZone/kData/unx
# KPU=/home/tux/kpZone/kData/unx
# KPU=/home/guest/kpZone/kData/unx
# KPU=/data/data/jackpal.androidterm

# [ -z $1 ] && echo -n ${KPU} || exec ue $@
  [ -z $1 ] && echo -n ${KPU} || xterm -e ue $@
# [ -z $1 ] && echo -n ${KPU} || urxvt -T microemacs -e ue $@
# [ -z $1 ] && echo -n ${KPU} || lxterminal -T microemacs -e ue $@
# [ -z $1 ] && echo -n ${KPU} || xfce4-terminal -T microemacs -I slackware -e "ue $@"

exit 0


+++ FDF/SSP
======================================================
FDF/SSP: FrugalDriver Framework with SSP for GNU/Linux
======================================================
One simple rule: never install anything, except GRUB2 because its a bootloader. FDF/SSP is not a product nor a process, its a strategy. Here it is illustrated using an ordinary Debian derived distro, Xubuntu 16.04.

(1) Create a partition somewhere for the ISO. Place the ISO on it as a regular file & use GRUB2 to boot it live. With many sane distros this simply involves digging out the kernel/initrd & mounting the embedded monolithic squashfs image. Stanza from the /boot/grub/grub.cfg:

menuentry  ">> Xubuntu 16.04 64bit from ISO (loop ISF)" {
    echo ooo
    set isofile="xubuntu-16.04-desktop-amd64.iso"
    loopback aloop (hd0,5)/ini_xubuntu/$isofile
    linux  (aloop)/casper/vmlinuz.efi selinux=0 boot=casper live-media-path=/casper iso-scan/filename=/ini_xubuntu/$isofile ignore_uuid nomodeset xforcevesa --
    initrd (aloop)/casper/initrd.lz
}
(2) Establish an updateable user area on another partition somewhere. This will include 3 repos for tarballs, SSPs, & the native bundles from the distros repo, as well as a ${HOME} directory named for the user account.
total 36
drwxrwxrwx  9    1000    1000 4096 Aug  2 12:16 .
drwxr-xr-x  3    1000    1000 4096 Jul 31 07:16 ..
drwxrwxrwx  2    1000    1000 4096 Aug  2 10:57 bin
drwxrwxrwx  2    1000    1000 4096 Jun 14 12:54 img
drwxrwxr-x  2 xubuntu xubuntu 4096 Jun 14 11:34 opera
drwxr-xr-x  3 xubuntu xubuntu 4096 Aug  2 11:56 repo_deb
drwxr-xr-x 10 xubuntu xubuntu 4096 Aug  7 12:12 repo_ssp
drwxrwxrwx  2    1000    1000 4096 Aug  2 11:57 repo_tgz
drwxr-xr-x 17 xubuntu xubuntu 4096 Jun 24 12:10 xubuntu
lrwxrwxrwx  1 root    root      37 Jul 31 07:16 initthis.cfg -> xubuntu/kpZone/kData/unx/initthis.cfg
(3) Run the distros package manager to install any additional software as needed per its dependency resolution capability. The packages are initially installed to live session memory, but their downloaded images can be usually found in /var somewhere, eg in /var/cache/apt/archives for dpkg PMs. In this example, copy them to the repo_deb, keeping them factored for auditing purposes via subdirectories &/or symlinks if desired.
total 7168
drwxrwxr-x 18 xubuntu xubuntu    4096 Jan 28 07:08 .
drwxr-xr-x  3 xubuntu xubuntu    4096 Jan 27 19:49 ..
drwxrwxr-x  2 xubuntu xubuntu    4096 Oct 22 09:21 .chromium
drwxr-xr-x  8 xubuntu xubuntu    4096 Nov 21 19:45 .games
drwxrwxr-x  2 xubuntu xubuntu    4096 Aug  2  2015 .gftp
drwxrwxr-x  2 xubuntu xubuntu    4096 Aug  1  2015 .gkrellm
drwxrwxr-x  6 xubuntu xubuntu    4096 Oct 29 18:15 .gnudev
drwxrwxr-x  2 xubuntu xubuntu    4096 Oct 25 20:29 .hexchat
drwxrwxr-x  2 xubuntu xubuntu    4096 Jan 19 19:26 .libgtksv2
drwxrwxr-x  2 xubuntu xubuntu    4096 Jan 27 19:49 .lxc
drwxrwxr-x  2 xubuntu xubuntu    4096 Aug  2  2015 .lynx
drwxrwxr-x  2 xubuntu xubuntu    4096 Jul 31  2015 .mc
drwxrwxr-x  2 xubuntu xubuntu    4096 Aug  2  2015 .mtpaint
drwxrwxr-x  2 xubuntu xubuntu    4096 Nov  6 06:22 .nedit
drwxrwxr-x  2 xubuntu xubuntu    4096 Nov  5 17:31 .qemu-kvm
drwxrwxr-x  2 xubuntu xubuntu    4096 Oct 22 21:14 .rpm2cpio
drwxrwxr-x  2 xubuntu xubuntu    4096 Oct 24 08:29 .synaptic
drwxrwxr-x  2 xubuntu xubuntu    4096 Dec 29 12:33 .vbox
-rw-r--r--  1 xubuntu xubuntu 5027258 Sep 21 05:38 docker.io_1.6.2~dfsg1-1ubuntu4_amd64.deb
-rw-r--r--  1 xubuntu xubuntu   67578 Oct 30  2007 gkrellmoon_0.6-5_amd64.deb
-rw-r--r--  1 xubuntu xubuntu   24622 Nov 12  2013 hexedit_1.2.13-1_amd64.deb
-rw-r--r--  1 xubuntu xubuntu   65350 May  1  2014 htop_1.0.3-1_amd64.deb
-rw-r--r--  1 xubuntu xubuntu  629132 Feb 19  2015 irssi_0.8.17-1ubuntu1_amd64.deb
-rw-r--r--  1 xubuntu xubuntu   82180 May  8  2013 rman_3.2-7_amd64.deb
-rw-r--r--  1 xubuntu xubuntu  213670 Sep  9  2014 tmux_1.9-6ubuntu1_amd64.deb
-rw-r--r--  1 xubuntu xubuntu  183926 Oct 28  2012 vfu_4.10-1.1_amd64.deb
-rw-r--r--  1 xubuntu xubuntu  733712 Jun 25  2013 xfwm4-themes_4.10.0-2_all.deb
-rw-r--r--  1 xubuntu xubuntu  169964 Apr 26  2014 xpenguins_2.2-10_amd64.deb
(4) Convert the native distro packages to SSP format (Symlinkable Squashfs Packages) via the mksspfs convertor (below) & move them to the SSP repo for reinstallation with each liveboot. The process is largely driven by a simple interactive shellscript which can convert, install, or activate entire directories of packages in distro-specific & crossplatform formats:
#!/bin/sh
#========

  echo ooo
  echo shmapp v0.10
  date +%G%b%d%a.%P%H:%M:%S
  uname -srm

# multiplatform advanced package processor
# script to process a directory of packages
# parm 1 is function:
#   ssp : generate SSPs
#   sym : establish symlinks one dirlevel up (default)
#   del : delete symlinks one dirlevel up
#   deb : install all packages: deb
#   rpm : install all packages: rpm
#   pac : install all packages: pkg.tar.xz
#   act : activate SSPs w/ optionally specified subdir (parm 2)

[ -z $1 ] && FNC=sym || FNC=$1
[ -z $2 ] && MDR=ssp || MDR=$2

case ${FNC} in
  deb ) sudo dpkg --install *.deb ;;
  rpm ) sudo rpm  --install *.rpm ;;
  pac ) sudo pacman -U --noconfirm --cachedir . * ;;
    * ) for i in *
        do
          case ${FNC} in
            del ) rm -f ../${i} ;;
            ssp ) $(zkp)/sh/mksspfs ${i} ;;
            act ) MPT=/opt/${MDR}/${i}
                  sudo mkdir -p ${MPT}
                  sudo mount -t squashfs -o ro ${i} ${MPT}
                  sudo $(zkp)/sh/shlntree ${MPT} ;;
            sym ) [ -f ${i} ] && ln -sf ${PWD##*/}/${i} ../${i} ;;
              * ) echo "$0: read source for doc" ;;
          esac
        done ;;
esac

exit 0

#!/bin/sh
#========

echo ooo
echo mksspfs v1.016
date +%G%b%d%a.%P%H:%M:%S
uname -srm

# script to rebundle software from gnu/linux repos
# creates SSP: symlinkable squashfs package
# (with no parm merely gens from prebuilt sspbuild)

TMPDIR=/tmp/sspbuild

if [ -z $1 ]; then
  PKG=sspbuild
else
  rm -rf ${TMPDIR} ; mkdir ${TMPDIR} ; DIR=${PWD}

  for i in .tar.xz .deb .xpak .rpm .tbz2 .tazpkg .xbps
  do
    if [ $(echo $1 | grep -i ${i}$) ]; then
      PKG=${1%%${i}} ; cd ${TMPDIR}
      case "${i}" in
        ".tar.xz" ) #--( archlinux )--#
          tar -xJvf ${DIR}/$1 && rm -f .* >/dev/null 2>&1
        ;;
        ".deb"    ) #--( debian )--#
          for SUF in xz gz
          do
            ARG=data.tar.${SUF} ; [ "${SUF}" = "xz" ] && TYP=J || TYP=z
            ar -x ${DIR}/$1 ${ARG} && tar -x${TYP}vf ${ARG} && rm -f ${ARG} >/dev/null 2>&1
          done
        ;;
        ".xpak"   ) #--( gentoo )--#
          tar -xjvf ${DIR}/$1
        ;;
        ".rpm"    ) #--( red space hat )--#
          rpm2cpio ${DIR}/$1 | cpio -idm
        ;;
        ".tbz2"   ) #--( sabayon )--#
          tar -xjvf ${DIR}/$1
        ;;
        ".tazpkg" ) #--( slitaz )--#
          tazpkg extract ${DIR}/$1 && mv -f ${PKG}/fs/* . && rm -rf ${PKG}
        ;;
        ".xbps"   ) #--( void )--#
          ln -sf ${DIR}/${PKG}.xbps ${DIR}/${PKG}.xz
          tar -xJvf ${DIR}/${PKG}.xz && rm -f *.plist ${DIR}/${PKG}.xz >/dev/null 2>&1
        ;;
                * ) #--( oops )--#
          echo error: ${i}
        ;;
      esac
    fi
  done

fi

# singlethreaded tar
  while KPID=$(pidof tar)
  do
    :
  done

# here we go ...
  chmod 755 ${TMPDIR}
  rm -rf /tmp/${PKG}.ssp
  echo 'executing mksquashfs ...'
  mksquashfs ${TMPDIR} /tmp/${PKG}.ssp -all-root -comp xz
  ls -al /tmp/${PKG}*.ssp*

exit 0
(5) Rather than messing with unionfs style layered mounting, the SSPs are hooked into the live system via a simple global subtree symlinker from their squashfs mountpoints. This is possible because the liveboot mounts the root filesystem in RAM so if it gets messed up for whatever reason you can start over merely by rebooting:
#!/bin/sh
#========

# echo ooo
  echo shlntree v0.04 : $1
# date +%G%b%d%a.%P%H:%M:%S
# uname -srm

# run as root
# script to symlink a directory tree to root filesystem

[ -d $1 ] && cd $1 || exit 1

for i in $(find)
do

  if [ "${i}" != "." ]; then
    RES=$1/${i}
#   echo ${RES} ${i}
    if   [ -h ${RES} ]; then
      cp -fpP ${RES} /${i}
    elif [ -d ${i} ]; then
      [ ! -d /${i} ] && mkdir /${i}
    else
      ln -sf ${RES} /${i}
    fi
  fi

done

exit 0

(6) When the distro is livebooted from the ISO, a single user script is executed which copies the ${HOME} directory onto its image in RAM, installs any packages it finds in the 3 repos, & performs any other distro or platform specific housekeeping before establishing the principal session. This is the heart of the FrugalDriver Framework, a consolidated litany of user customisations executed from a symlink in the top level of the diskresident user directory:
#!/bin/sh
#========

# initthis.cfg for Xubuntu 16.04
# runs Xubuntu in frugal mode from live install media
# user invoked from isodevice partition mounted r/w at boottime
# customises session from persistent user settings, repos, & scripted configs

# =================
# standard prologue
# =================
env printf "...\n"
env printf "initthis.cfg in progress\n"
# echo -e  "\033[1;34m$(date +%G%b%d%a.%P%H:%M:%S)\033[0m"
env printf "\033[1;34m$(date +%G%b%d%a.%P%H:%M:%S)\033[0m\n"
env printf "\033[1;32m .SNOG is Not Overwhelmingly GNUlike. \033[0m\n"
env printf "\033[1;32m  _______  _______  _______  _______  \033[0m\n"
env printf "\033[1;32m |     __||    |  ||       ||     __| \033[0m\n"
env printf "\033[1;32m |__     ||       ||   -   ||    |  | \033[0m\n"
env printf "\033[1;32m |_______||__|____||_______||_______| Linux \033[0m\n"

# =============================
# ${HOME} directory linkage &c.
# =============================
# snoginit
  sudo pkill -x Thunar
  sudo pkill -x xfconfd
  cd $(dirname $0) ; INI=/tmp/.X11-snog ; mkdir ${INI} ; ln -sfn ${PWD} ${INI}/init
# user settings
  sudo cp -fpr ${USER} /home
  sudo ln -sfn ${HOME}/kpZone /etc/kpzone
# configs outside of ${HOME}
  UNX=/etc/kpzone/kData/unx
  sudo cp -fp ${UNX}/= /usr/bin
  sudo cp -fp ${UNX}/sh/zkp /usr/bin
# sysreq
  sudo sysctl kernel.sysrq=1

# =========================
# boottime package installs
# =========================
# tarballs
  if [ -d repo_tgz ]; then
    for i in repo_tgz/*.tgz
    do
      sudo tar -C / --overwrite -xzf ${i}
    done
  fi
# packages
# if [ ! -d /usr/share/mc ]; then
    cd ${INI}/init/repo_deb
    ls -alL *.deb 2>/dev/null && xterm -geom -264-100 -fg blue -e sudo dpkg --install *.deb
# fi
# symlinkable squashfs packages
  cd ${INI}/init/repo_ssp && $(zkp)/sh/shmapp act

# ==============================
# give control to the ui session
# ==============================
# user configs
  $(zkp)/sh/rc_init
# xfce submenuing
# SRC=xfce-applications.menu ; sudo ln -sf $(zkp)/${SRC} /etc/xdg/menus/${SRC}
# SRC=xfce-kpzone.directory  ; sudo ln -sf $(zkp)/${SRC} /usr/share/desktop-directories/${SRC}
# xpenguins
  xpenguins -n 1 -t Classic_Penguins &>/dev/null &
# refresh
# read aparm
  xfce4-session-logout
  sudo pkill -x xfce4-terminal

env printf "\033[1;34minitthis.cfg complete\033[0m\n"
  exit 0
(7) The advantages of this approach are manifold. Both the distro ISO & its packages are maintained as readonly images lofted into memory by the boot / user init process, & thus system upgrades merely require replacing the ISO, reacquiring / reconverting the packages, & making any necessary adjustments to the FrugalDriver script. Both the base distro & the SSPs are nonetheless squashfs mounted so they reside entirely on disk despite the fact that the session itself resides in RAM. No matter what customisations are made to the runtime system, the vanilla distro always presents itself for reference purposes with every boot. & the logical relationships are effected via ordinary symlinks so the strategy is highly robust & crossplatform.
Filesystem      Size  Used Avail Use% Mounted on
udev            953M     0  953M   0% /dev
tmpfs           194M  9.6M  184M   5% /run
/dev/sda5       110G   60G   45G  58% /isodevice
/dev/loop0      1.1G  1.1G     0 100% /cdrom
/dev/loop1     1009M 1009M     0 100% /rofs
/cow            966M  262M  704M  28% /
tmpfs           966M   76K  965M   1% /dev/shm
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
tmpfs           966M     0  966M   0% /sys/fs/cgroup
tmpfs           966M   28K  965M   1% /tmp
tmpfs           194M   44K  193M   1% /run/user/999
/dev/loop2       17M   17M     0 100% /opt/ssp/04-opera.xzm
/dev/loop3      128K  128K     0 100% /opt/ssp/arc-beaver-0.4.1-3-x86_64.pkg.ssp
/dev/loop4      4.7M  4.7M     0 100% /opt/ssp/chromium-browser-l10n_45.0.2454.101-0ubuntu1.1201_all.ssp
/dev/loop5       60M   60M     0 100% /opt/ssp/chromium-browser_45.0.2454.101-0ubuntu1.1201_amd64.ssp
/dev/loop6      896K  896K     0 100% /opt/ssp/chromium-codecs-ffmpeg-extra_45.0.2454.101-0ubuntu1.1201_amd64.ssp
/dev/loop7      5.4M  5.4M     0 100% /opt/ssp/docker.io_1.6.2~dfsg1-1ubuntu4_amd64.ssp
/dev/loop8      640K  640K     0 100% /opt/ssp/gftp-common_2.0.19-4ubuntu2_amd64.ssp
/dev/loop9      256K  256K     0 100% /opt/ssp/gftp-gtk_2.0.19-4ubuntu2_amd64.ssp
/dev/loop10     128K  128K     0 100% /opt/ssp/gftp-text_2.0.19-4ubuntu2_amd64.ssp
/dev/loop11     128K  128K     0 100% /opt/ssp/gftp_2.0.19-4ubuntu2_all.ssp
/dev/loop12     768K  768K     0 100% /opt/ssp/gkrellm_2.3.6~rc1-1_amd64.ssp
/dev/loop13     128K  128K     0 100% /opt/ssp/gkrellmoon64.ssp
/dev/loop14     128K  128K     0 100% /opt/ssp/gplanarity_17906-5_amd64.ssp
/dev/loop15     1.3M  1.3M     0 100% /opt/ssp/hexchat-common_2.10.2-1ubuntu2_all.ssp
/dev/loop16     384K  384K     0 100% /opt/ssp/hexchat_2.10.2-1ubuntu2_amd64.ssp
/dev/loop17     128K  128K     0 100% /opt/ssp/hexedit_1.2.13-1_amd64.ssp
/dev/loop18     256K  256K     0 100% /opt/ssp/hexglass-1.2.1-9.fc22.x86_64.ssp
/dev/loop19     128K  128K     0 100% /opt/ssp/htop_1.0.3-1_amd64.ssp
/dev/loop20     1.7M  1.7M     0 100% /opt/ssp/ipxe-qemu_1.0.0+git-20141004.86285d1-1ubuntu3_all.ssp
/dev/loop21     768K  768K     0 100% /opt/ssp/irssi_0.8.17-1ubuntu1_amd64.ssp
/dev/loop22     128K  128K     0 100% /opt/ssp/libaio1_0.3.110-1_amd64.ssp
/dev/loop23     128K  128K     0 100% /opt/ssp/libaudio2_1.9.4-3_amd64.ssp
/dev/loop24     128K  128K     0 100% /opt/ssp/libboost-thread1.58.0_1.58.0+dfsg-3.1ubuntu1_amd64.ssp
/dev/loop25     128K  128K     0 100% /opt/ssp/libept1.4.16_1.0.14ubuntu1.1_amd64.ssp
/dev/loop26     128K  128K     0 100% /opt/ssp/libfdt1_1.4.0+dfsg-2_amd64.ssp
/dev/loop27     128K  128K     0 100% /opt/ssp/libgif4_4.1.6-11_amd64.ssp
/dev/loop28     256K  256K     0 100% /opt/ssp/libgtksourceview2.0-0_2.10.5-2ubuntu2_amd64.ssp
/dev/loop29     640K  640K     0 100% /opt/ssp/libgtksourceview2.0-common_2.10.5-2ubuntu2_all.ssp
/dev/loop30     256K  256K     0 100% /opt/ssp/libmng2_2.0.2-0ubuntu3_amd64.ssp
/dev/loop31     128K  128K     0 100% /opt/ssp/libmotif-common_2.3.4-8ubuntu1_all.ssp
/dev/loop32     128K  128K     0 100% /opt/ssp/libntlm0_1.4-3_amd64.ssp
/dev/loop33     1.3M  1.3M     0 100% /opt/ssp/libqt4-declarative_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop34     640K  640K     0 100% /opt/ssp/libqt4-network_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop35     896K  896K     0 100% /opt/ssp/libqt4-script_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop36     128K  128K     0 100% /opt/ssp/libqt4-sql_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop37     128K  128K     0 100% /opt/ssp/libqt4-xml_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop38     1.3M  1.3M     0 100% /opt/ssp/libqt4-xmlpatterns_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop39     1.7M  1.7M     0 100% /opt/ssp/libqtcore4_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop40     256K  256K     0 100% /opt/ssp/libqtdbus4_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop41     4.3M  4.3M     0 100% /opt/ssp/libqtgui4_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_amd64.ssp
/dev/loop42     1.7M  1.7M     0 100% /opt/ssp/librados2_0.94.3-0ubuntu2_amd64.ssp
/dev/loop43     1.8M  1.8M     0 100% /opt/ssp/librbd1_0.94.3-0ubuntu2_amd64.ssp
/dev/loop44     256K  256K     0 100% /opt/ssp/libsdl1.2debian_1.2.15-11ubuntu1_amd64.ssp
/dev/loop45     384K  384K     0 100% /opt/ssp/libspice-server1_0.12.5-1.1ubuntu2_amd64.ssp
/dev/loop46     128K  128K     0 100% /opt/ssp/libssh2-1_1.4.3-4.1_amd64.ssp
/dev/loop47     128K  128K     0 100% /opt/ssp/libusbredirparser1_0.7-1ubuntu2_amd64.ssp
/dev/loop48     384K  384K     0 100% /opt/ssp/libvte-2.90-9_1%3a0.36.3-1ubuntu2_amd64.ssp
/dev/loop49     128K  128K     0 100% /opt/ssp/libvte-2.90-common_1%3a0.36.3-1ubuntu2_all.ssp
/dev/loop50     384K  384K     0 100% /opt/ssp/libxen-4.5_4.5.1-0ubuntu1_amd64.ssp
/dev/loop51     128K  128K     0 100% /opt/ssp/libxenstore3.0_4.5.1-0ubuntu1_amd64.ssp
/dev/loop52     1.2M  1.2M     0 100% /opt/ssp/libxm4_2.3.4-8ubuntu1_amd64.ssp
/dev/loop53     1.7M  1.7M     0 100% /opt/ssp/lightsoff_1%3a3.16.1.1-1_amd64.ssp
/dev/loop54     1.0M  1.0M     0 100% /opt/ssp/lynx-cur_2.8.9dev1-2_amd64.ssp
/dev/loop55     128K  128K     0 100% /opt/ssp/lynx_2.8.9dev1-2_all.ssp
/dev/loop56     1.5M  1.5M     0 100% /opt/ssp/mc-data_3%3a4.8.13-3_all.ssp
/dev/loop57     512K  512K     0 100% /opt/ssp/mc_3%3a4.8.13-3_amd64.ssp
/dev/loop58     640K  640K     0 100% /opt/ssp/mtpaint_3.40-2_amd64.ssp
/dev/loop59     896K  896K     0 100% /opt/ssp/nedit_1%3a5.6a-2_amd64.ssp
/dev/loop60     896K  896K     0 100% /opt/ssp/pipewalker_0.9.4-2_amd64.ssp
/dev/loop61     128K  128K     0 100% /opt/ssp/qemu-block-extra_1%3a2.3+dfsg-5ubuntu9_amd64.ssp
/dev/loop62     128K  128K     0 100% /opt/ssp/qemu-kvm_1%3a2.3+dfsg-5ubuntu9_amd64.ssp
/dev/loop63     256K  256K     0 100% /opt/ssp/qemu-system-common_1%3a2.3+dfsg-5ubuntu9_amd64.ssp
/dev/loop64     3.7M  3.7M     0 100% /opt/ssp/qemu-system-x86_1%3a2.3+dfsg-5ubuntu9_amd64.ssp
/dev/loop65     1.2M  1.2M     0 100% /opt/ssp/qtcore4-l10n_4%3a4.8.6+git64-g5dc8b2b+dfsg-3~ubuntu8_all.ssp
/dev/loop66     128K  128K     0 100% /opt/ssp/rman_3.2-7_amd64.ssp
/dev/loop67     256K  256K     0 100% /opt/ssp/seabios_1.8.2-1ubuntu1_all.ssp
/dev/loop68     1.9M  1.9M     0 100% /opt/ssp/synaptic_0.81.4build2_amd64.ssp
/dev/loop69     256K  256K     0 100% /opt/ssp/tmux_1.9-6ubuntu1_amd64.ssp
/dev/loop70     128K  128K     0 100% /opt/ssp/trcm-theme_NOX.ssp
/dev/loop71     1.8M  1.8M     0 100% /opt/ssp/trcmcore.ssp
/dev/loop72     256K  256K     0 100% /opt/ssp/vfu_4.10-1.1_amd64.ssp
/dev/loop73     3.9M  3.9M     0 100% /opt/ssp/wordwarvi-sound_1.00+dfsg1-3_all.ssp
/dev/loop74     128K  128K     0 100% /opt/ssp/wordwarvi_1.00+dfsg1-3_amd64.ssp
/dev/loop75     128K  128K     0 100% /opt/ssp/xbill_2.1-8ubuntu1_amd64.ssp
/dev/loop76     128K  128K     0 100% /opt/ssp/xbomb_2.2b-1_amd64.ssp
/dev/loop77     384K  384K     0 100% /opt/ssp/xfwm4-themes_4.10.0-2_all.ssp
/dev/loop78     128K  128K     0 100% /opt/ssp/xgalaga++_0.8.4-1_amd64.ssp
/dev/loop79     256K  256K     0 100% /opt/ssp/xpenguins_2.2-10_amd64.ssp
/dev/sdb1       2.1G  1.5G  611M  71% /media/xubuntu/UD01_sys
Finally, the user has complete control over ${HOME} directory persistence. The assumption is that all changes will be *lost* with a reboot, giving one a great deal of flexibility in experimenting with system configs without incurring irrevocable breakage. Any changes the user wants to be persistent need to be explicitly copied to the user ${HOME} area on disk for reapplication with the subsequent boot.


+++ Credits with Many Thanx
(*) = (www) LocalNet - Buffalo dialup nationwide
(*) = (www) ShortURL.com - still the best address on the net
(*) = (www) AmazingCounters - get your own free hitcounter

visitor
hit counter
number

GPL
@ 2017 TRCM TranceRave Capital Management

Screaming CuckooBroad Associates part of the CircleOmega organisation TRCM
<noscript> <!-- ooo