1Pinto::Manual::IntroducUtsieorn(C3o)ntributed Perl DocumPeinnttaot:i:oMnanual::Introduction(3)
2
3
4
6 Pinto::Manual::Introduction - Why Pinto exists
7
9 version 0.14
10
12 Pinto has two primary goals. First, Pinto seeks to address the problem
13 of instability in the CPAN mirrors. Distribution archives are
14 constantly added and removed from the CPAN, so if you use it to build a
15 system or application, you may not get the same result twice. Second,
16 Pinto seeks to encourage developers to use the CPAN toolchain for
17 building, testing, and dependency management of their own local
18 software, even if they never plan to release it to the CPAN.
19
20 Pinto accomplishes these goals by providing tools for creating and
21 managing your own custom repositories of distribution archives. These
22 repositories can contain any distribution archives you like, and can be
23 used with the standard CPAN toolchain. The tools also support various
24 operations that enable you to deal with common problems that arise
25 during the development process.
26
28 Over the last few years, I personally used various combinations of
29 those modules to create custom repositories at several organizations.
30 But they always required some wrapping and/or glue to make them usable
31 in the development process. And none of them seemed to be designed for
32 extension.
33
34 I wanted a tool that would work out-of-the-box, would accommodate a
35 wide range of use cases, would scale to a large number of users, and
36 could grow in unexpected directions. And so, Pinto was born.
37
39 The Pinto suite consists of several components, which are all included
40 in this distribution. For most use cases, you should treat Pinto as
41 an external application rather than a library that is integrated with
42 your own application code. I strongly recommend reading
43 Pinto::Manual::Installing for tips on installing Pinto in the manner
44 that is most appropriate for your needs.
45
46 pinto
47 pinto is a command line application for creating and managing a Pinto
48 repository. It works transparently with both remote and local
49 repositories. However, repositories can only be created locally.
50
51 pintod
52 pintod provides a web service interface to your Pinto repository. This
53 allows multiple (possibly remote) developers to manage a central
54 repository. pintod also functions as the back end HTTP server for
55 installer clients like cpan, cpanp, and cpanm.
56
57 Pinto and Pinto::Remote
58 Pinto and Pinto::Remote are the backend libraries for the pinto
59 application. These are fairly stable, but not officially public and
60 not documented. If you want to hack on Pinto's internals, or create a
61 new application around Pinto, you should start looking at these.
62
63 Pinto::Server
64 Pinto::Server is the backend library for the pintod server application.
65 It is still immature, and subject to radical change. It is based on raw
66 Plack, so if you are brave you could wrap it with various middlewares
67 to do interesting things.
68
70 Some of the terminology related to the CPAN is overloaded, which can
71 lead to some confusion. So I'll try to define some of the key terms
72 that I use throughout the documentation and the code.
73
74 Archive
75 An "archive" is the file that developers ship, which contains all their
76 application/library code, test cases, build scripts etc. Conversely,
77 the archive is the file that users must fetch to install the
78 application/library. Sometimes I also refer to these as
79 "distributions".
80
81 Package
82 A "package" is something inside a distribution archive that provides
83 some unit of functionality. In Perl, packages are declared with the
84 "package" keyword. Some folks call these "modules" but I try to avoid
85 that term because it is frequently misused.
86
87 Prerequisite
88 A "prerequisite" is a package that must be installed for the sake of
89 another distribution archive. Sometimes I call these "dependencies".
90 Pinto does not currently distinguish between different flavors of
91 prerequisites, such as "build-time" or "run-time" prerequisites.
92
94 Stack
95 All CPAN-like repositories have an index which maps the latest version
96 of each package to the archive that contains it. Usually, there is
97 only one such index. But with Pinto, there can be many indexes. Each
98 of these indexes is called a "stack". This allows you to create
99 different stacks of dependencies within a single repository. So you
100 could have a "development" stack and a "production" stack. Whenever
101 you add a distribution or upgrade a prerequisite, it only affects one
102 stack.
103
104 Pin
105 Only one version of a package can exist within a stack. So when you
106 upgrade a package in a stack, the newer version replaces the older one.
107 But sometimes, you discover that a newer version of package is
108 incompatible with your application, and you want to stay with the older
109 version until you have an opportunity to fix the problem. In those
110 situations, Pinto allows you to "pin" a particular version of a package
111 to the stack. This prevents the package from being upgraded (either
112 directly or as a prerequisite for some other package).
113
115 Pinto is a name that I sometimes use for my son Wesley (as in "pinto
116 bean"). Daddy loves you, Wes!
117
119 Pinto::Manual::Tutorial
120 Presents a narrative explanation of how to use Pinto.
121
122 Pinto::Manual::QuickStart
123 Presents a condensed summary of pinto commands.
124
126 Jeffrey Ryan Thalhammer <jeff@stratopan.com>
127
129 This software is copyright (c) 2015 by Jeffrey Ryan Thalhammer.
130
131 This is free software; you can redistribute it and/or modify it under
132 the same terms as the Perl 5 programming language system itself.
133
134
135
136perl v5.36.0 2023-01-20 Pinto::Manual::Introduction(3)