On Tuesday, 17 January 2017 20:51:38 GMT Bill Kenworthy wrote:
> On 17/01/17 18:03, Peter Humphrey wrote:
> > Hello list,
> > 
> > Does anyone have some pointers to setting up a local portage mirror for
> > git to serve? I'm looking at http://www.funtoo.org/Portage_Git_Mirror
> > but some details are obscure to me. I hope I'm not going to have to
> > roll my sleeves up and learn the whole of git; I just want to cut down
> > the time my boxes take to sync via git - some of them have their
> > portage trees nfs-mounted in chroots on my workstation and take
> > anything up to 20 minutes to sync.
> > 
> > One question comes up straight away: should the git-served repository be
> > the host's own /usr/portage tree? And what cron task should I run to
> > refresh the mirror?
> > 
> > Any help would be gratefully received.
> > 
> > (I can still read e-mails via web-mail even when KMail is playing up.)
> 
> I moved my systems to a local git repos some time ago - it works (fast -
> much faster than rsync!)but its not perfect:
> 
> It would be nice if someone can share how it really should be done!

It seems to me to be ideal material for a wiki page. Any offers?

> Below is the contents of an email to the list in 2015 when I got it
> working:
> 
> * problems:
> the files in /usr/share/portage sometimes get overridden and give an
> error message
> renaming "gentoo" to "olympus" (the server host) made sense at the time
> but creates odd errors at times requiring files to be restored.
> git doesnt use the portage checksums which besides odd errors at times
> required using "thin-manifests = true" in
> "/usr/portage/metadata/layout.conf"

Many thanks, Bill. That'll give me something to think about!

-- 
Regards
Peter

> ++++++++++++++++++
> Replace your rsync infrastructure with a git one.  After set up, there
> is faster syncing than rsync, both externally to the gentoo
> infrastructure (reasonable ADSL link), and really fast compared to rsync
> internally.  Not simple, but its a one off hit on just a few machines
> for me.  Works for me, no warranty etc.
> 
> Thanks to Michael and Hasufell for the hints needed to get this working.
> Apologies for the line wrap.
> 
> 
> 
> Replace with your own values!
> repo name: olympus
> repo master host: olympus.lan.localdomain
> 
> On the master:
> 
> install git !!!
> 
> Download https://github.com/hasufell/portage-gentoo-git-config
> 
> unzip
> 
> cp -v portage-gentoo-git-config-master/etc/portage/repo.postsync.d/*
> /etc/portage/repo.postsync.d/
> 
> cp portage-gentoo-git-config-master/etc/portage/repos.conf/gentoo.conf
> /etc/portage/repos.conf/
> 
> if needed: chmod +x /etc/portage/repo.postsync.d/sync_overlay_cache
> cd /usr/
> mv portage portage.old
> 
> emerge --sync
> 
> 
> To use as the master for your own mirror system:
> Uncomment the lines in /etc/rsyncd.conf to set up your own
> gentoo-portage rsync server - still needed for now
> 
> rc-update add rsyncd
> 
> /etc/init.d/rsyncd start
> 
> 
> 
> On the internal clients wanting to use the mirror:
> reccomended: set up passwordless ssh between clients and the master
> 
> emerge dev-vcs/git
> 
> create /etc/portage/repos.conf/olympus.conf as follows
> --------------------
> [DEFAULT]
> main-repo = olympus
> 
> [olympus]
> location = /usr/portage
> sync-type = git
> sync-uri = git://olympus.lan.localdomain:/usr/portage
> auto-sync = yes
> --------------------
> 
> create /etc/portage/repo.postsync.d/sync_olympus
> --------------------
> #!/bin/bash
> 
> repository_name="${1}"
> repository_path="${3}"
> 
> [[ ${repository_name} == "olympus" ]] || exit 0
> 
> source /lib/gentoo/functions.sh
> 
> # Number of jobs for egencache, default is number or processors.
> parallel_jobs="$(nproc)"
> 
> # caches
> ebegin "Fetching pre-generated metadata cache for ${repository_name}"
>       rsync -a
> rsync://olympus.lan.localdomain/gentoo-portage/metadata/md5-cache/
> "${repository_path}"/metadata/md5-cache/
> eend $?
> 
> ebegin "Updating metadata cache for ${repository_name}"
>       egencache --jobs="${parallel_jobs}" --repo="${repository_name}"
> --update --update-use-local-desc
> eend $?
> 
> #DTD's
> DTDDIR="${repository_path}"/metadata/dtd
> ebegin "Updating DTDs"
> if [[ -e ${DTDDIR} ]]; then
>         git -C "${DTDDIR}" pull -q --ff
> else
>         git clone olympus.lan.localdomain:/usr/portage/metadata/dtd
> "${DTDDIR}"
> fi
> eend "$?"
> 
> #GLSA's
> GLSADIR="${repository_path}"/metadata/glsa
> ebegin "Updating GLSAs"
> if [[ -e ${GLSADIR} ]]; then
>         git -C "${GLSADIR}" pull -q --ff
> else
>         git clone olympus.lan.localdomain:/usr/portage/metadata/glsa
> "${GLSADIR}"
> fi
> eend "$?"
> 
> # herds
> ebegin "Updating herds.xml"
>     rsync -a
> rsync://olympus.lan.localdomain/gentoo-portage/metadata/herds.xml
> "${repository_path}"/metadata/md5-cache/
> eend $?
> 
> #news
> NEWSDIR="${repository_path}"/metadata/news
> ebegin "Updating news items"
> if [[ -e ${NEWSDIR} ]]; then
>         git -C "${NEWSDIR}" pull -q --ff
> else
>         git clone olympus.lan.localdomain:/usr/portage/metadata/news
> "${NEWSDIR}"
> fi
> eend $? "Try to remove ${NEWSDIR}"
> --------------------
> 
> 
> mv /usr/portage /usr/portage.old
> 
> git clone olympus.lan.localdomain:/usr/portage /usr/portage
> 
> echo 'olympus' > /usr/portage/profiles/repo_name
> 
> echo 'masters = olympus' > /usr/local/portage/metadata/layout.conf
> 
> echo 'thin-manifests = true' >> /usr/local/portage/metadata/layout.conf
> 
> cp  /usr/portage/metadata/layout.conf
> /usr/local/portage/metadata/layout.conf
> 
> cp /etc/portage/repos.conf/olympus.conf
> /usr/share/portage/config/repos.conf
> 
> emerge --sync
> emerge --sync
> 
> * the first sync will complete the process, the second is to check there
> are no errors.


Reply via email to