Table of Contents
How to become a PLD developer
This article will attempt to explain the basics of a Linux-based distribution development process.
Required knowledge
As PLD Linux is an RPM-based distribution, the following knowledge is assumed:
- Basic
rpm
operation - Use of versioning tools such as
git
- Handling file differencies using
diff
andpatch
- Building applications from their sources
Inside PLD
Unlike other big distributions, there is no commercial support behind PLD Linux. The developer community consists of people who either need to get their work done or simply enjoy contributing to an open project (or both).
Internally, PLD is split into distribution lines. Currently there are three of them:
- PLD Ra/1.0 (released some time ago)
- PLD Ac/2.0 (stable)
- PLD Th/3.0 (in development)
Each line has a person in charge of it, called the Release Manager. RMs spend time maintaining parts of PLD's infrastructure, making decisions if other developers can't agree on something by themselves and taking care of the content of our FTP server.
Other than that, most developers spend their time maintaining packages which usually means working on spec
files (explained later). There is no enforced responsibility and everyone is free to work on any package they want. The only rule is to only touch things when you are sure you know what you are doing. In other words, people don't randomly pick a package and update it, but rather work only on the stuff they have a need for. It might sound a bit chaotic, but this model is quite stable, since every change is almost immediately reviewed. Not to mention that developers like this kind of organization very much, since they don't need anyone's permission to introduce changes they need.
Getting more technical
Spec files
A spec
file contains metadata and building instruction required to create at least one RPM package. It is a text file suitable for processing with the builder script which in turn handles the whole building process from fetching all the necessary sources from PLD's infrastructure (or directly from the Internet) to packaging the results into installable RPM files (the latter being done by the rpmbuild
utility).
You can also read more on spec files.
All the spec
files reside inside their respective package dir of our GIT server. rpm-build-tools package, containing builder
script, also contains some special files, the most crucial being the builder
script.
The builder script
The builder
script is responsible for the whole package assembly process. It fetches all the needed sources, checks for required dependencies, unpacks the sources, compiles them and finally packages the result into installable RPM files.
You can also read more on builder script.
The script can be run by any user inside a special directory structure under that user's home directory and heavily depends on the rpmbuild
binary provided by the rpm-build
package.
The same script is used by machines forming the PLD building farm to build packages that can be found on our FTP server.
The adapter script
The adapter
script is a tool to aid you in the process of writing clean spec
files. It can automatically perform a number of cleaning tasks and take care of some common mistakes found in spec
files.
PLD is very strict when it comes to spec
files so you are advised to adapterize each and every file before either sending it to the developer list or commiting it into the repository.
You can also read more on adapter script.
PLD building farm
The building farm is a cluster of machines used to build RPM files from their spec
equivalents. Each machine has a specific purpose. Some build packages for specific architectures, while others create src.rpm packages containing everything required to build a given package. There are also machines that serve as testing environments for developers to do package building and debugging.
You can also read more on PLD machines.
Each distribution line has it's own set of builders and it's own building queue maintained by a group of trusted developers.
Becoming involved
Mailing lists
You should start right off by subscribing to at least some of our mailing lists. Especially the pld-devel-en
(or pl
for Polish speaking developers) list and possibly also pld-discuss
for various distribution-related discussions.
Take note that there is a special pld-cvs-commit
list but it's not meant for direct posting. Instead, this list collects GIT, SVN or CVS commits and website changes commited by PLD Linux developers.
Preparing your working environment
Working on packages
Start with simple things. Picking random package and updating it might seem like a good idea, but it'll eventually get you in trouble. Breaking an app someone depends on won't hurt the distribution itself that much, but people will get angry at you and making future changes will get a lot harder. Try adding a spec
file for that little application you use for your everyday work or update an existing spec
for a new release of some useful tool you just can't live without.
Before you decide you are done, double-check your dependencies section for all necessary packages and make sure the package builds cleanly (for instance, no files are left after packaging RPM files - builder
warns about that at the end of building process).
If you're bored and don't know what to do, you can try fulfilling requests from PLD-doc/PLD-specs-TODO(or this same list but with additional entries on wiki http://pld-users.org/specs-todo), or autogenerated TODO headers from *.spec: PLD-doc/specs-auto-todo.txt
Publishing your changes
As a wannabe developer you most likely won't have read/write access to the GIT repository so you'll have to find someone to check your changes in and add them to the repository. The best way to do it is to send a unified diff of your changes against the original files (or the whole files in case you are adding any) in a mail message along with a brief description of what you did to the pld-devel-en
(or pl
) mailing list.
It's also acceptable to make your changes in your git repository, perhaps published in github and let somebody to pull your changes to pld repository.
Once existing developer, who has time to review your changes, you will be notified of any errors that need to be fixed and eventually your files will get committed or pushed.
Once you provide enough valuable changes, other developers might decide to give you full access to our repositories. This process is always initiated by someone who already has read/write access, asking for access on your own will not do you any good.
When that happens, you will be able to do GIT commits and push them to PLD servers yourself. Remember to check the files you are committing before sending them to the repository. Make sure you also provide a meaningful commitlog. All logs have to be in the following format:
- first change - second change - third change - some additional info
Even if there is only one message in your commitlog, prefixing it with a dash will make reading it a lot easier.
Package's life cycle
After a spec
file gets commited, the package needs to be built. The life cycle is as follows:
spec
file is commited (including changes to needed patches and other files referenced in thespec
)- One of the developers requests a test build (this is done using the make-request.sh script). If you don't have the rights contact your RM for access. It is possible to skip this step and ask for an upgrade directly however it is not recommended as a partial upgrade results in desynchronising packages between build servers. If found guilty, you will be executed on the spot.
- The package is successfully built on all architectures.
- One of the priviledged developers requests an upgrade build (same script as above) - contact your RM for access.
- The package is once again built on all architectures and upgraded across the whole builder farm.
- The package is moved to the queue tree (
ready
for Ac andtest
for Th). - Your RM takes further care of the package. He decides when the package is ready to be moved to the stable tree (or the
updates
tree in case of an already released version). If you believe it takes too long, check if all the dependencies (both introduced or broken by the particular package) have been satisfied in the queue tree. - The package is finally moved to the stable or
updates
tree and anyone can use it. - The package is placed to
obolete
source if new version available.