My collection of unofficial ports which track upstream commits is getting a bit large. I had been keeping a tab in firefox to each git repo commits/master or commits/main page open. I also keep a tab for each of my own repos because I may not know when I made my own update the last time. I have known that portscout exists and discovered that it is in our ports tree at
I am going to try to setup portscout for my collection of unofficial ports. Not long ago I organized slightly better by placing them all in one directory, GitRepos. I have so far avoided organizing them as my own sparse ports tree. Placing all the various unofficial ports into GitRepos also lets me add that directory as a shortcut in bluefish so I can include files when useful.
Installing the port is simple, I chose to build it but I could have installed with pkg.
INITIAL SET-UP
Initialise Database
The recommended database backend is PostgreSQL.
Option One: PostgreSQL
Create database:
# createuser -U pgsql -P portscout
# createdb -U pgsql portscout
Execute the included pgsql_init.sql script via "psql":
# psql portscout portscout < sql/pgsql_init.sql
This will create the database tables for you.
According to the PORTSCOUT(1) manpage I am supposed to create a user, then create the database.
root@ichigo:/home/tigersharke/GitRepos # createuser -U pgsql -P portscout
Enter password for new role:
Enter it again:
createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
root@ichigo:/home/tigersharke/GitRepos #
What seems to be necessary is databases/postgresql18-server because the first step described in the portscout manpage failed, or perhaps something failed to be installed. I installed the server and looked at the output messages to see what it may tell me about getting things going.
To use PostgreSQL, enable it in rc.conf using sysrc postgresql_enable=yes To initialize the database, run service postgresql initdb You can then start PostgreSQL by running: service postgresql start
This is what I did, using the instructions described in the order given above.
root@ichigo:/home/tigersharke/GitRepos # sysrc postgresql_enable=yes
postgresql_enable: -> yes
root@ichigo:/home/tigersharke/GitRepos # service postgresql initdb
initdb postgresql
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with this locale configuration:
locale provider: libc
LC_COLLATE: C
LC_CTYPE: C.UTF-8
LC_MESSAGES: C.UTF-8
LC_MONETARY: C.UTF-8
LC_NUMERIC: C.UTF-8
LC_TIME: C.UTF-8
The default text search configuration will be set to "english".
Data page checksums are enabled.
creating directory /var/db/postgres/data18 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default "max_connections" ... 100
selecting default "shared_buffers" ... 128MB
selecting default time zone ... America/Chicago
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/local/bin/pg_ctl -D /var/db/postgres/data18 -l logfile start
root@ichigo:/home/tigersharke/GitRepos # service postgresql start
start postgresql
root@ichigo:/home/tigersharke/GitRepos #
Now when I try the first part of the portscout setup, I get a different error so it appears that I need to investigate postgres sql server a bit.
root@ichigo:/home/tigersharke/GitRepos # createuser -U pgsql -P portscout Enter password for new role: Enter it again: createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "pgsql" does not exist root@ichigo:/home/tigersharke/GitRepos #
According to a FreeBSD forum post I believe I need to change 'pgsql' to 'postgres' for that command, so I will try this and see if it succeeds. It turns out to be the piece I missed and which may need to be changed in the portscout manpage.
root@ichigo:/home/tigersharke/GitRepos # createuser -U postgres -P portscout Enter password for new role: Enter it again: root@ichigo:/home/tigersharke/GitRepos # createdb -U postgres portscout root@ichigo:/home/tigersharke/GitRepos # psql portscout portscout < sql/pgsql_init.sql sql/pgsql_init.sql: No such file or directory. root@ichigo:/home/tigersharke/GitRepos # postgres portscout portscout < sql/pgsql_init.sql sql/pgsql_init.sql: No such file or directory. root@ichigo:/home/tigersharke/GitRepos # locate sql/pgsql_init.sql /usr/local/share/portscout/sql/pgsql_init.sql root@ichigo:/home/tigersharke/GitRepos # postgres portscout portscout < /usr/local/share/portscout/sql/pgsql_init.sql "root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user ID to prevent possible system security compromise. See the documentation for more information on how to properly start the server. root@ichigo:/home/tigersharke/GitRepos #
Easy enough to go to my user and start it there.
tigersharke@ichigo [~] % psql portscout portscout < /usr/local/share/portscout/sql/pgsql_init.sql
ERROR: permission denied for schema public
LINE 9: CREATE TABLE portdata (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE sitedata (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE moveddata (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE maildata (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE systemdata (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE allocators (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE portscout (
^
ERROR: permission denied for schema public
LINE 1: CREATE TABLE stats (
^
ERROR: relation "portscout" does not exist
LINE 2: INTO portscout (dbver)
^
ERROR: relation "stats" does not exist
LINE 2: INTO stats (key)
^
ERROR: relation "portdata" does not exist
ERROR: relation "portdata" does not exist
ERROR: relation "portdata" does not exist
ERROR: relation "portdata" does not exist
ERROR: relation "portdata" does not exist
ERROR: relation "sitedata" does not exist
ERROR: relation "moveddata" does not exist
tigersharke@ichigo [~] %
There is obviously a bit more to setup and configure but I believe the majority of portscout is ready to go. It looks like I need to copy /usr/local/etc/portscout.conf.sample to ~/portscout.conf and then edit to fit my needs. At github portscout.pod other documentation is available. As is common, if I do not define a configuration file, it will use an internal default, so I believe that is why I got so many errors above.
I made quite a few changes from the sample to my own custom configuration file, most notably that I will need to create an xml file to control how it will search for updates in GitRepo for my unofficial -dev ports.
#------------------------------------------------------------------------------ # portscout config file # # Format: # - Comments begin with '#' and extend to the end of the line # - Variables are case insensitive, and may use spaces or underscores as word # separators (i.e. ports dir == ports_dir) # - Variables are separated from their values by a single '=' # - Paths must have no trailing slash # - Use quotes if you need to retain leading/trailing whitespace # - You can reuse previously set variables, like: %(name) - these variables # must use underscores, not spaces. # # $Id: portscout.conf,v 1.16 2011/04/09 17:17:34 samott Exp $ #------------------------------------------------------------------------------ # Space saving variables (only used within this file) prefix = /usr/local tmpdir = /tmp wwwdir = %(prefix)/www/data #-- Data Provider ------------------------------------------------------------- # The DataSrc module is what portscout uses to compile information # into its internal database. In other words, it's the layer between # the repository of software and portscout itself. # Option One: FreeBSD ports (NetBSD and OpenBSD supported too) #datasrc = Portscout::DataSrc::Ports #datasrc opts = type:NetBSD # Option Two: XML file datasrc = Portscout::DataSrc::XML #datasrc opts = file:%(prefix)/etc/portscout/software.xml datasrc opts = file:/home/tigerharke/GitRepos/software.xml #-- User Privileges ----------------------------------------------------------- # If these are not empty, portscout will switch to this # user/group as soon as is practical after starting (if it # is running as root). user = portscout group = portscout #-- Directories --------------------------------------------------------------- ports dir = /usr/ports # Ports root directory html data dir = %(wwwdir)/portscout # Where to put generated HTML templates dir = %(prefix)/share/portscout/templates # Where HTML templates are kept #-- Limit Processing ---------------------------------------------------------- # The following three variables are comma-separated lists of # items that portscout should process. If left empty, portscout # will not limit itself, and will process the whole ports tree. # Items in the list may contain * and ? wildcard characters. restrict maintainer = # Limit to these maintainers restrict category = # " " " categories restrict port = # " " " ports # Note that if you set restrict_maintainer, the entire ports # tree needs to be processed to ascertain which ports meet # the restriction criterion. This can be avoided if portscout # has access to an INDEX file. If you don't have an INDEX file, # and aren't impatient, you can switch off the following. # With no maintainer restriction in place, it has no effect. indexfile enable = true # Use INDEX if needed #-- Mailing Settings ---------------------------------------------------------- # These are only required if you plan to send out reminder mails # It is enabled by default because you will need to add some # addresses to the database for anything to happen anyway. # The sender address will have the local hostname attached if it # is a bare username. #mail enable = true mail enable = false mail from = portscout # Sender address mail subject = FreeBSD ports you maintain which are out of date mail subject unmaintained = Unmaintained FreeBSD ports which are out of date mail method = sendmail # Can be 'sendmail' or 'smtp' #mail host = localhost # SMTP server, if method is 'smtp' #-- Output Settings ----------------------------------------------------------- # Timezone options. This is just eye-candy for template generation, # but setting it to anything other than 'GMT' will cause portscout # to use the local time, rather than GMT. local timezone = GMT # Use Greenwich Time # Hide results for ports with no new distfile? hide unchanged = false # Show ports with no updates. #-- Other Settings ------------------------------------------------------------ mastersite limit = 4 # Give up after this many sites oldfound enable = true # Stop if curr. distfile found precious data = false # Don't write anything to database num children = 15 # How many worker children to spawn workqueue size = 20 # How many ports per child at a time # This variable specifies what version comparison algorithm # to use. Supported values are "internal" and "pkg_version"; # the latter uses 'pkg_version -t', which is pretty straight- # forward, but makes no attempt at best-guessing backwards # looking version numbers. The former is a bit more # sophisticated. version compare = internal # Version algorithm to use # It is possible for individual ports to give us information # such as the "limit version" regex. The following variable # enables this. portconfig enable = true # Respect port config hints # If you're using portscout with a something other than the # FreeBSD ports tree, switch this off to disable rejection of # non-FreeBSD distfiles (such as 1.3.2-win32.zip). #freebsdhacks enable = true freebsdhacks enable = false # HTTP/FTP options http timeout = 120 # Timeout in seconds ftp timeout = 120 # Timeout in seconds ftp passive = true # Try to use passive FTP ftp retries = 3 # Give up after this many failures # The following tell portscout how to deal with sites which have a robots.txt # file. Possible values: # standard - Check for robots.txt but only respect portscout-specific bans. # strict - Respect all bans, including '*' wildcards. # # You can disable any robots checks with robots_enable. But think twice # before doing so: angry system admins are likely to block bots they don't # like using other methods. # # Plenty of sites have blanket robot bans, intended to stop search engine # crawlers from indexing pages, and thus 'strict' is likely to affect the # number of results we can gather. robots enable = true # Check for robots.txt files robots checking = strict # Strict robots.txt checking # Database connection details db user = portscout # Database username db name = portscout # Database name db pass = # Password # These two are only used for db_connstr, below db host = # Host db port = # Port db connstr = DBI:Pg:dbname=%(db_name) #db connstr = DBI:Pg:dbname=%(db_name);host=%(db_host);port=%(db_port) #db connstr = DBI:SQLite:dbname=/var/db/portscout.db # GitHub site handler settings # GitHub rate limits requests to its API to a very low number for unauthenticated # requests, and 5000 per hour for authenticated requests. # GitHub personal access tokens can be requested on github accounts that # have a verified email address here: https://github.com/settings/tokens # A public personal access token without any special permissions will do(!) #github token = # GitHub personal access token github token = ghQ_nG4JUadwpM2RcAQIMkneVX7C4zN96Z24IkQG # ex: ts=4 sw=4
I believe the format of the xml file is like below, which I found in https://github.com/freebsd/portscout/blob/master/Portscout/DataSrc/XML.pm and I'm sure exists amongst the portscout install but I don't know where. It seems like the details in the xml file ought to be obtained from the Makefile or distfile and looks like a lot of excess typing, is there something that would generate this? Not only that, but items like version would need to be revised each time I update the Makefiles, couldn't those specific details be pulled into an updated xml file so I would only need to edit the Makefile each time?
<items>
<item>
<category>software</category>
<name>foo</name>
<desc>Foomatic Professional</desc>
<version>0.4.3</version>
<suffix>.tar.gz</suffix>
<distname>%(name)-%(version)</distname>
<distfiles>
<file>%(distname)%(suffix)</file>
</distfiles>
<sites>
<site>http://foo.example.net/releases/</site>
<site>ftp://mirror.local/pub/foo/</site>
</sites>
<options>
<option name="limit" value="1,even" />
</options>
</item>
<item>
<category>software</category>
<name>bar</name>
<desc>Barware</desc>
<version>1.8</version>
<sites>
<site>http://example.org/software/bar/</site>
</sites>
</item>
</items>
What I will try is to create the xml file as above but only include a small portion of the content, and only for one of the unofficial ports, likely luanti-dev. After the file exists and I point portscout at it (in the config file I believe) then I will see what it does, will it check the url for the git tag and compare it to what is in the xml file?
I have been running around in circles, periodically smashing my head against a brick wall. I decided to ask Grok to see if I could get some coherent documentation or at least an understanding of all of it because I have obviously missed something.
**Portscout can be configured to scan a custom/local ports tree (or a subset of one) containing your unofficial ports.** It does not directly scan arbitrary distfile directories for version checks in the way you described (i.e., reading local distfiles first and then probing upstream). Instead, it parses each port's `Makefile` (via `make`) to extract `DISTNAME`/`DISTVERSION`, `MASTER_SITES` (including GitHub/GitLab via `USE_GITHUB`/`USE_GITLAB`), `PORTSCOUT` hints, etc., then checks those upstream sites for newer versions. ### Recommended Setup for Local/Unofficial Ports 1. **Create a ports-like directory structure** Organize your local ports like this (you can mix with a full tree or keep it separate): ``` /path/to/my-local-ports/ ├── category1/ │ └── myport1/ │ ├── Makefile │ ├── distinfo │ └── (other files) ├── category2/ │ └── myport2/ └── Makefile (optional top-level with SUBDIR entries) ``` Each `Makefile` should define the usual variables (`PORTNAME`, `DISTVERSION` or `DISTNAME`, `MASTER_SITES`, `USE_GITHUB`, `USE_GITLAB`, etc.). Portscout relies heavily on these. 2. **Configure portscout** (usually `/usr/local/etc/portscout.conf` or wherever you installed it) Key settings: ``` ports dir = /path/to/my-local-ports datasrc = Portscout::DataSrc::Ports # datasrc opts = type:FreeBSD (default; works for custom trees too) ``` You can also use restrictions to scan only specific ports/categories: ``` restrict category = category1,category2 restrict port = myport1,myport2 restrict maintainer = your@email.com ``` Other useful options: - `portconfig enable = true` (respects `PORTSCOUT=` hints in Makefiles). - `freebsdhacks enable = true` (or false if your ports aren't FreeBSD-style). - GitHub/GitLab support is built-in (including tokens for rate limits). 3. **Initialize / Populate the Database** ```sh portscout build # Full initial build (parses all Makefiles) # or portscout rebuild # Incremental (faster for updates) ``` 4. **Run Checks** ```sh portscout check # Checks upstream for new versions portscout showupdates # Console summary of updates portscout generate # HTML reports # portscout mail # Email notifications (opt-in) ``` ### Enhancing Individual Local Ports (Makefile Level) Add a `PORTSCOUT` variable in your local `Makefile`s for better behavior: ``` PORTSCOUT= site:https://github.com/user/repo/releases # Prefer specific page # or PORTSCOUT= limit:^\d+\.\d+ # Regex to filter versions # PORTSCOUT= skipb:0 # Accept betas if desired # PORTSCOUT= ignore:1 # Skip this port entirely ``` For GitHub/GitLab releases, standard `USE_GITHUB= yes` + `GH_ACCOUNT` / `GH_PROJECT` / `GH_TAGNAME` works well—portscout knows how to handle them. ### Distfile Handling Notes - Portscout does **not** primarily read your local `distfiles/` directories to determine the "current" version for comparison. It uses the version from the `Makefile` (`DISTNAME`/`DISTVERSION`). - It then probes the `MASTER_SITES` (and any `PORTSCOUT= site:...` hints) for newer files matching the expected naming pattern. - If you want it to consider a local distfile's presence, ensure your `distinfo` and `Makefile` are consistent, and the port builds cleanly with `make fetch`. - You can set `DISTDIR` in the environment or Makefile if your distfiles live elsewhere, but this is secondary for portscout's version-checking logic. ### Tips and Limitations - **Performance**: For a small local tree, reduce `num_children` and `workqueue_size` in the config. - **Incremental scans**: `portscout rebuild` + `check` is efficient if you only update a few ports. - **Custom make**: If your tree isn't standard FreeBSD, you may need to adjust `Portscout::Make` behavior or test with a small subset. - **Multiple trees**: You could maintain separate config files/databases for official vs. local ports and run them independently. - Portscout's Ports backend walks category directories looking for subdirs with Makefiles, so a clean tree structure is key. For full details, see the portscout source/docs (especially `portscout.pod`, `portscout.conf`, and `docs/portscout-portconfig.txt`). Install via `pkg install portscout` or from ports-mgmt/portscout, then run `perldoc portscout` or check the GitHub repo. This setup should let you efficiently track upstream updates for your local/unofficial ports using their defined mastersites.
#------------------------------------------------------------------------------ # portscout config file # # Format: # - Comments begin with '#' and extend to the end of the line # - Variables are case insensitive, and may use spaces or underscores as word # separators (i.e. ports dir == ports_dir) # - Variables are separated from their values by a single '=' # - Paths must have no trailing slash # - Use quotes if you need to retain leading/trailing whitespace # - You can reuse previously set variables, like: %(name) - these variables # must use underscores, not spaces. # # $Id: portscout.conf,v 1.16 2011/04/09 17:17:34 samott Exp $ #------------------------------------------------------------------------------ # Space saving variables (only used within this file) prefix = /usr/local tmpdir = /tmp wwwdir = %(prefix)/www/data #-- Data Provider ------------------------------------------------------------- # The DataSrc module is what portscout uses to compile information # into its internal database. In other words, it's the layer between # the repository of software and portscout itself. # Option One: FreeBSD ports (NetBSD and OpenBSD supported too) datasrc = Portscout::DataSrc::Ports #datasrc opts = type:NetBSD # Option Two: XML file #datasrc = Portscout::DataSrc::XML #datasrc opts = file:%(prefix)/etc/portscout/software.xml #-- User Privileges ----------------------------------------------------------- # If these are not empty, portscout will switch to this # user/group as soon as is practical after starting (if it # is running as root). user = portscout group = portscout #-- Directories --------------------------------------------------------------- #ports dir = /usr/ports # Ports root directoryports dir = /home/tigersharke/GitRepos/PortsTree # Ports root directory html data dir = %(wwwdir)/portscout # Where to put generated HTML templates dir = %(prefix)/share/portscout/templates # Where HTML templates are kept #-- Limit Processing ---------------------------------------------------------- # The following three variables are comma-separated lists of # items that portscout should process. If left empty, portscout # will not limit itself, and will process the whole ports tree. # Items in the list may contain * and ? wildcard characters. restrict maintainer = # Limit to these maintainers restrict category = # " " " categories restrict port = # " " " ports # Note that if you set restrict_maintainer, the entire ports # tree needs to be processed to ascertain which ports meet # the restriction criterion. This can be avoided if portscout # has access to an INDEX file. If you don't have an INDEX file, # and aren't impatient, you can switch off the following. # With no maintainer restriction in place, it has no effect. #indexfile enable = true # Use INDEX if neededindexfile enable = false # Use INDEX if needed #-- Mailing Settings ---------------------------------------------------------- # These are only required if you plan to send out reminder mails # It is enabled by default because you will need to add some # addresses to the database for anything to happen anyway. # The sender address will have the local hostname attached if it # is a bare username. #mail enable = truemail enable = false mail from = portscout # Sender address mail subject = FreeBSD ports you maintain which are out of date mail subject unmaintained = Unmaintained FreeBSD ports which are out of date mail method = sendmail # Can be 'sendmail' or 'smtp' #mail host = localhost # SMTP server, if method is 'smtp' #-- Output Settings ----------------------------------------------------------- # Timezone options. This is just eye-candy for template generation, # but setting it to anything other than 'GMT' will cause portscout # to use the local time, rather than GMT. local timezone = GMT # Use Greenwich Time # Hide results for ports with no new distfile? hide unchanged = false # Show ports with no updates. #-- Other Settings ------------------------------------------------------------ mastersite limit = 4 # Give up after this many sites oldfound enable = true # Stop if curr. distfile found precious data = false # Don't write anything to database num children = 15 # How many worker children to spawn workqueue size = 20 # How many ports per child at a time # This variable specifies what version comparison algorithm # to use. Supported values are "internal" and "pkg_version"; # the latter uses 'pkg_version -t', which is pretty straight- # forward, but makes no attempt at best-guessing backwards # looking version numbers. The former is a bit more # sophisticated. version compare = internal # Version algorithm to use # It is possible for individual ports to give us information # such as the "limit version" regex. The following variable # enables this. portconfig enable = true # Respect port config hints # If you're using portscout with a something other than the # FreeBSD ports tree, switch this off to disable rejection of # non-FreeBSD distfiles (such as 1.3.2-win32.zip). #freebsdhacks enable = truefreebsdhacks enable = false # HTTP/FTP options http timeout = 120 # Timeout in seconds ftp timeout = 120 # Timeout in seconds ftp passive = true # Try to use passive FTP ftp retries = 3 # Give up after this many failures # The following tell portscout how to deal with sites which have a robots.txt # file. Possible values: # standard - Check for robots.txt but only respect portscout-specific bans. # strict - Respect all bans, including '*' wildcards. # # You can disable any robots checks with robots_enable. But think twice # before doing so: angry system admins are likely to block bots they don't # like using other methods. # # Plenty of sites have blanket robot bans, intended to stop search engine # crawlers from indexing pages, and thus 'strict' is likely to affect the # number of results we can gather. robots enable = true # Check for robots.txt files robots checking = strict # Strict robots.txt checking # Database connection details db user = portscout # Database username db name = portscout # Database namedb pass = portscout # Password # These two are only used for db_connstr, below #db host = # Host #db port = #db host = localhost # or 127.0.0.1 db port = 5432 db connstr = DBI:Pg:dbname=%(db_name) #db connstr = DBI:Pg:dbname=%(db_name);host=%(db_host);port=%(db_port) #db connstr = DBI:SQLite:dbname=/var/db/portscout.db # GitHub site handler settings # GitHub rate limits requests to its API to a very low number for unauthenticated # requests, and 5000 per hour for authenticated requests. # GitHub personal access tokens can be requested on github accounts that # have a verified email address here: https://github.com/settings/tokens # A public personal access token without any special permissions will do(!) #github token = # GitHub personal access tokengithub token = ghQ_nG4JUadwpM2RcAQIMkneVX7C4zN96Z24IkQG # ex: ts=4 sw=4
And then I asked Grok about setting up postgres properly, because I likely goofed that up also.
**Portscout uses PostgreSQL (recommended) or SQLite** to store port metadata, version information, check results, maintainer emails, etc. For a local/unofficial ports tree, the PostgreSQL setup is essentially the same as for the official tree — you just point it at your custom `ports dir`. ### 1. Install PostgreSQL on FreeBSD ```sh pkg install postgresql17-server postgresql17-client sysrc postgresql_enable=YES service postgresql initdb service postgresql start ``` (Adjust version number if you prefer a different one.) ### 2. Create the Portscout Database User and Database As root or with `sudo`: ```sh # Create the user (prompts for a password) createuser -U postgres -P -d portscout # -d allows it to create databases if needed # Create the database createdb -U postgres -O portscout portscout ``` ### 3. Initialize the Schema Portscout ships with the SQL script: ```sh psql -U portscout -d portscout -f /usr/local/share/portscout/sql/pgsql_init.sql ``` (If installed via ports/pkg, the path is usually under `/usr/local/share/portscout/sql/`.) ### 4. Configure portscout for PostgreSQL Edit (or copy from sample) `/usr/local/etc/portscout.conf` (or wherever your config lives): ```conf # Database settings db user = portscout db name = portscout db pass = your_password_here # Leave empty if using trust/peer auth db host = localhost # or 127.0.0.1 db port = 5432 db connstr = DBI:Pg:dbname=%(db_name);host=%(db_host);port=%(db_port) # Or simpler if local Unix socket + trust/peer: # db connstr = DBI:Pg:dbname=%(db_name) ``` **Important options for local ports usage:** ```conf ports dir = /path/to/my-local-ports # Your custom tree root # Optional restrictions (very useful for unofficial ports) restrict category = mycategory1,mycategory2 restrict port = myport1,myport2 restrict maintainer = your@email.com datasrc = Portscout::DataSrc::Ports # datasrc opts = type:FreeBSD # usually not needed portconfig enable = true # Respect PORTSCOUT= hints in Makefiles freebsdhacks enable = false # Set to false if your tree isn't FreeBSD-style ``` Other performance tweaks for smaller trees: - `num children = 4` (or lower) - `workqueue size = 10` ### 5. Authentication (pg_hba.conf) For simplicity on a local machine, edit `/var/db/postgres/data/pg_hba.conf` (or equivalent) and add near the top (before other rules): ``` # TYPE DATABASE USER ADDRESS METHOD local portscout portscout trust host portscout portscout 127.0.0.1/32 scram-sha-256 # or md5 ``` Then reload: ```sh service postgresql reload ``` ### 6. Test and Populate ```sh portscout build # First full parse of your local tree portscout rebuild # Later incremental updates portscout check # Check for new upstream versions portscout showupdates # See results ``` ### Notes for Local/Unofficial Ports - Your local tree must have a standard structure (`category/port/Makefile` etc.) so the `Ports` data source can walk it. - `build`/`rebuild` will call `make` in each port directory, so your Makefiles must be valid. - PostgreSQL gives much better performance than SQLite, especially if you ever scale beyond a handful of ports. - You can run multiple independent Portscout setups (different config files + different DB names) for official vs. local ports. For full details, see the installed documentation: - `perldoc portscout` - `/usr/local/share/doc/portscout/` or the GitHub repo (portscout.pod and portscout.conf). This setup works cleanly with your local ports tree while leveraging PostgreSQL for reliable storage and querying of version data.
The results were much much more positive.
# service postgresql initdb
initdb postgresql
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with this locale configuration:
locale provider: libc
LC_COLLATE: C
LC_CTYPE: C.UTF-8
LC_MESSAGES: C.UTF-8
LC_MONETARY: C.UTF-8
LC_NUMERIC: C.UTF-8
LC_TIME: C.UTF-8
The default text search configuration will be set to "english".
Data page checksums are enabled.
creating directory /var/db/postgres/data18 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default "max_connections" ... 100
selecting default "shared_buffers" ... 128MB
selecting default time zone ... America/Chicago
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/local/bin/pg_ctl -D /var/db/postgres/data18 -l logfile start
# service postgresql start
start postgresql
# createuser -U postgres -P -d portscout
Enter password for new role:
Enter it again:
# createdb -U postgres -O portscout portscout
# psql -U portscout -d portscout -f /usr/local/share/portscout/sql/pgsql_init.sql
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
#
My unofficial ports are not arranged in a tree form, they're only a bunch of directories in a main directory GitRepos. For portscout to work properly, it uses make for its tasks, so I need to setup a PortsTree directory with all the directories named similarly and with all the Makefiles in each directory as well. This is a simple thing to do, I copy and revise what exists in /usr/ports and each category directory.
I need to edit a few more things.
root@ichigo:~ # vi /var/db/postgres/data18/pg_hba.conf # TYPE DATABASE USER ADDRESS METHODlocal portscout portscout trust host portscout portscout 127.0.0.1/32 scram-sha-256 # or md5 # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. /var/db/postgres/data18/pg_hba.conf: 129 lines, 5851 characters root@ichigo:~ #
root@ichigo:~ # service postgresql start start postgresql pg_ctl: another server might be running; trying to start server anyway pg_ctl: could not start server Examine the log output. root@ichigo:~ # service postgresql initdb initdb postgresql The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with this locale configuration: locale provider: libc LC_COLLATE: C LC_CTYPE: C.UTF-8 LC_MESSAGES: C.UTF-8 LC_MONETARY: C.UTF-8 LC_NUMERIC: C.UTF-8 LC_TIME: C.UTF-8 The default text search configuration will be set to "english". Data page checksums are enabled. initdb: error: directory "/var/db/postgres/data18" exists but is not empty initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/db/postgres/data18" or run initdb with an argument other than "/var/db/postgres/data18". root@ichigo:~ #
That error I tried to solve but saw more error messages instead. I was working in multiple xterm windows and may have erased
tigersharke@ichigo [~/GitRepos] % psql -U portscout -d portscout -f /usr/local/share/portscout/sql/pgsql_init.sql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "portscout" does not exist
tigersharke@ichigo [~/GitRepos] % createuser -U postgres -P -d portscout
Enter password for new role:
Enter it again:
tigersharke@ichigo [~/GitRepos] % createdb -U postgres -O portscout portscout
tigersharke@ichigo [~/GitRepos] % portscout build
portscout v0.8.1, by Shaun Amott
DBD::Pg::st execute failed: ERROR: relation "portscout" does not exist
LINE 2: FROM portscout
^ at /usr/local/lib/perl5/site_perl/Portscout/Util.pm line 856.
DBD::Pg::st fetchrow_array failed: no statement executing at /usr/local/lib/perl5/site_perl/Portscout/Util.pm line 858.
Database schema mismatch; did you forget to upgrade?
tigersharke@ichigo [~/GitRepos] % psql -U portscout -d portscout -f /usr/local/share/portscout/sql/pgsql_init.sql
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
tigersharke@ichigo [~/GitRepos] % portscout build
portscout v0.8.1, by Shaun Amott
-- [ Building ports database ] -----------------------------------------
Couldn't stat MOVED file at /usr/local/lib/perl5/site_perl/Portscout/DataSrc/Ports.pm line 220.
tigersharke@ichigo [~/GitRepos] % portscout build
portscout v0.8.1, by Shaun Amott
-- [ Building ports database ] -----------------------------------------
Scanning deskutils ...
Matched: deskutils/flameshot-dev
Scanning games ...
Matched: games/endless-sky-dev
Matched: games/minetestmapper-dev
Matched: games/luanti-dev
Matched: games/endless-sky-high-dpi-dev
Matched: games/lutris-freebsd
Scanning graphics ...
Matched: graphics/feh-dev
Scanning www ...
Matched: www/librewolf-dev
Scanning x11-fonts ...
Matched: x11-fonts/google-fonts-dev
Scanning x11-wm ...
Matched: x11-wm/fvwm3-dev
Building...
[deskutils ] [flameshot-dev ] (got 1 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/deskutils/flameshot-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[games ] [endless-sky-dev ] (got 2 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/games/endless-sky-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[games ] [minetestmapper-dev ] (got 3 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/games/minetestmapper-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[games ] [luanti-dev ] (got 4 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/games/luanti-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[games ] [endless-sky-high-dpi-dev ] (got 5 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/games/endless-sky-high-dpi-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[games ] [lutris-freebsd ] (got 6 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/games/lutris-freebsd at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[graphics ] [feh-dev ] (got 7 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/graphics/feh-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[www ] [librewolf-dev ] (got 8 out of 10)
Insufficient data for port www/librewolf-dev: missing version
[x11-fonts ] [google-fonts-dev ] (got 9 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/x11-fonts/google-fonts-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
[x11-wm ] [fvwm3-dev ] (got 10 out of 10)
make failed for /home/tigersharke/GitRepos/PortsTree/x11-wm/fvwm3-dev at /usr/local/lib/perl5/site_perl/Portscout/Make.pm line 161.
Cross-referencing master/slave ports...
Processing MOVED entries...
Finalising pending MOVED terminations...
tigersharke@ichigo [~/GitRepos] %
Since this is not the FreeBSD ports tree, portscout doesn't know that I likely would not have a MOVED file, so I simply touch MOVED in the PortsTree directory to satisfy that. Maybe there is a method to properly generate a MOVED file, I do not know. The output above seems to indicate that I have to improve my Makefiles, so I will see what portlint tells me, its likely something easy to cure. The main issue was DISABLE_LICENSES="YES" in /etc/make.conf and the rest were improvements to Makefiles and other files that portlint helped me implement.
The result is now something that looks like it will help me in the future, but I can test now by revising luanti-dev to an older commit, reverting the distinfo file to match.
tigersharke@ichigo [~/GitRepos/PortsTree] % portscout rebuild portscout v0.8.1, by Shaun Amott Incremental build: Looking for updated ports... Scanning deskutils ... Scanning deskutils/flameshot-dev ... Matched: deskutils/flameshot-dev Scanning games ... Scanning games/endless-sky-dev ... Matched: games/endless-sky-dev Scanning games/minetestmapper-dev ... Matched: games/minetestmapper-dev Scanning games/luanti-dev ... Scanning games/endless-sky-high-dpi-dev ... Scanning games/lutris-freebsd ... Matched: games/lutris-freebsd Scanning graphics ... Scanning graphics/feh-dev ... Matched: graphics/feh-dev Scanning www ... Scanning www/librewolf-dev ... Scanning x11-fonts ... Scanning x11-fonts/google-fonts-dev ... Scanning x11-wm ... Scanning x11-wm/fvwm3-dev ... Building... [deskutils ] [flameshot-dev ] (got 1 out of 5) [games ] [endless-sky-dev ] (got 2 out of 5) [games ] [minetestmapper-dev ] (got 3 out of 5) [games ] [lutris-freebsd ] (got 4 out of 5) [graphics ] [feh-dev ] (got 5 out of 5) Cross-referencing master/slave ports... tigersharke@ichigo [~/GitRepos/PortsTree] %
Since all of this looks like it is setup and ready, I try portscout check to see what it thinks has updated.
root@ichigo:/home/tigersharke/GitRepos/PortsTree # portscout check portscout v0.8.1, by Shaun Amott Couldn't determine GID from name portscout root@ichigo:/home/tigersharke/GitRepos/PortsTree # exit
That is not a very helpful message as it seems to work fine if I am not root so perhaps warn of user being root instead? I figured it out anyway.
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout
Usage:
portscout build
portscout rebuild
portscout check
portscout uncheck
portscout mail
portscout generate
portscout showupdates
portscout add-mail user@host ...
portscout remove-mail user@host ...
portscout show-mail
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout check
portscout v0.8.1, by Shaun Amott
-- [ Checking ports distfiles ] ----------------------------------------
Spawned PID #14150 (0 ports unallocated)
[lutris-freebsd ] VersionCheck()
[lutris-freebsd ] Checking site: https://codeload.github.com/lutris/lutris/tar.gz/0c93c2fad546e684346c8fe3179ab797d5e033f3?dummy=/
Does site handler exist ... Yes
[lutris-freebsd ] Done
[feh-dev ] VersionCheck()
[feh-dev ] Checking site: https://codeload.github.com/derf/feh/tar.gz/c5e05ad638e819f0f9852df9b33400ca63662d19?dummy=/
Does site handler exist ... Yes
[feh-dev ] [https://code...3662d19?dummy=/] UPDATE g20260507 -> 3.12.2
[feh-dev ] Done
[endless-sky-dev ] VersionCheck()
[endless-sky-dev ] Checking site: https://codeload.github.com/endless-sky/endless-sky/tar.gz/2d14be69937685d9b52df1ea3270cacab1f1cfcc?dummy=/
Does site handler exist ... Yes
[endless-sky-dev ] Done
[minetestmapper-dev ] VersionCheck()
[minetestmapper-dev ] Checking site: https://codeload.github.com/luanti-org/minetestmapper/tar.gz/b5d41a35c388db377edda60c01969fe0fa113ca4?dummy=/
Does site handler exist ... Yes
[minetestmapper-dev ] Done
[flameshot-dev ] VersionCheck()
[flameshot-dev ] Checking site: https://codeload.github.com/flameshot-org/flameshot/tar.gz/a6694bf45ace6a8552351d5f9ca6f006786ce6f9?dummy=/
Does site handler exist ... Yes
[flameshot-dev ] Done
PID #30712 finished work block (took 6 seconds)
Master process finished. All work has been distributed.
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] %
I believe feh-dev is actually current to the most recent commit, so I may need to adjust something but setting luanti-dev to use an older commit might help me with additional feedback. After the adjustment to luanti-dev I need to do portscout rebuild for it to see that something changed locally and then the portscout check will give me a result.
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout rebuild
portscout v0.8.1, by Shaun Amott
Incremental build: Looking for updated ports...
Scanning deskutils ...
Scanning deskutils/flameshot-dev ... Scanning games ...
Scanning games/endless-sky-dev ... Scanning games/minetestmapper-dev ... Scanning games/luanti-dev ... Matched: games/luanti-dev
Scanning games/endless-sky-high-dpi-dev ... Scanning games/lutris-freebsd ... Scanning graphics ...
Scanning graphics/feh-dev ... Scanning www ...
Scanning www/librewolf-dev ... Scanning x11-fonts ...
Scanning x11-fonts/google-fonts-dev ... Scanning x11-wm ...
Scanning x11-wm/fvwm3-dev ...
Building...
[games ] [luanti-dev ] (got 1 out of 1)
Cross-referencing master/slave ports...
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout check
portscout v0.8.1, by Shaun Amott
-- [ Checking ports distfiles ] ----------------------------------------
Spawned PID #57294 (0 ports unallocated)
[luanti-dev ] VersionCheck()
[luanti-dev ] Checking site: https://codeload.github.com/luanti-org/luanti/tar.gz/bb7fcd32c7da2f5610458e679f567dbc09a1c909?dummy=/
Does site handler exist ... Yes
[luanti-dev ] [https://code...9a1c909?dummy=/] UPDATE g20260502 -> 5.16.0
[luanti-dev ] Done
[minetestmapper-dev ] VersionCheck()
[minetestmapper-dev ] Checking site: https://codeload.github.com/luanti-org/minetestmapper/tar.gz/b5d41a35c388db377edda60c01969fe0fa113ca4?dummy=/
Does site handler exist ... Yes
[minetestmapper-dev ] Done
[feh-dev ] VersionCheck()
[feh-dev ] Checking site: https://codeload.github.com/derf/feh/tar.gz/c5e05ad638e819f0f9852df9b33400ca63662d19?dummy=/
Does site handler exist ... Yes
[feh-dev ] Done
[lutris-freebsd ] VersionCheck()
[lutris-freebsd ] Checking site: https://codeload.github.com/lutris/lutris/tar.gz/0c93c2fad546e684346c8fe3179ab797d5e033f3?dummy=/
Does site handler exist ... Yes
[lutris-freebsd ] Done
[flameshot-dev ] VersionCheck()
[flameshot-dev ] Checking site: https://codeload.github.com/flameshot-org/flameshot/tar.gz/a6694bf45ace6a8552351d5f9ca6f006786ce6f9?dummy=/
Does site handler exist ... Yes
[flameshot-dev ] Done
[endless-sky-dev ] VersionCheck()
[endless-sky-dev ] Checking site: https://codeload.github.com/endless-sky/endless-sky/tar.gz/2d14be69937685d9b52df1ea3270cacab1f1cfcc?dummy=/
Does site handler exist ... Yes
[endless-sky-dev ] Done
PID #71632 finished work block (took 6 seconds)
Master process finished. All work has been distributed.
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout
Usage:
portscout build
portscout rebuild
portscout check
portscout uncheck
portscout mail
portscout generate
portscout showupdates
portscout add-mail user@host ...
portscout remove-mail user@host ...
portscout show-mail
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] % portscout showupdates
portscout v0.8.1, by Shaun Amott
nope@nothere's ports:
games/luanti-dev g20260502 -> 5.16.0
graphics/feh-dev g20260507 -> 3.12.2
tigersharke@ichigo [~/GitRepos/PortsTree/games/luanti-dev] %
I know that portscout is technically correct, both luanti-dev and feh-dev have updates, or versions that do not match what I use due to following upstream commits. There is surely a way to handle this, and maybe the answer is in the ports tree with another bleeding edge variety that follows upstream commits.
I didn't need to edit an xml file, the configuration I ultimately used did not involve one. Some of the commands Grok gave me seem to have been more successful than those from documentation. It is important to do some tasks as root and some, especially directly interacting with portscout as a user not root. There also seem to be changes outside of portscout that I had to adjust for that were not in the documentation I was trying to follow.
Looking deeper into portscout confirms for me that there is no method to compare commit hashes as a basis to determine an upstream update. Grok suggested to use tags but those also tend to be normal version numbers and not tied to commits either. I asked how I could extend portscout to handle commit hashes, and maybe this is possible but I suspect I would be relying heavily upon how Grok suggests to do it since I know approximately zero about perl.
**An extension to portscout’s GitHub/GitLab site handlers would be a new Perl module** that follows the existing pattern used by `Portscout::SiteHandler::GitHub`, `::PyPI`, and `::SourceForge`.
### Architecture Overview
Site handlers are auto-registered Perl classes in `Portscout/SiteHandler/`. Key points from the core:
- `Portscout::SiteHandler.pm` maintains `@sitehandlers` and has `FindHandler()` which calls `CanHandle()` on each.
- Each handler must:
- `push @Portscout::SiteHandler::sitehandlers, __PACKAGE__;`
- Implement `new()`, `CanHandle($url)`, and `GetFiles($url, \%port, \@files)`.
- `GetFiles()` populates the `@$files` array with candidate distfile URLs (or version strings) that the main engine later compares against the port’s current `DISTVERSION`.
The **GitHub handler** currently:
- Detects codeload / archive URLs.
- Calls the GitHub API (`/repos/.../releases` then falls back to `/tags`).
- Collects `tarball_url`s from non-draft/non-prerelease releases (or tags).
### What a Commit/Branch-Aware Extension Could Look Like
For your use case (tracking latest commit on a branch instead of tagged versions), you could create something like `Portscout::SiteHandler::GitHubCommits` or enhance the existing one.
#### Example: `Portscout/SiteHandler/GitHubCommits.pm`
```perl
#------------------------------------------------------------------------------
package Portscout::SiteHandler::GitHubCommits;
use JSON qw(decode_json);
use LWP::UserAgent;
use URI::Escape;
use Portscout::Const;
use Portscout::Config;
use strict;
push @Portscout::SiteHandler::sitehandlers, __PACKAGE__;
our %settings;
sub new {
my $self = {};
bless($self, shift);
$self->{name} = 'GitHubCommits';
return $self;
}
# CanHandle: Trigger on ports that want commit tracking
# You could key off PORTSCOUT= commit:branchname or a specific URL pattern
sub CanHandle {
my ($self, $url) = @_;
# Example patterns or check $port->{portscout} hints
return ($url =~ /github\.com/ && $url =~ /\/(archive|tar\.gz)/);
# Or more specific: look for a custom PORTSCOUT flag parsed earlier
}
sub GetFiles {
my ($self, $url, $port, $files) = @_;
my $owner_repo = _extract_owner_repo($url) or return 0;
my $branch = $port->{portscout_branch} || 'main'; # Could come from PORTSCOUT= or Makefile
# Get latest commit on branch
my $data = _call_github_api("/repos/$owner_repo/commits/$branch") or return 0;
if (my $sha = $data->{sha}) {
# Construct a tarball URL using the commit hash
my $tarball_url = "https://github.com/$owner_repo/archive/$sha.tar.gz";
push @$files, $tarball_url;
# Optionally also store the short SHA or date for version comparison
_debug("Found latest commit $sha on $branch");
}
return 1;
}
# Reuse or copy the _call_github_api from GitHub.pm (support token, etc.)
sub _call_github_api { ... } # identical to the one in GitHub.pm
sub _extract_owner_repo { ... }
sub _debug { ... }
1;
```
### Integration & Configuration Ideas
1. **Makefile-level hints** (best approach):
```make
PORTSCOUT= site:github-commits branch:main # or "commit:main"
# Or
PORTSCOUT= limit:^g[0-9]{8} site:https://api.github.com/repos/user/repo/commits/main
```
2. Extend `Portscout::Make` or the port parsing logic to extract extra fields like `portscout_branch` from the `PORTSCOUT` variable.
3. **Version comparison logic**:
- For commit tracking you often want to compare SHA or commit date rather than semver.
- You might need to extend the core comparison (in `Portscout.pm` or wherever versions are ranked) to understand “newer commit” semantics when a handler flags it.
4. **GitLab equivalent** would be almost identical, just using `api.gitlab.com` or self-hosted endpoints (`/projects/.../repository/commits`).
### Practical Steps to Implement
- Copy `GitHub.pm` as a starting point.
- Place the new `.pm` in `/usr/local/lib/perl5/site_perl/Portscout/SiteHandler/` (or wherever portscout installs modules).
- Register it by ensuring the `push` statement runs (it happens at `use`/`require` time).
- Test with `portscout -d rebuild` and `portscout -d check` on a sample port.
- Handle rate limits (GitHub token in `portscout.conf` already exists).
This kind of extension is relatively straightforward because the design is already pluggable. Many people have extended portscout (or its predecessor portroach) this way in the past.
If you want a full “latest commit on default branch” mode, the handler above (plus small core tweaks for version extraction) would get you most of the way there. Would you like a more complete skeleton or help with the `PORTSCOUT` parsing part?
Many may suggest that using AI such as Grok to figure something out is not the best way to get the solution. I say that if documentation is sparse or spread out or nonexistent, then maybe a tool that has scraped places old and new that also may not be accessible or known could help. If only to point toward solutions or sources of solutions, using AI will be helpful and speed a solution.
Surely portscout documentation could use some improvement. There might be some things that are left out of the manpage and documentation, or that have changed since it was originally written. I believe that extending portscout to check for upstream commits (hashes) instead of version strings or tags (also versions) would be a very useful and helpful addition to the tool.
Right now I have portscout setup to handle all my unofficial ports but it will not tell me anything has updated until a new version rather than a new commit has been made. All of my unofficial ports get updated based upon upstream commits. Why should I have to pair portscout with another tool if it could be a one-stop solution to knowing whether any of my growing list of unofficial ports has an upstream commit. Six is already becoming a challenge, so I can imagine how helpful it is for porters who have more than double or triple that number of ports that are updated based upon upstream release versions.
I tried to use portscout to help me but I mostly learned how to install and configure it properly despite my struggle with the documentation, it will not yet do what I need.
No comments:
Post a Comment