pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/pkgtools/distlint/files



Module Name:    pkgsrc
Committed By:   rillig
Date:           Sat Aug 20 13:32:06 UTC 2022

Added Files:
        pkgsrc/pkgtools/distlint/files: README.md

Log Message:
pkgtools/distlint: add initial draft document, no package yet


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 pkgsrc/pkgtools/distlint/files/README.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: pkgsrc/pkgtools/distlint/files/README.md
diff -u /dev/null pkgsrc/pkgtools/distlint/files/README.md:1.1
--- /dev/null   Sat Aug 20 13:32:06 2022
+++ pkgsrc/pkgtools/distlint/files/README.md    Sat Aug 20 13:32:06 2022
@@ -0,0 +1,122 @@
+$NetBSD: README.md,v 1.1 2022/08/20 13:32:06 rillig Exp $
+
+# Introduction
+
+Distlint ensures that the distfiles on the TNF servers conform to the
+license requirements.
+
+Distfiles distributed under the GPL must be kept available for as long
+as a binary package based on this distfile is distributed, plus 3
+years.<sup>[citation needed]</sup>
+
+Distfiles from packages with `NO_SRC_ON_FTP` must not be available at all.
+
+Edge case: Imagine a package having `NO_SRC_ON_FTP` and multiple distfiles.
+Some of them must not be available, the others have license GPL.
+
+# Configuration
+
+Distlint is configured by the `distlint.conf` file, which contains one
+or more distdir sections. Each such section configures how a single
+distdir is related to the directories for pkgsrc installations and
+binary package directories:
+
+~~~text
+# Each distdir can be populated by several pkgsrc versions, such as 
+# pkgsrc-current and the quarterly branches.
+# Each distdir can be the source for multiple distributions of binary
+# packages, for example for different platforms. 
+
+distdir /usr/pkgsrc/distfiles
+        database /var/db/distlint/main 
+        pkgsrc /usr/pkgsrc-current
+        pkgsrc /usr/pkgsrc-2022Q2
+        pkgsrc /usr/pkgsrc-2022Q1
+        packages /usr/pkgsrc/packages
+        packages /usr/pkgsrc/current-packages
+
+distdir /pub/pkgsrc-archive/distfiles
+        database /var/db/distlint/archive                
+        pkgsrc /pub/pkgsrc-archive/pkgsrc
+        packages /pub/pkgsrc-archive/packages       
+~~~
+
+# Infrastructure overview
+
+* https://cdn.netbsd.org/pub/pkgsrc/distfiles/
+* https://cdn.netbsd.org/pub/pkgsrc/packages/
+* https://archive.netbsd.org/pub/pkgsrc-archive/distfiles/
+* https://archive.netbsd.org/pub/pkgsrc-archive/packages/
+
+# Approach
+
+Distlint maintains a database of distfile requirements.
+The requirements are collected from all pkgsrc branches that are either
+current or in the archive.
+
+## Examples of database entries
+
+_$distfile_ must not be in distfiles, because on _$updated_at_,
+it belonged to package _$pkgname_ in _$pkgpath_,
+which was marked as `NO_SRC_ON_FTP` because _$no_src_on_ftp_.
+
+_$distfile_ must be kept in distfiles until _$keep_until_,
+because on _$updated_at_, it belonged to package _$pkgname_,
+which is published at _$publish_url_ and licensed under _$license_.
+
+# Implementation details
+
+## NO_SRC_ON_FTP
+
+To find out whether a binary package has `NO_SRC_ON_FTP`, look at its
+`+BUILD_INFO`.
+
+## Find out the distfiles of a binary package
+
+For most binary packages, the file `+BUILD_VERSION` contains the CVS
+revision information of the `distinfo` file.
+
+Some packages use `DISTINFO_FILE` to refer to a `distinfo` file outside
+their PKGPATH. The CVS revision information for these `distinfo` files is
+not recorded anywhere.
+
+Some packages have no `distinfo` file at all because they are self-contained.
+Example: pkgtools/lintpkgsrc.
+
+Whether a binary package had a `distinfo` file or not is not visible from
+looking at the binary package alone.
+
+Using the CVS revision information of the `distinfo` file,
+its file list can be retrieved from CVS.
+
+# Quick hacks
+
+## Find distfiles with NO_SRC_ON_FTP
+
+This program finds most distfiles with NO_SRC_ON_FTP that are referenced
+from the current pkgsrc tree.
+
+Shortcomings:
+
+* It does not find distfiles from stable pkgsrc branches.
+* It does not find distfiles from previous versions of the packages.
+* It does not find distfiles from packages with `DISTINFO_FILE`.
+
+~~~shell
+ssh ftp.netbsd.org
+cd /pub/pkgsrc/current/pkgsrc
+
+for pkgpath in $(grep -r NO_SRC_ON_FTP . 2>/dev/null | cut -d/ -f2-3); do
+
+  if [ -f "$pkgpath/distinfo" ] &&
+    ! grep -r MASTER_SITE_LOCAL "$pkgpath" >/dev/null 2>&1; then
+
+    sed -n 's,^Size (\(.*\)) =.*$,\1,p' "$pkgpath/distinfo" |
+      while read distfile; do
+        if [ -f "/pub/pkgsrc/distfiles/$distfile" ]; then
+          echo "$distfile"
+        fi
+      done
+  fi
+done | sort
+~~~



Home | Main Index | Thread Index | Old Index