-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
245 lines (221 loc) · 15.1 KB
/
Copy pathindex.html
File metadata and controls
245 lines (221 loc) · 15.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
---
layout: default
title: Build native Linux packages and host your own repository
description: >-
OmniPackage is an open-source CLI that builds native Linux packages and
hosts your own apt, dnf, zypper, and pacman repository on any S3-compatible storage or your local filesystem.
json_ld: >-
{
"@type": "HowTo",
"name": "How to build and distribute your own Linux packages with OmniPackage",
"description": "Three steps to ship your software as native Linux packages with your own repository.",
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Scaffold",
"text": "Use the omnipackage CLI to scaffold an RPM spec file, the equivalent files for DEB packaging, and a PKGBUILD for pacman."
},
{
"@type": "HowToStep",
"position": 2,
"name": "Release",
"text": "Point OmniPackage at an S3-compatible bucket or a local filesystem path, set a few config options, then run omnipackage release. Each package is built in a container running its target distro, so its dependencies resolve as that distro's native packages — guaranteed solved, with no version skew or bundled runtimes. Packages are signed with your GPG key and published to your repository."
},
{
"@type": "HowToStep",
"position": 3,
"name": "Share",
"text": "Share the install page generated alongside the packages so your users can add the repository and install your software with apt, dnf, zypper, or pacman."
}
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Does OmniPackage require Docker?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Podman works too and is recommended — it is the most-tested runtime. Docker is supported as well. Either is auto-detected; you can force one with the --container-runtime flag."
}
},
{
"@type": "Question",
"name": "Can I distribute proprietary software with OmniPackage?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Unlike official distro repositories, your own OmniPackage repository can host any binaries you want, including closed-source ones."
}
},
{
"@type": "Question",
"name": "How is OmniPackage different from Snap, Flatpak, or AppImage?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Snap and Flatpak ship their own runtimes; AppImage bundles dependencies. OmniPackage builds native Linux packages so users install with apt, dnf, zypper, or pacman — no extra runtime, no sandbox, no separate installer. Updates arrive through the system package manager alongside everything else."
}
},
{
"@type": "Question",
"name": "What architectures does OmniPackage support?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Packages are built for the host's architecture. All supported base images except Mageia are multiarch, so both x86_64 and ARM64 work — run OmniPackage on the architecture you want the packages to target."
}
},
{
"@type": "Question",
"name": "Can I host the apt or yum repository on AWS, Cloudflare R2, or MinIO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OmniPackage publishes to any S3-compatible storage or a local filesystem path. Cloudflare R2 is recommended for free egress; AWS S3 and MinIO also work, as does any other S3-compatible service. The bucket (or local directory) serves as a self-hosted apt, dnf, zypper, or pacman repository."
}
},
{
"@type": "Question",
"name": "Is OmniPackage free?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OmniPackage is free and open-source software, licensed under GPL-3.0."
}
}
]
}
---
<article class="hero">
<div class="terminal hero-demo">
<div class="terminal-bar">
<span class="terminal-title">omnipackage — zsh</span>
{% include window_controls.html %}
</div>
<pre class="terminal-body"><span class="term-prompt">$</span> omnipackage release ~/projects/my-awesome-project<span class="cursor">▮</span>
<span class="term-comment">:: building ubuntu · debian · fedora · opensuse …</span>
<span class="term-ok">✓ signed</span> <span class="term-comment">with your GPG key</span>
<span class="term-ok">✓ published</span> <span class="term-comment">→ s3://your-bucket (apt · dnf · zypper · pacman repo)</span>
<span class="term-comment"># install page generated — share the link, your users are done</span></pre>
</div>
<h1>Build and distribute your own native Linux packages — with your own repository</h1>
<p class="lead">We had centralized software repositories long before the App Store. Why is distributing software for Linux still so hard? OmniPackage makes it easy.</p>
<p class="lead">Build native Linux packages for many distros and publish them to a self-hosted apt, dnf, zypper, or pacman repository on any S3-compatible storage or local filesystem. Runs on GitHub Actions, your laptop, or anywhere.</p>
<div class="cta-group">
<a href="{{ site.getting_started_url }}" target="_blank" class="btn btn-lg btn-primary">Get started</a>
<a href="{{ site.github_repo_url }}" target="_blank" rel="noopener" class="btn btn-lg btn-outline">{% include icons/github.svg.html %}GitHub</a>
<a href="/about" class="btn btn-lg btn-ghost">Learn more <span aria-hidden="true">→</span></a>
</div>
</article>
<p class="badges" aria-label="Project status">
<a href="{{ site.github_repo_url }}/blob/master/LICENSE" target="_blank" rel="noopener">
<img src="https://img.shields.io/github/license/{{ site.github_repo }}?style=flat&cacheSeconds=300" alt="License: {{ site.license }}" loading="lazy" height="20">
</a>
<a href="{{ site.github_repo_url }}/actions/workflows/ci.yml" target="_blank" rel="noopener">
<img src="https://img.shields.io/github/actions/workflow/status/{{ site.github_repo }}/ci.yml?label=CI&style=flat" alt="CI status" loading="lazy" height="20">
</a>
{% comment %}
<a href="{{ site.github_repo_url }}" target="_blank" rel="noopener">
<img src="https://img.shields.io/github/stars/{{ site.github_repo }}?style=flat" alt="GitHub stars" loading="lazy" height="20">
</a>
{% endcomment %}
<a href="{{ site.install_stable_url }}" target="_blank" rel="noopener">
<img src="{{ site.repo_badge_stable_url }}" alt="Available via OmniPackage stable repository" loading="lazy" height="20">
</a>
<a href="{{ site.install_master_url }}" target="_blank" rel="noopener">
<img src="{{ site.repo_badge_master_url }}" alt="Available via OmniPackage master (unstable) repository" loading="lazy" height="20">
</a>
</p>
<div class="content">
<p class="lead">
OmniPackage is an open-source CLI that builds native Linux packages and publishes them to your own apt, dnf, zypper, or pacman repository on S3-compatible storage or a local filesystem. It scaffolds an RPM spec file, the DEB equivalents, and a PKGBUILD, then runs <code>rpmbuild</code>, <code>dpkg-buildpackage</code>, and <code>makepkg</code> in containers for each supported distro. Because each container runs that distro, your software is built against the distro's own libraries and its dependencies are declared as native packages — so the system package manager resolves them automatically. Packages are signed with your GPG key and uploaded to your bucket or directory, which serves as the repository. It also generates an install page — share the link, and your users are done.
</p>
<p class="muted" style="margin-bottom:.5rem;">One command to build, sign, and publish your packages:</p>
<div class="terminal">
<div class="terminal-bar">
<span class="terminal-title">~/projects/my-awesome-project</span>
{% include window_controls.html %}
</div>
<pre class="terminal-body terminal-body--prompt"><code>omnipackage release ~/projects/my-awesome-project</code></pre>
</div>
<section aria-labelledby="how-it-works">
<h2 id="how-it-works">How it works</h2>
<ol class="steps grid grid-3">
<li>
<h3><span class="step-num">01</span>Scaffold</h3>
<p class="muted mb-0">OmniPackage scaffolds an RPM spec file and the other files RPM, DEB, and pacman packaging need.</p>
</li>
<li>
<h3><span class="step-num">02</span>Release</h3>
<p class="muted mb-0">Add your storage details — an S3-compatible bucket or a local filesystem path — and a few config options, then run <code>omnipackage release</code>. Each package is built in a container running its target distro, so it links against that distro's own libraries and its dependencies resolve as native packages — guaranteed solved, with no version skew or bundled runtimes. Packages are signed with your GPG key and published to your repository.</p>
</li>
<li>
<h3><span class="step-num">03</span>Share</h3>
<p class="muted mb-0">Share the install page generated with the packages so users can add the repository and install with their native package manager.</p>
</li>
</ol>
</section>
<section aria-labelledby="from-users-perspective">
<h2 id="from-users-perspective">From your users' perspective</h2>
<p class="muted">On the latest Ubuntu, for example, four commands add the repository and install your package:</p>
<div class="terminal">
<div class="terminal-bar">
<span class="terminal-title">user@ubuntu:~$</span>
{% include window_controls.html %}
</div>
<pre class="terminal-body"><code>echo 'deb https://repositories.omnipackage.org/omnipackage-rs/stable/ubuntu_26.04 stable/' | sudo tee /etc/apt/sources.list.d/omnipackage_omnipackage.list
curl -fsSL https://repositories.omnipackage.org/omnipackage-rs/stable/ubuntu_26.04/stable/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/omnipackage_omnipackage.gpg > /dev/null
sudo apt-get update
sudo apt-get install omnipackage</code></pre>
</div>
<p class="muted">Users do this once. After that, updates arrive through <code>apt upgrade</code> alongside everything else from the official Ubuntu repos — no extra steps, no separate updater. The same applies on Debian, Fedora, openSUSE, Arch, and the other supported distros, each through its native package manager.</p>
</section>
<section aria-labelledby="supported-distros-heading">
<h2 id="supported-distros-heading">Supported distros</h2>
<p class="muted">Packages are built for the build host's architecture. All supported base images except Mageia are multiarch, so both <code>x86_64</code> and <code>ARM64</code> work.</p>
<div id="supported-distros">
<p class="muted"><span class="spinner" role="status" aria-hidden="true"></span>Loading supported distros…</p>
</div>
<p class="muted small" style="margin-top:1rem;">Fetched live from <a href="{{ site.github_repo_url }}/blob/master/src/distros.yml" target="_blank" rel="noopener"><code>distros.yml</code></a> in the OmniPackage repo.</p>
<script src="https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/dist/js-yaml.min.js" crossorigin="anonymous" defer></script>
<script src="/assets/js/supported_distros.js" defer></script>
</section>
<section aria-labelledby="no-lock-in">
<h2 id="no-lock-in">No vendor lock-in</h2>
<ul class="feature-list">
<li>{% include icons/check2.svg.html class="ico-ok" %}<span><a href="{{ site.github_repo_url }}" target="_blank" rel="noopener">Open source</a> and not tied to any cloud or hosting provider</span></li>
<li>{% include icons/check2.svg.html class="ico-ok" %}<span>Host repositories on your own S3 bucket — AWS S3, Cloudflare R2 (recommended for free egress), MinIO, or any S3-compatible service — or a local filesystem path</span></li>
<li>{% include icons/check2.svg.html class="ico-ok" %}<span>No subscriptions, registrations, or credit cards</span></li>
</ul>
</section>
<section aria-labelledby="not-do">
<h2 id="not-do">What OmniPackage doesn't do</h2>
<ul class="feature-list">
<li>{% include icons/x.svg.html class="ico-no" %}<span>Build new package formats. RPM, DEB, and pacman only — Flatpak, Snap, AppImage, AUR, and Nix are different bets.</span></li>
<li>{% include icons/x.svg.html class="ico-no" %}<span>Host your repository. You bring the storage — an S3 bucket or a local filesystem path — and in return get no vendor lock-in, with your packages in storage you control.</span></li>
<li>{% include icons/x.svg.html class="ico-no" %}<span>Sandbox installed software. Packages run with the same privileges any <code>apt install</code> package gets — no Flatpak-style isolation unless you ship it yourself (e.g. an AppArmor / SELinux profile, or a <code>bwrap</code> / <code>firejail</code> wrapper around your binary).</span></li>
</ul>
</section>
<section aria-labelledby="projects-using">
<h2 id="projects-using">Projects using OmniPackage</h2>
<ul>
<li><a href="{{ site.install_stable_url }}" target="_blank" rel="noopener">OmniPackage — itself</a></li>
<li><a href="https://repositories.omnipackage.org/mpz/stable/install.html" target="_blank" rel="noopener">mpz — music player for big local collections</a></li>
</ul>
</section>
<details>
<summary>Frequently asked questions</summary>
<div class="faq">
<p><strong>Does OmniPackage require Docker?</strong><br>
No. Podman works too and is recommended — it is the most-tested runtime. Docker is supported as well. Either is auto-detected; you can force one with the <code>--container-runtime</code> flag.</p>
<p><strong>Can I distribute proprietary software with OmniPackage?</strong><br>
Yes. Unlike official distro repositories, your own OmniPackage repository can host any binaries you want, including closed-source ones.</p>
<p><strong>How is OmniPackage different from Snap, Flatpak, or AppImage?</strong><br>
Snap and Flatpak ship their own runtimes; AppImage bundles dependencies. OmniPackage builds native Linux packages so users install with <code>apt</code>, <code>dnf</code>, <code>zypper</code>, or <code>pacman</code> — no extra runtime, no sandbox, no separate installer. Updates arrive through the system package manager alongside everything else.</p>
<p><strong>What architectures does OmniPackage support?</strong><br>
Packages are built for the host's architecture. All supported base images except Mageia are multiarch, so both <code>x86_64</code> and <code>ARM64</code> work — run OmniPackage on the architecture you want the packages to target.</p>
<p><strong>Can I host the apt or yum repository on AWS, Cloudflare R2, or MinIO?</strong><br>
Yes. OmniPackage publishes to any S3-compatible storage or a local filesystem path. Cloudflare R2 is recommended for free egress; AWS S3 and MinIO also work, as does any other S3-compatible service. The bucket (or local directory) serves as a self-hosted apt, dnf, zypper, or pacman repository.</p>
<p><strong>Is OmniPackage free?</strong><br>
Yes. OmniPackage is free and open-source software, licensed under GPL-3.0.</p>
</div>
</details>
</div>