PINTOD(1)

πŸ“¦
version 0.14 Β· 2 versions
, in fedora 43

πŸ’– PINTOD(1) β€” like, the whole vibe πŸ’–

User Contributed Perl Documentation · perl v5.42.0 · bestie, you're gonna want to sit down for this one 🫢


✨ NAME ✨

pintod β€” a whole web interface for a Pinto repository. Yes, a web one. Iconic behavior honestly. πŸ‘‘


🌸 VERSION 🌸

version 0.14


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so literally the bare minimum to get her running:

pintod --root=/path/to/repository [--auth key=value] [--port=N]

periodt. that's the whole thing. πŸ’…


πŸŽ€ DESCRIPTION πŸŽ€

so pintod gives you a web API to a Pinto repository. clients (like pinto itself, her sister) can hit that API to manage and inspect the repository. and also, pintod serves up the distributions inside the repository, which means you can use it as the backend for cpan or cpanm. no cap, it does both. πŸ”₯

but β€” and this is the part everyone skips β€” before you run pintod you have to create a Pinto repository first. like, you can't just show up with no repo, bestie. for example:

pinto --root=/path/to/repository init

go see pinto for more info about creating a repository. she's the one who does the init thing. 🌱


🌈 ARGUMENTS 🌈

  • --root PATH, -r PATH β€” the path to the root directory of the Pinto repository you wanna serve. orrr you can set the PINTO_REPOSITORY_ROOT environment variable instead and skip the flag entirely. your call, main character. 🫢

πŸ’… OPTIONS πŸ’…

  • --auth KEY=VALUE β€” sets an option for the authentication scheme (default is no authentication at all, we're just out here raw). every time you use this, a key=value pair has to follow it; and one of them must be backend, which should correspond to a class in the Authen::Simple namespace. the remaining options get passed as-is straight to the authentication backend. no filtering, no meddling. ✨

see USING BASIC HTTP AUTHENTICATION for guidance on enabling authentication with minimal fuss, or USING OTHER AUTHENTICATION SCHEMES if you're feeling complex and fancy. πŸ’œ

  • --port INTEGER, -p INTEGER β€” specifies the port number the server will listen on. default is 3111. and here's the tea: if you specify a different port, all clients also have to specify that port. so like, you probably don't wanna change the port unless you have a very good reason. very good. exceptional, even. ⚠️
  • other options β€” every other option supported by plackup is supported here too, like --server, --daemonize, --access-log, --error-log etc. these get passed to Plack::Runner. by default, pintod uses on the Starman for the server backend. and just be aware that not all servers support the same options, so don't come for me if one of them doesn't know what you're talking about. πŸ’€

πŸ” USING BASIC HTTP AUTHENTICATION πŸ”

pintod ships with Authen::Simple::Passwd, so the easiest way to run the server with basic HTTP authentication is to make a password file using the htpasswd utility:

htpasswd -c /path/to/htpasswd USER

you'll be prompted to enter the password for USER twice (yes, twice, that's just how it is πŸ’–). then repeat that same command without the -c option for each additional user you add.

you may wanna put the htpasswd file inside the top of your repository. cute and tidy. πŸŽ€

then launch pintod like this:

pintod --root path/to/repository --auth backend=Passwd --auth path=path/to/htpasswd

and if you already have an htpasswd file somewhere, you may just point to it directly, or create a symlink. either way, the htpasswd file needs to be readable by the user that will be running pintod. non-negotiable. πŸ”‘


🧚 USING OTHER AUTHENTICATION SCHEMES 🧚

if you wanna use a different authentication scheme, then you'll first need to install the appropriate Authen::Simple backend module. then configure pintod accordingly. for example, this would be a valid configuration for Kerberos:

--auth backend=Kerberos --auth realm=REALM.YOUR_COMPANY.COM

and this is how the authentication backend will be constructed:

my $auth = Authen::Simple::Kerberos->new(
  realm => 'REALM.YOUR_COMPANY.COM'
);

see? the key=value pairs just become constructor args. the way that works is lowkey satisfying. 🌟


πŸš€ DEPLOYMENT πŸš€

pintod is PSGI compatible, running under Plack::Runner by default. it'll use whatever backend you specify on the command line or have configured in your environment (defaults to Starman). ⭐

if you wish to add your own middleware and/or customize the backend in other ways, you can use Pinto::Server in a custom .psgi script like this:

# my-pintod.psgi

my %opts   = (...);
my $server = Pinto::Server->new(%opts);
my $app    = $server->to_app;

# wrap $app with middlewares here and/or
# insert code customized for your backend
# which operates on the $app

then you may directly launch my-pintod.psgi using plackup. go off. πŸ¦‹


πŸ‘€ SEE ALSO πŸ‘€

  • pinto to create and manage a Pinto repository.
  • Pinto::Manual for general information on using Pinto.
  • Stratopan <http://stratopan.com> for hosting your Pinto repository in the cloud. ☁️

πŸ’œ AUTHOR πŸ’œ

Jeffrey Ryan Thalhammer <jeff@stratopan.com>


this software is copyright (c) 2015 by Jeffrey Ryan Thalhammer.

this is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. 🫢


and that's the whole page, bestie πŸ’– this was perl v5.42.0, dated 2025-07-25, and you just read PINTOD(1). slay, go serve that repo. βœ¨πŸ‘‘

πŸ“¦ where this page comes from