<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pbs.proxmox.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hd--</id>
	<title>Proxmox Backup Server - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pbs.proxmox.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hd--"/>
	<link rel="alternate" type="text/html" href="https://pbs.proxmox.com/wiki/Special:Contributions/Hd--"/>
	<updated>2026-05-23T20:44:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://pbs.proxmox.com/mediawiki/index.php?title=Developer_Documentation&amp;diff=120</id>
		<title>Developer Documentation</title>
		<link rel="alternate" type="text/html" href="https://pbs.proxmox.com/mediawiki/index.php?title=Developer_Documentation&amp;diff=120"/>
		<updated>2023-12-13T12:44:08Z</updated>

		<summary type="html">&lt;p&gt;Hd--: /* Development Package Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Please communicate you plans with us, before starting any development. It is important to have a common view of the problem and corresponding solution, in order to avoid duplicated work and unnecessary efforts.&lt;br /&gt;
&lt;br /&gt;
Our source code repository is read-only. To contribute code, send it as a patch (git diff) to the pbs-devel mailing list. We will review your patch and apply it (and possible corrections/additions) if the review is successful. Note that we will only include code that meets our quality criteria. &lt;br /&gt;
&lt;br /&gt;
== Mailing List ==&lt;br /&gt;
&lt;br /&gt;
This is the primary communication channel for developers to discuss new features and implementation details. If you are a developer and you want to develop additional features, this is the place to start.&lt;br /&gt;
&lt;br /&gt;
PBS Development List: https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel&lt;br /&gt;
&lt;br /&gt;
Archive: https://lists.proxmox.com/pipermail/pbs-devel/&lt;br /&gt;
&lt;br /&gt;
== Access to Code Repository (git) ==&lt;br /&gt;
&lt;br /&gt;
You can find all of our project repositories at https://git.proxmox.com.&lt;br /&gt;
The repositories relating to Proxmox Backup are under the section titled &amp;quot;rust&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Build instructions ==&lt;br /&gt;
&lt;br /&gt;
You can find build instructions here:&lt;br /&gt;
&lt;br /&gt;
https://git.proxmox.com/?p=proxmox-backup.git;a=blob_plain;f=README.rst;hb=HEAD&lt;br /&gt;
&lt;br /&gt;
== Development Package Repository ==&lt;br /&gt;
&lt;br /&gt;
Some packages required for development can only be found in the &#039;&#039;devel&#039;&#039; repository. &lt;br /&gt;
This is a cross-project repository and may be used for all Proxmox projects.&lt;br /&gt;
&lt;br /&gt;
Add the following to the &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
  deb http://download.proxmox.com/debian/devel/ bookworm main&lt;br /&gt;
&lt;br /&gt;
== Checking out a git repository ==&lt;br /&gt;
&lt;br /&gt;
To clone a repository, run &#039;git clone&#039; with the repository name prefixed with the common URL: &amp;lt;nowiki&amp;gt;git://git.proxmox.com/git/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git clone git://git.proxmox.com/git/proxmox-backup.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To update an already cloned project to the current version use:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git pull&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working on the code ==&lt;br /&gt;
&lt;br /&gt;
=== Coding guidelines ===&lt;br /&gt;
&lt;br /&gt;
The codebase is mostly Rust, with JavaScript for the web-interface.&lt;br /&gt;
&lt;br /&gt;
We use the ExtJS framework for the GUI components; its API documentation can be found at: https://docs.sencha.com/extjs/7.0.0/.&lt;br /&gt;
&lt;br /&gt;
=== Using git ===&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with git, it&#039;s worth having a look at this interactive tutorial:&lt;br /&gt;
https://try.github.io, and reading the brief introduction chapter from the official git documentation: https://git-scm.com/docs/gittutorial&lt;br /&gt;
to gain basic knowledge on it.&lt;br /&gt;
&lt;br /&gt;
First, configure your &#039;&#039;real&#039;&#039; name and email address for git, if not done already:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ git config --global user.name &amp;quot;John Doe&amp;quot;&lt;br /&gt;
$ git config --global user.email john@example.com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will be used to sign off commits as your work.&lt;br /&gt;
&lt;br /&gt;
We recommend that you start a feature branch before working on the code locally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git checkout -b my_branch master&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, you can start working on your improvements. You can compare your changes to the current PBS master branch easily with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git diff master..my_branch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Commits and Commit Messages ====&lt;br /&gt;
&lt;br /&gt;
Then, make your commit (try to make small, but self-contained, commits) and include a sign-off line (-s).&lt;br /&gt;
&lt;br /&gt;
* Make sure the &#039;&#039;&#039;line-length&#039;&#039;&#039; (text-width, column count) of the commit&#039;s message is &#039;&#039;&#039;not longer than 70 characters&#039;&#039;&#039;.&lt;br /&gt;
: Note, HTTPS links and git trailers (e.g., &amp;lt;code&amp;gt;Signed-off-by:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Reviewed-by:&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Fixes:&amp;lt;/code&amp;gt;) are an exception and should &#039;&#039;&#039;not&#039;&#039;&#039; be split.&lt;br /&gt;
* If it fixes a bug &#039;&#039;&#039;start&#039;&#039;&#039; with that information in this form: &amp;lt;code&amp;gt;fix #1234: summary here&amp;lt;/code&amp;gt;&lt;br /&gt;
* If it implements a feature tracked on Bugzilla you can also use: &amp;lt;code&amp;gt;close #1234: summary here&amp;lt;/code&amp;gt; albeit &amp;lt;code&amp;gt;fix #1234:&amp;lt;/code&amp;gt; is more commonly used and also fine&lt;br /&gt;
* Try to add a tag denoting the subsystem at start, if an obvious choice exists.&lt;br /&gt;
** For example, if you changed the QEMU UI component in pve-manager, a possible tag could be &amp;lt;code&amp;gt;ui: qemu: summary here&amp;lt;/code&amp;gt;&lt;br /&gt;
** Don&#039;t add tags for things that are already clear from context, for example, adding a &amp;lt;code&amp;gt;kernel&amp;lt;/code&amp;gt; tag for a patch in the kernel repository has no use.&lt;br /&gt;
** But, do &#039;&#039;&#039;not&#039;&#039;&#039; just paste the affected files, including (parts of the) path and maybe even the file ending, as tag! That has no use (already contained in diff stat) and just makes it harder to read.&lt;br /&gt;
&lt;br /&gt;
You can always edit the commit message of the most recent commit using amend:&lt;br /&gt;
 # git commit --amend&lt;br /&gt;
&lt;br /&gt;
If you work on a series you can use rebase to re-order, drop, squash/fixup and edit both the whole commit or just rewording its message:&lt;br /&gt;
&lt;br /&gt;
 git rebase -i --autosquash --autostash origin/master&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;autostash&amp;lt;/code&amp;gt; is not required, but convenient if there are still pending changes, it will stash before rebase starts and apply again after rebase is done.&lt;br /&gt;
The &amp;lt;code&amp;gt;autosquash&amp;lt;/code&amp;gt; is also not required, but very convenient to auto squash fixups (&amp;lt;code&amp;gt;git commit --fixup=&amp;lt;ref&amp;gt;&amp;lt;/code&amp;gt;) made for older commits in a development series&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following command will take all changes of tracked files and add it to the commit:&lt;br /&gt;
 # git commit -s -a&lt;br /&gt;
&lt;br /&gt;
New files won&#039;t get added automatically. To do that, or to just add some changed files to a commit, use&lt;br /&gt;
 # git add newfile1.pl file2.pl&lt;br /&gt;
&lt;br /&gt;
You can always look at what will get into commit with:&lt;br /&gt;
 # git diff --staged&lt;br /&gt;
&lt;br /&gt;
== Preparing Patches ==&lt;br /&gt;
&lt;br /&gt;
{{note| We need a valid [[#Software License and Copyright|CLA]] to include your changes|reminder}}&lt;br /&gt;
&lt;br /&gt;
Since we have several projects in our git repository that use the pbs-devel mailing list,&lt;br /&gt;
we ask you to clarify which repository your patches are meant for,&lt;br /&gt;
by specifying it in the subject prefix, for example, &#039;proxmox&#039; or &#039;proxmox-backup&#039;.&lt;br /&gt;
&lt;br /&gt;
Example: Creating the raw patch series for the &amp;lt;tt&amp;gt;proxmox-backup&amp;lt;/tt&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# rm -rf my-patches/       # to clean left-overs&lt;br /&gt;
# git format-patch -o my-patches/ --subject-prefix=&amp;quot;PATCH proxmox-backup&amp;quot; master..my_branch --cover-letter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain in the cover letter the aim of your patches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
edit my-patches/0000-cover-letter.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sending patches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git send-email --to=pbs-devel@lists.proxmox.com  my-patches/00*.patch&lt;br /&gt;
# rm -rf my-patches/       # to clean left-overs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wish to write comments for individual patches, you can do that either in&lt;br /&gt;
the cover-letter, or in the patch&#039;s &#039;&#039;commit summary section&#039;&#039; (between the line&lt;br /&gt;
consisting of 3 consecutive dashes ending your commit message and before the&lt;br /&gt;
list of files with their change-counts).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From 12345abcde Mon Sep 12 00:00:00 2001&lt;br /&gt;
From: Git Committer &amp;lt;some email address&amp;gt;&lt;br /&gt;
Date: Fri, 7 Oct 2020 08:30:17 +0200&lt;br /&gt;
Subject: [PATCH proxmox-backup 1/2] Fix #1013: this and that&lt;br /&gt;
&lt;br /&gt;
Here is your commit message.&lt;br /&gt;
It explains the bugfix and ends after this line.&lt;br /&gt;
&lt;br /&gt;
Signed-off-by: Firstname Lastname &amp;lt;firstname@lastname.email&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
 ***HERE*** you can write your comments.&lt;br /&gt;
 If this is a new version of an old patch, explain your changes here&lt;br /&gt;
&lt;br /&gt;
 src/backup.rs | 2 +-&lt;br /&gt;
&lt;br /&gt;
diff --git a/src/backup.rs b/src/backup.rs&lt;br /&gt;
(...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to send several related patches that contain changes to different repositories, you can first iterate over all involved repositories, save the patches into one directory and then do a single git send-email over all generated patches. For example, lets go to a few repos and format the most recent commit as a patch to /tmp/patchq, then send it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cd proxmox-backup; git format-patch -s -o /tmp/patchq -1 &lt;br /&gt;
# cd ../proxmox; git format-patch -s -o /tmp/patchq -1  &lt;br /&gt;
# git send-email --compose --to=pbs-devel@lists.proxmox.com /tmp/patchq/*&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;start-number&amp;quot; and the likes can improve this further, but this is a good start.&lt;br /&gt;
&lt;br /&gt;
=== Versioned Patches ===&lt;br /&gt;
&lt;br /&gt;
If an updated version of your patch series is called for, it should be sent&lt;br /&gt;
as a new series, rather than as a reply to the old series.&lt;br /&gt;
Always send the entire series, with all patches showing the same version.&lt;br /&gt;
Please mark your versions in the subject prefix, with a small &#039;v&#039;, followed by&lt;br /&gt;
the version number, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git format-patch -o my-patches/ --subject-prefix=&amp;quot;PATCH v2 proxmox-backup&amp;quot; master..my_branch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please list all the changes to the previous versions in the &#039;&#039;commit summary&lt;br /&gt;
section&#039;&#039; as shown in the above example.&lt;br /&gt;
For patches with no changes to the previous version, you should mention that there were no&lt;br /&gt;
changes in the summary section.&lt;br /&gt;
&lt;br /&gt;
If your series has a cover letter, summarize all changes in it as well.&lt;br /&gt;
&lt;br /&gt;
=== Reviewing patches ===&lt;br /&gt;
&lt;br /&gt;
After reviewing patches which affect a subsystem you maintain, you can notify&lt;br /&gt;
committers that you have reviewed the patch and are OK with the changes, with: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Acked-by: name / email address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convenience Settings ===&lt;br /&gt;
&lt;br /&gt;
For convenience, you can store the pbs-devel email address and the repository&#039;s&lt;br /&gt;
default subject prefixes in your repository clones&#039; configurations as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ git config --local sendemail.to pbs-devel@lists.proxmox.com&lt;br /&gt;
$ git config --local format.subjectprefix &#039;PATCH proxmox-backup&#039;&lt;br /&gt;
$ git config --local format.signoff true &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the commands to create and send patches become:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# git format-patch -o my-patches/ master..my_branch&lt;br /&gt;
# git send-email --compose my-patches/00*.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sending Patches ==&lt;br /&gt;
&lt;br /&gt;
Always use &amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; to send out patches, otherwise the indentation and formatting will get mangled, and the patch cannot be applied anymore.&lt;br /&gt;
&lt;br /&gt;
=== Tutorial ===&lt;br /&gt;
&lt;br /&gt;
See https://git-send-email.io/ for an interactive tutorial to set up &amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Using Authenticated SMTP Server ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; can be instructed to use a specific SMTP server for sending, the following shows an anonymized config section example:&lt;br /&gt;
&lt;br /&gt;
 [sendemail]&lt;br /&gt;
         smtpencryption=tls&lt;br /&gt;
         smtpserver=webmail.example.com&lt;br /&gt;
         smtpserverport=587&lt;br /&gt;
         smtpuser=j.smith@example.com&lt;br /&gt;
         smtpsslcertpath=&lt;br /&gt;
         confirm = always&lt;br /&gt;
&lt;br /&gt;
Add this to your global user &amp;lt;code&amp;gt;~/.gitconfig&amp;lt;/code&amp;gt; or to the per project &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; will then use these settings by default and ask you for the password on sending.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
To send the last two commits for a Proxmox VE project to the Proxmox Backup development list you could then execute:&lt;br /&gt;
&lt;br /&gt;
  git send-email --to=&amp;quot;pbs-devel@lists.proxmox.com&amp;quot; -2&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not used to &amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; it can be a good test to first send the patches to an email address of yourself, that allows to ensure all details and commands are correct.&lt;br /&gt;
&lt;br /&gt;
== Bugtracker (Bugzilla) ==&lt;br /&gt;
&lt;br /&gt;
We use Bugzilla to track bugs and feature requests for our products.&lt;br /&gt;
&lt;br /&gt;
https://bugzilla.proxmox.com&lt;br /&gt;
&lt;br /&gt;
== Software License and Copyright ==&lt;br /&gt;
We only include code licensed under the respective repo&#039;s license, visible under &amp;lt;code&amp;gt;debian/copyright&amp;lt;/code&amp;gt;. For most of our projects, or if in doubt, this is the GNU Affero General Public License, version 3 http://www.gnu.org/licenses/agpl-3.0.html.&lt;br /&gt;
&lt;br /&gt;
Additionally, we require that contributors send us a contributor license agreement form by email to &amp;lt;code&amp;gt;office@proxmox.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
This agreement establishes a relationship between us and the contributor, gives details on what it means when the contributor grants permission for their work to be included in a project, and enables us to be better stewards of these projects.&lt;br /&gt;
&lt;br /&gt;
With the contributor agreement chosen by Proxmox, the [http://www.harmonyagreements.org Harmony CLA], the contributor gives Proxmox a license to use their contributions.&lt;br /&gt;
The contributor continues to own the copyright in the contribution, with full rights to re-use, re-distribute, and continue modifying the contributed code, allowing them to also share that contribution with other projects.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve tried to keep the agreement as simple and comprehensible as possible. It comes in two flavors:&lt;br /&gt;
* one for [http://www.proxmox.com/downloads/item/proxmox-individual-contributor-license-agreement individual contributors]&lt;br /&gt;
* and one for [http://www.proxmox.com/downloads/item/proxmox-entity-contributor-assignment-agreement entities contributors] (companies, foundations, or other organizations).&lt;br /&gt;
&lt;br /&gt;
If you are making a contribution that is not your work (for example, a patch or library written by someone else), please contact office@proxmox.com for guidance on whether any additional steps are needed.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/documentation Git Documentation]&lt;/div&gt;</summary>
		<author><name>Hd--</name></author>
	</entry>
</feed>