====== Distfiles ======
PLD [[http://git.pld-linux.org/cgi-bin/cgit.cgi/projects/distfiles.git/|distfiles]] handles storing external sources in distfiles.
The files are stored under ''/distfiles/by-md5/X/Y/HASH/FILENAME'',
for example: ''/distfiles/by-md5/8/1/81348932d5da294953e15d4814c74dd1/bash-4.3.tar.gz''. files in distfiles itself are accessible by ''http'' and ''ftp'' protocols.
===== Using sources file =====
Besides indicating with ''# SourceX-md5'' that source should be stored in distfiles,
a combination of distfiles handler and builder macros, allow to use ''sources'' file.
''sources'' file format: ''MD5-HASH *FILENAME'', the asterisk is ignored. for example:
bf8d53d227829d67235927689a03cc7a bash43-004
c0c00935c8b8ffff76e8ab77e7be7d15 *bash43-005
As you can see, there's no url in that file, to indicate where to fetch, You should have ''SourceX'' with same basename in your ''.spec'':
Patch10004: http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-004
Patch10005: http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-005
==== patchset macro ====
Listing sources in ''.spec'' and ''sources'' file can be annoying and duplicate work.
Therefore ''%patchset_source'' macro was created.
in Preamble define ''%patchset_source'' to inject to ''.spec'' file extra ''SourceX'' definitions:
%patchset_source -f http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-%03g 1 %{patchlevel}
this would parse:
$ rpm -E '%patchset_source -f http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-%03g 1 3'
Patch10001: http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-001
Patch10002: http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-002
Patch10003: http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-003
===== Manually forcing distfiles fetch =====
use ''make-request'' ''-df'' paramter:
$ ./make-request.sh -n bash:master -df
Distfiles Request: bash:master via /usr/sbin/sendmail
===== Dropin =====
* Uploading to dropin can be done using ''scp'' to either dropin@dropin.pld-linux.org or distfiles@dropin.pld-linux.org.
* SSH keys are copied from the git@ ''authorized_keys'' to the dropin@ ''authorized_keys'' using a gitolite hook (''~git/.gitolite/hooks/gitolite-admin/post-update.secondary''), therefore it has to be writable by git user.
* Openssh is configured to chroot both accounts into ''/var/lib/dropin'' and then run ''rssh'' which is configured to only allow ''scp'' transfers.
* There's a minimal env in ''/var/lib/dropin'' that contains ''rssh'' and ''scp''.
* Uploaded files end up in ''/var/lib/dropin/dropin''.
* Stale files get deleted after 30 days by tmpwatch.
* The scripts responsible for sending the files from dropin to distfiles (and then deleting them from dropin) are in ''~dfadm/distfiles''.
* ''run-ff.sh'' is run from dfadm's crontab every minute.
* ''chmodd.sh'' is a simple inotifywait-based script that always runs in the background (started from ''rc.local'' on system boot) and does a proper chmod on all uploaded files.