#!/bin/rc# change your current root and stay attached to window system and devices# rerootwin targetsrv [ authagent ]if(test -e /lib/namespace.saveterm) nsfile=/lib/namespace.savetermif(test -e /boot/namespace.saveterm) nsfile=/boot/namespace.savetermif(~ $nsfile ''){ echo no namespace.saveterm found exit no.nssaveterm}pivot=/net.altwhile (~ $1 -*){ switch($1){ case -f nsfile=/boot/namespace.save9front if(test -e /lib/namespace.save9front) nsfile=/lib/namespace.save9front case -u pivot=/u case -n pivot=/n case -t nsfile=$2 if(! test -e $2){ echo nsfile $2 not found exit no.namespacefile } shift } shift}if(! ~ $1 ?*){ echo need a target srv exit no.srv}# depending on the kind of namespace we are being run from we might need# to get our devices in the expected place to beginif(! test -e /mnt/wsys/wctl){ if(! test -e /mnt/term/mnt/wsys/wctl){ echo no wctl at mnt wsys exit no.wctl } echo binding /mnt/term/mnt/wsys to /mnt/wsys bind /mnt/term/mnt/wsys /mnt/wsys}if(! test -e /mnt/term/dev/cons){ if(! test -e /mnt/wsys/cons){ echo no cons at mnt term exit no.cons } if(! test -e /mnt/term/dev) mntgen /mnt/term echo binding /mnt/wsys /mnt/term/dev bind /mnt/wsys /mnt/term/dev if(! test -e /mnt/term/dev/draw) bind -a /dev /mnt/term/dev}if(! test -e /srv/$1){ srv tcp!$1!564 $1 if(! test -e /srv/$1){ echo srv $1 couldnt be acquired exit no.srv }}nsroot=$1if(~ $2 ?*){ authagent=$2}if not if(! ~ $authagent ?*){ authagent=factotum}if(! test -e /srv/$authagent){ factotum -s $authagent}mount -b /srv/$authagent /mnt# use srvfs to save our old devices so the namespace.saveterm can mount them lateroldterm=oldterm.$pidoldwsys=oldwsys.$pidsrvfs -p 0600 oldterm.$pid /mnt/termsrvfs -p 0600 oldwsys.$pid /mnt/wsysif(test -e /bin/newns){ newns -n $nsfile exit ''}auth/newns -n $nsfileexit ''
#!/bin/rc
# change your current root and stay attached to window system and devices
# rerootwin targetsrv [ authagent ]
if(test -e /lib/namespace.saveterm)
nsfile=/lib/namespace.saveterm
if(test -e /boot/namespace.saveterm)
nsfile=/boot/namespace.saveterm
if(~ $nsfile ''){
echo no namespace.saveterm found
exit no.nssaveterm
}
pivot=/net.alt
while (~ $1 -*){
switch($1){
case -f
nsfile=/boot/namespace.save9front
if(test -e /lib/namespace.save9front)
nsfile=/lib/namespace.save9front
case -u
pivot=/u
case -n
pivot=/n
case -t
nsfile=$2
if(! test -e $2){
echo nsfile $2 not found
exit no.namespacefile
}
shift
}
shift
}
if(! ~ $1 ?*){
echo need a target srv
exit no.srv
}
# depending on the kind of namespace we are being run from we might need
# to get our devices in the expected place to begin
if(! test -e /mnt/wsys/wctl){
if(! test -e /mnt/term/mnt/wsys/wctl){
echo no wctl at mnt wsys
exit no.wctl
}
echo binding /mnt/term/mnt/wsys to /mnt/wsys
bind /mnt/term/mnt/wsys /mnt/wsys
}
if(! test -e /mnt/term/dev/cons){
if(! test -e /mnt/wsys/cons){
echo no cons at mnt term
exit no.cons
}
if(! test -e /mnt/term/dev)
mntgen /mnt/term
echo binding /mnt/wsys /mnt/term/dev
bind /mnt/wsys /mnt/term/dev
if(! test -e /mnt/term/dev/draw)
bind -a /dev /mnt/term/dev
}
if(! test -e /srv/$1){
srv tcp!$1!564 $1
if(! test -e /srv/$1){
echo srv $1 couldnt be acquired
exit no.srv
}
}
nsroot=$1
if(~ $2 ?*){
authagent=$2
}
if not if(! ~ $authagent ?*){
authagent=factotum
}
if(! test -e /srv/$authagent){
factotum -s $authagent
}
mount -b /srv/$authagent /mnt
# use srvfs to save our old devices so the namespace.saveterm can mount them later
oldterm=oldterm.$pid
oldwsys=oldwsys.$pid
srvfs -p 0600 oldterm.$pid /mnt/term
srvfs -p 0600 oldwsys.$pid /mnt/wsys
if(test -e /bin/newns){
newns -n $nsfile
exit ''
}
auth/newns -n $nsfile
exit ''