Difference between revisions of "Portage Git Mirror"
Threesixes (talk | contribs) |
(Changes to obviate the /usr/portage.old requirement, restructured verbiage, updated stale wiki-isms) |
||
Line 5: | Line 5: | ||
== Use case == | == Use case == | ||
The more local funtoo instances you are maintaining, the more useful this will be to you. This -- along with a local [[Portage_Distfiles_Mirror]] -- can make maintaining multiple funtoo instances much faster, much more bandwidth efficient, and much less burdensome to upstream resources. | |||
===Terminology used herein=== | |||
Following terms should be adapted | Following terms should be adapted | ||
Line 34: | Line 36: | ||
== Local mirror == | == Local mirror == | ||
=== Prepare directories and get portage tree === | |||
{{console|body= | |||
###i## mkdir /home/git-mirrors | ###i## mkdir /home/git-mirrors | ||
###i## chown nobody /home/git-mirrors | ###i## chown nobody /home/git-mirrors | ||
Line 41: | Line 43: | ||
$##bl## cd /home/git-mirrors | $##bl## cd /home/git-mirrors | ||
$##bl## git clone --mirror --bare git://github.com/funtoo/ports-2012.git portage.git | $##bl## git clone --mirror --bare git://github.com/funtoo/ports-2012.git portage.git | ||
}} | |||
For | For security purposes we will use the {{c|nobody}} user . | ||
=== git-daemon configuration === | |||
{{file|name=/etc/conf.d/git-daemon|desc=|body= | {{file|name=/etc/conf.d/git-daemon|desc=|body= | ||
GITDAEMON_OPTS="--syslog --verbose --enable=receive-pack --export-all" | |||
GITDAEMON_OPTS="${GITDAEMON_OPTS} --base-path=/home/git-mirrors /home/git-mirrors --interpolated-path=/home/git-mirrors" | GITDAEMON_OPTS="${GITDAEMON_OPTS} --base-path=/home/git-mirrors /home/git-mirrors --interpolated-path=/home/git-mirrors" | ||
GIT_USER=nobody | GIT_USER=nobody | ||
Line 51: | Line 54: | ||
}} | }} | ||
=== Service configuration === | |||
To start daemon with a mirror machine boot add | To start daemon with a mirror machine boot add {{c|git-daemon}} to default runlevel | ||
{{console|body= | |||
###i## rc-update add git-daemon default | ###i## rc-update add git-daemon default | ||
}} | |||
To make changes start immediately just run <code>rc</code> | To make changes start immediately just run <code>rc</code> | ||
{{console|body= | |||
###i## rc | ###i## rc | ||
}} | |||
=== Pull from remote === | === Pull from remote === | ||
If desired, the local mirror can be updated periodically using {{c|cron}}. This example updates daily: | |||
{{file|name=/etc/cron.daily/funtoo-sync.sh|desc=|body= | |||
#!/bin/sh | #!/bin/sh | ||
cd /home/git-mirrors/portage.git | cd /home/git-mirrors/portage.git | ||
su nobody -s "/bin/sh" -c "git fetch" | su nobody -s "/bin/sh" -c "git fetch" | ||
}} | |||
Then make the file executable: | |||
{{console|body= | |||
###i## chmod +x /etc/cron.daily/funtoo-sync.sh | |||
}} | |||
You can also update the local mirror using {{c|emerge --sync}} or {{c|eix-sync}} if you have {{c|app-portage/eix}} installed. | |||
= Cloning from the local git mirror = | |||
In order to get a funtoo instance to sync with the local git mirror, the instance's portage directory will need some work. | |||
The following is used with any funtoo instance you wish to use your local git mirror for its tree. This will change the git remote origin to point to your local {{c|git.lan}} origin, and then start using it. (This is an updated method which obviates the need to create a {{c|/usr/portage.old}} copy of the existing {{C|/usr/portage}} directory.) | |||
Local clone from {{c|git.lan}}: | |||
{{console|body= | |||
###i## cd /usr/portage | ###i## cd /usr/portage | ||
###i## git | ###i## git remote show origin | ||
###i## git remote rm origin | |||
###i## git remote add origin git://git.lan/portage.git | |||
###i## git remote show origin | |||
###i## git clone --depth 1 git://git.lan/portage.git tmp | |||
###i## rm -r .git | |||
###i## mv tmp/.git . | |||
###i## git reset --hard | |||
###i## chown -R portage:portage /usr/portage | |||
###i## eix-sync | |||
}} | |||
{{note|Use {{c|emerge --sync}} if you do not have {{c|app-portage/eix}} installed.}} | |||
[[Category:HOWTO]] | [[Category:HOWTO]] |
Revision as of 00:09, April 4, 2017
Setting up local git mirror
This tutorial explains how to save bandwidth when several local computers need to pull updates from a single remote git repository.
Use case
The more local funtoo instances you are maintaining, the more useful this will be to you. This -- along with a local Portage_Distfiles_Mirror -- can make maintaining multiple funtoo instances much faster, much more bandwidth efficient, and much less burdensome to upstream resources.
Terminology used herein
Following terms should be adapted
Terms | Definition |
---|---|
git.lan | The git-daemon local mirror host |
localhost | Any local host |
nobody | Owner user of .git files |
/home/git-mirrors | Base path of git-daemon |
Local mirror
Prepare directories and get portage tree
root # mkdir /home/git-mirrors root # chown nobody /home/git-mirrors root # su -s /bin/sh nobody user $ cd /home/git-mirrors user $ git clone --mirror --bare git://github.com/funtoo/ports-2012.git portage.git
For security purposes we will use the nobody
user .
git-daemon configuration
/etc/conf.d/git-daemon
GITDAEMON_OPTS="--syslog --verbose --enable=receive-pack --export-all"
GITDAEMON_OPTS="${GITDAEMON_OPTS} --base-path=/home/git-mirrors /home/git-mirrors --interpolated-path=/home/git-mirrors"
GIT_USER=nobody
GIT_GROUP=nobody
Service configuration
To start daemon with a mirror machine boot add git-daemon
to default runlevel
root # rc-update add git-daemon default
To make changes start immediately just run rc
root # rc
Pull from remote
If desired, the local mirror can be updated periodically using cron
. This example updates daily:
/etc/cron.daily/funtoo-sync.sh
#!/bin/sh
cd /home/git-mirrors/portage.git
su nobody -s "/bin/sh" -c "git fetch"
Then make the file executable:
root # chmod +x /etc/cron.daily/funtoo-sync.sh
You can also update the local mirror using emerge --sync
or eix-sync
if you have app-portage/eix
installed.
Cloning from the local git mirror
In order to get a funtoo instance to sync with the local git mirror, the instance's portage directory will need some work.
The following is used with any funtoo instance you wish to use your local git mirror for its tree. This will change the git remote origin to point to your local git.lan
origin, and then start using it. (This is an updated method which obviates the need to create a /usr/portage.old
copy of the existing /usr/portage
directory.)
Local clone from git.lan
:
root # cd /usr/portage root # git remote show origin root # git remote rm origin root # git remote add origin git://git.lan/portage.git root # git remote show origin root # git clone --depth 1 git://git.lan/portage.git tmp root # rm -r .git root # mv tmp/.git . root # git reset --hard root # chown -R portage:portage /usr/portage root # eix-sync
Use emerge --sync
if you do not have app-portage/eix
installed.