-
Notifications
You must be signed in to change notification settings - Fork 0
from dev.laptop.org/users/martin/xs-rsync
License
XSCE/xs-rsync
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
XS-rsync
========
Provides support for publishing resources on the XS via rsync.
To publish something
~ this recipe is for ~
~ script writers ~
1 - Add a new directory under /library/xs-rsync/pub/
make sure it is readable by the xs-rsync user.
The best strategy is to add general top-level
"modules" there, such as "xo-activities" to avoid
having to update rsyncd.conf.in often.
2 - Edit /etc/xs-rsyncd.conf.in and add a new module
pointing to your new directory.
3 - Run `xs-refresh-xobuildlist --rebuildconfig`
as root to merge the dynamically created build list in.
** The above steps are meant to be automated later with a mount
** script so that plugging in a USB drive automounts and scans
** the USB drive for publishable resources.
The first use of xs-rsync is to offer OS images to run
XO software updates. There are utilities provided for this
task.
Publishing a new XO OS build
----------------------------
~ With a USB stick, for a headless XS ~
1 - Pick a name for the build. The build file can have one
of many names, depending on its source and build stream.
The name that the client machines will see it as - and
that the activation server will use - is often different.
If the build file comes in xyz_jffs2-tree.tar.bz2 , put the
name in a file called xyz_jffs2.name .
2 - Place 4 files in a directory at the _root_ of the usb stick,
call the directory "xs-xobuilds", and include the files as follows:
- the files are as follows
xyz_jffs2-tree.tar.bz2 # tar.bz2 build img
xyz_jffs2-tree.tar.bz2.md5 # md5 of the tarbz2
xyz_jffs2.contents # json-encoded manifest
xyz_jffs2.name # file containing the name
3 - Ensure there are no extraneous files, and create the manifest
from the commandline: (GUI-based instructions welcome)
cd /path/to/usb/xs-xobuilds;
sha1sum * > /tmp/manifest.sha1
mv /tmp/manifest.sha1 ./
( Note! The instructions above create the manifest
in a temporary directory, to avoid trying to
provide a sha1 of the manifest itself. )
4 - If your XS is enforcing security, you will need to sign the
manifest with the NOC key. See the Schoolserver wiki for more
info.
5 - Done - plug the USB key into the XS, and the XO build should get
installed automatically. The activity is logged in
/var/log/user.log
~ From the commandline or from a script ~
1 - Pick a name for the build. The build file can have one
of many names, depending on its source and build stream.
The name that the client machines will see it as - and
that the activation server will use - is often different.
If the build file comes in xyz_jffs2-tree.tar.bz2 , put the
name in a file called xyz_jffs2.name .
2 - Place 4 files in /library/xs-rsync/xobuilds-packed/
- the files are as follows
xyz_jffs2-tree.tar.bz2 # tar.bz2 build img
xyz_jffs2-tree.tar.bz2.md5 # md5 of the tarbz2
xyz_jffs2.contents # json-encoded manifest
xyz_jffs2.name # file containing the name
3 - run xs-refresh-xobuilds as root
Also
- To delete stale builds: Remove the build's files
and run `xs-refresh-xobuilds` as root .
Removing (or renaming) the .name file is enough.
- To force a re-unpack of the published builds run
`xs-refresh-xobuilds --force` as root. This
will rebuild the fakeroot state files, which can
get out of sync if the underlying inodes change -
for example, if /library is moved to a different
disk.
XO build - scripts involved
---------------------------
- xs-refresh-xobuilds the published builds with
/library/xs-rsync/xobuilds-packed/ - including updating
/etc/xs-rsyncd.gen.conf
- xs-publish-xobuild checks things, sets up env and calls
xs-unpack-xobuild to do the dirty work. Runs as xs-rsync.
- xs-unpack-xobuild unpacks the build under fakeroot
and applies minor fixups. Runs as xs-rsync.
Discussion
----------
The olpc-update scheme has two tricky aspects
- Builds are expected to be "modules" so we have
to update our config file to list them.
See https://dev.laptop.org/ticket/7743
We solve this by re-generating xs-rsyncd.conf
the rsync process re-reads it for every new
client.
- The unpacked builds themselves have system files
and devices which we do NOT want to reproduce
on our FS literlly. We just want to serve them.
We use fakeroot with atomically-updated "state"
files. The fakeroot package includes a 'faked'
daemon that would remove the need for atomic
updates but we cannot count on it being ok with
unexpected poweroffs. Atomic updates of read-only
state files do give us the required resiliency.
xinetd starts a new fakeroot for every new
incoming connection - so new connections will
see the new state data transparently.
To use rsync in the safest configuration, we run it
with 'use chroot = yes' wrapped with fakechroot.
About
from dev.laptop.org/users/martin/xs-rsync
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published