<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/corporate-repository-bzzt3g4bt" -->

---
title: Corporate Repository | daily.dev
description: A walkthrough for building custom .deb and .rpm packages to manage software and configuration deployment across an organization's Linux machines, bypassing...
canonical: https://daily.dev/posts/corporate-repository-bzzt3g4bt
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Corporate Repository | daily.dev
og:description: A walkthrough for building custom .deb and .rpm packages to manage software and configuration deployment across an organization's Linux machines, bypassing...
og:url: https://daily.dev/posts/corporate-repository-bzzt3g4bt
og:image: https://api.daily.dev/og/posts/bZzT3G4bt.png
og:image:alt: Corporate Repository
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Corporate Repository

**[apalrd's adventures](https://daily.dev/sources/apalrd)** · 4 min read · 0 upvotes · 0 comments

## Summary

A walkthrough for building custom .deb and .rpm packages to manage software and configuration deployment across an organization's Linux machines, bypassing Microsoft-based management tools. Covers creating a monorepo of packages, writing debian control/install/rules files and RPM spec files, building packages, setting up apt and dnf repositories served over nginx, and signing repositories with GPG for production use.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.apalrd.net/posts/2026/ent_repo>

## Questions this post answers

### How do I create my own signed apt repository for custom deb packages?

Set up a directory structure served over nginx, configure apt-ftparchive.conf, copy package files in, then run apt-ftparchive to scan packages and build a Release file. For production use, sign the Release file with a GPG key generated separately from the webserver, since clients then add the repo through the standard sources.list process and trust your key.

_Developers setting up internal package repos can track packaging workflow tips like this on daily.dev._

### How is signing different between apt repositories and rpm repositories?

Debian repositories are signed as a whole by signing the Release file with GPG, while RPM repositories sign each individual package rather than the repo itself. For RPM, you sign the rpm during the build step, then regenerate the repo metadata from the now-signed package, and dnf prompts to accept the key on first install from that repo.

_Anyone comparing deb versus rpm packaging approaches can follow this kind of detail on daily.dev._

## Similar posts on daily.dev

- [Small Repo, High Quality](https://daily.dev/posts/small-repo-high-quality-lzy61mr2i) · Yegor's Blog · 99 upvotes · 11 comments
- [Ballerina Package Management for the Enterprise: Caching Proxies and Private Repositories, End to End](https://daily.dev/posts/ballerina-package-management-for-the-enterprise-caching-proxies-and-private-repositories-end-to-en-ossjbuxfd) · Ballerina · 0 upvotes · 0 comments
- [Debusine Repositories Enter Beta: Ubuntu PPA-Like User Archives For Debian Linux](https://daily.dev/posts/debusine-repositories-enter-beta-ubuntu-ppa-like-user-archives-for-debian-linux-pqmp0rsyd) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#linux](https://daily.dev/tags/linux), [#nginx](https://daily.dev/tags/nginx)

[View this post on daily.dev](https://daily.dev/posts/corporate-repository-bzzt3g4bt)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Corporate Repository","url":"https://daily.dev/posts/corporate-repository-bzzt3g4bt","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/corporate-repository-bzzt3g4bt"},"datePublished":"2026-10-01T09:38:19.751Z","dateModified":"2026-10-01T09:38:39.501Z","description":"A walkthrough for building custom .deb and .rpm packages to manage software and configuration deployment across an organization's Linux machines, bypassing...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3a60d065e60286ed7a3af2bbd8cf9fa4?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3a60d065e60286ed7a3af2bbd8cf9fa4?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"apalrd's adventures","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"apalrd's adventures","logo":"https://media.daily.dev/image/upload/s--4zkx8dRj--/f_auto,q_auto/v1786438309/logos/apalrd?_a=BAMAMicg0","url":"https://daily.dev/sources/apalrd"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/corporate-repository-bzzt3g4bt","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"linux,nginx","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"apalrd's adventures","item":"https://daily.dev/sources/apalrd"},{"@type":"ListItem","position":3,"name":"Corporate Repository"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/corporate-repository-bzzt3g4bt#faq","mainEntity":[{"@type":"Question","name":"How do I create my own signed apt repository for custom deb packages?","acceptedAnswer":{"@type":"Answer","text":"Set up a directory structure served over nginx, configure apt-ftparchive.conf, copy package files in, then run apt-ftparchive to scan packages and build a Release file. For production use, sign the Release file with a GPG key generated separately from the webserver, since clients then add the repo through the standard sources.list process and trust your key. Developers setting up internal package repos can track packaging workflow tips like this on daily.dev."}},{"@type":"Question","name":"How is signing different between apt repositories and rpm repositories?","acceptedAnswer":{"@type":"Answer","text":"Debian repositories are signed as a whole by signing the Release file with GPG, while RPM repositories sign each individual package rather than the repo itself. For RPM, you sign the rpm during the build step, then regenerate the repo metadata from the now-signed package, and dnf prompts to accept the key on first install from that repo. Anyone comparing deb versus rpm packaging approaches can follow this kind of detail on daily.dev."}}]}
```

