fmdr ---- fmdr is a little script I use to create, update and upload my Debian repositories. It supports a structure similar to that of the Debian archive, with package pools. It can create and sign the master Release file, which allows APT 0.6 or later to trust the repositories after checking the GnuPG signature of the master Release file. The repositories can be automatically copied to other directories (~ftp for instance...), even remote ones with scp and ssh. In order to use it, you have to write a little configuration file in Python (~/.fmdr/config.py), that stores a sequence of "archives" in a variable called... 'archives'. You also have to list the code names of your distributions in the variable 'codenames'. Example: ,----[ Sample ~/.fmdr/config.py ] | boring_stuff = { | "label": "work", | "master repository": "~ftp/debian", | "release file": {"origin": "Put your name here", | "label": "Label of the archive", | "description": | "Put your fancy description here"}, | "architectures": ["i386", "arm", "sparc", "alpha", "powerpc"], | "local copies": ["/path/to/a/directory", "/another/directory"], | "remote copies": [{"host": "host.example.com", | "user": "flo", | "root dir": "~/public_html/debian"}, | {"host": "anotherhost.example.com", | "user": "joe.user", | "root dir": "/path/to/destination/repository"}] | } | | experiments = { | "label": "exp", | "master repository": "/path/to/experiments/repository", | "release file": {"origin": "Florent Rougon", | "label": "Florent Rougon's packages for experiments", | "description": | "Packages written by Florent Rougon for experiments"}, | "architectures": ["i386"], | "local copies": [], | "remote copies": [], | } | | archives = [boring_stuff, experiments] | | codenames = {"unstable": "sid", | "testing": "etch", | "stable": "sarge", | "oldstable": "woody"} `---- Help about the usage of fmdr comes with 'fmdr --help'. Basically, you can: - add packages to an archive For this, you need the .changes file, because it indicates the distribution---whether the package should go to 'stable', 'unstable', etc.---and the section ('main', 'contrib' or 'non-free'). - finalize a distribution ('stable', 'unstable', etc.) Basically, this means updating the Sources[.gz,.bz2] and Packages[.gz,.bz2] files, the Release files and sign the master Release file unless the --no-sign option was specified. - manage a distribution ('stable', 'unstable', etc.) This brings up a command-line interface which allows you to list the packages in the distribution (i.e., declared in the Sources and Packages files), remove packages from the Sources and Packages files and finalize the distribution. Removing actual package files from the pool still has to be done manually, but this is easy since there is a directory for every binary package name. - upload the master repository to one or several locations (using scp and ssh, as specified in the "remote copies" member of the archive in the configuration file) - replicate the repository to one or more places (local directories) (as specified in the "local copies" member of the archive in the configuration file) Examples assuming the above configuration file: fmdr --label=work --add=sane-backends_1.0.16-5_i386.changes -> upload sane-backends to the archive whose label is "work". This will finalize the distribution where the package is uploaded (as specified in sane-backends_1.0.16-5_i386.changes), therefore you'll be prompted for a GnuPG password in order to sign the master Release file. fmdr --label=work --no-sign --add=sane-backends_1.0.16-5_i386.changes -> upload sane-backends to the archive whose label is "work". This will finalize the distribution where the package is uploaded, but the master Release file won't be signed; hence, you won't be prompted for your GnuPG password. fmdr --label=work --finalize=stable -> update the Sources[.gz,.bz2] and Packages[.gz,.bz2] files in the 'stable' distribution of the archive labeled "work", make sure that all the Release files are also present and up-to-date (generate them if necessary) and sign the master Release file with GnuPG. fmdr --label=work --upload -> upload the archive whose label is "work" to the places declared in the configuration file (on host.example.com and anotherhost.example.com with the above configuration file). fmdr --label=exp --manage=unstable -> manage the 'unstable' distribution of the archive whose label is "exp". fmdr --label=work --replicate -> replicate the archive whose label is "work" on one or more local directories (/path/to/a/directory and /another/directory in the above example). Have fun.