on 08/12/2011 12:58 PM dhk wrote the following:
> I have a Gentoo Box that is a standalone with no internet access.  Is
> there a way I can update it by using my laptop?
> 
> It would be nice to be able to sync a copy of my world list on my laptop
> without clobbering my laptop's world list.  Then do a fetch for the
> standalone world and when on the console pf the standalone do the update
> to the fetched packages on the laptop.  The idea is not to have the
> laptop as an image of the standalone, but as a server to sync to while
> keeping the laptop's world separate.

Keep an updated image of the standalone on laptop, update it via chroot,
and sync back to the standalone.

ie:

fix CFLAGS="-march=..." in etc/make.conf to reflect your cpu in
standalone pc.

rsync the standalone file system (excluding the virtual dirs, and /dev
and tmp dirs) to a <standalone> directory on laptop's disk or to an
external (usb) disk.

mount appropriate dirs in <standalone>

Better make an init script (like /etc/init.d/standalone), so you can
easily start/stop the mounts like:

#!/sbin/runscript

depend() {
   need localmount
   need bootmisc
}

start() {
    ebegin "Mounting chroot dirs"
    mount -o bind /dev /mnt/standalone/dev >/dev/null
    mount -o bind /dev/pts /mnt/standalone/dev/pts >/dev/null &
    mount -o bind /dev/shm /mnt/standalone/dev/shm >/dev/null &
    mount -o bind /proc /mnt/standalone/proc >/dev/null
    mount -o bind /proc/bus/usb /mnt/standalone/proc/bus/usb >/dev/null &
    mount -o bind /sys /mnt/standalone/sys >/dev/null &
    mount -o bind /tmp /mnt/standalone/tmp >/dev/null &
    mount -o bind /usr/portage /mnt/standalone/usr/portage/ >/dev/null &
    mount -o bind /usr/distfiles /mnt/standalone/usr/distfiles >/dev/null &
    eend $? "An error occured while attempting to mount chroot directories"
    ebegin "Copying chroot files"
    cp -pf /etc/resolv.conf /mnt/standalone/etc >/dev/null &
    cp -Ppf /etc/localtime /mnt/standalone/etc >/dev/null &
    eend $? "An error occured while attempting to copy chroot files."
}

stop() {
    ebegin "Unmounting chroot dirs"
    umount -f /mnt/standalone/dev/pts >/dev/null
    umount -f /mnt/standalone/dev/shm >/dev/null
    umount -f /mnt/standalone/dev >/dev/null &
    umount -f /mnt/standalone/proc/bus/usb >/dev/null
    umount -f /mnt/standalone/proc >/dev/null &
    umount -f /mnt/standalone/sys >/dev/null &
    umount -f /mnt/standalone/tmp >/dev/null &
    umount -f /mnt/standalone/usr/portage/ >/dev/null &
    umount -f /mnt/standalone/usr/distfiles/ >/dev/null &
    eend $? "An error occured while attempting to unmount chroot
directories"
}

then in laptop:

/etc/init.d/standalone start &&
linux64 chroot <standalone> /bin/bash
or (if standalone is 32bit)
linux32 chroot <standalone> /bin/bash

then once inside the chroot update the environment like:
cd && env-update && source /etc/profile && export PS1='(standalone) \W # '

Then update as normal (emerge -DNuv world) ...etc (*)

Once finished, exit chroot and unmount:
exit && /etc/init.d/standalone stop

connect laptop (or external disk) to standalone and sync the filesystem
back, but _taking_care_not_to_delete_directories_you_need_to_keep_ like
/home/...

eg, make a script like:

#!/bin/bash
( mount |grep standalone ) && /etc/init.d/standalone stop
cd /mnt/standalone && \
rsync -aHvx --exclude lost+found --delete boot/ standalone:/boot/ && \
rsync -aHvx --exclude lost+found --delete bin/ standalone:/bin/ && \
rsync -aHvx --exclude lost+found --delete sbin/ standalone:/sbin/ && \
rsync -aHvx --exclude lost+found --delete usr/ standalone:/usr/ && \
rsync -aHvx --exclude lost+found --delete lib/ standalone:/lib/ && \
rsync -aHvx --exclude lost+found --delete mnt/ standalone:/mnt/ && \
rsync -aHvx --exclude lost+found --delete net/ standalone:/net/ && \
rsync -aHvx --exclude lost+found --delete misc/ standalone:/misc/ && \
rsync -aHvx --exclude lost+found --delete var/ standalone:/var/ && \
rsync -aHvx --exclude lost+found --delete media/ standalone:/media/ && \
rsync -aHvx --exclude lost+found --delete opt/ standalone:/opt/ && \
rsync -aHvx --exclude lost+found --delete etc/ standalone:/etc/ && \
rsync -aHvx --exclude lost+found --delete root/ standalone:/root/ && \
echo "ALL DONE"


(*) OR maybe this is safer, once in chroot environment, fetch the needed
distfiles only:
emerge -DNuvf world
then rsync the /usr/distfiles/ and portage dirs to the standalone's
machine dirs, and build the packages (update) on standalone.
And rsync the standalone fs to the <standalone> dir on laptop/disk when
you want to update again.

Hope you got the idea. ;)


Reply via email to