====== 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.