This tutorial is about creating your own online repository and building a custom package(set) with the help of buildpkg. Later, you can install those packages to your customized Manjaro ISO using buildiso.
Before you start with this tutorial make sure you have completed the prerequisite steps in Build Manjaro ISOs with buildiso.
The same XFCE ISO profile will be used as example on this Wiki page.
Tools to install
Sync your system with the latest packages and ensure you have the following packages installed.
It is important that you match your tools packages - don't mix the default and git packages.
The first thing you should probably do is create a directory for your online repository. The online repository is called online-repo throughout this tutorial and it is located in your home-folder. You however are free to choose name location to your liking. This'll help keep things organized. Your repository consist of only this folder:
This online repository is created in your home folder, but you can create it anywhere you want.
Create your custom package tree
Create a folder for the packages you want to build. The name is arbitrary decriptor - you can call it anything you think suitable.
Clone the relevant package(s) from AUR or from Github. Later you might create them yourself! You can select any package to build but as example we build the package
kickshaw. Kickshaw is modern menu editor for among others openbox. First you add it to your pkgubild repo. Do this using git
Clone the example package from AUR
Now you have a folder with a
PKGBUILD file in your pkgbuild repository.
It is best practice to always familarize yourself with the content of the package to ensure everything is as expected.
Building with buildpkg
The buildpkg has some options you need to familiarize yourself with.
Next thing to do is build the package. Please note that you must be located one level above your actual PKGBUILD. Understand this as the
-p argument is the name of the folder holding the PKGBUILD instructionset.
For more examples how to use buildpkg, look here.
The buildpkg script creates a closed environment for building the package. This is done, so not to pollute your system with build artifacts.
Copy package files to online repository
The resulting package is saved in the location defined in your manjaro-tools.conf on your system (default is the cache folder)
You should see compressed package files. The file name should end with
Copy or move your package files to your online repository:
Build a .db file
To keep track of available packages the pacman package manager uses database files which is downloaded and kept on your computer. You need to create such a database file for your repo. It is crucial that your database filename is the same as your repo name. If your repo is named online-repo then your database name must be online-repo.db.tar.gz.
Use the command
repo-add to build a database file inside your designated repo folder
Every time you change the content of your online repository, the database must be rebuild! Otherwise, buildiso will complain later about missing packages in your online repository.
Two of the files are symlinks which may or may not work on your chosen host so they can be left out.
Upload online-repo to Host Server
Now you need to upload online-repo to your Host Server. Upload everything from online-repo to your Host Server. Your web address as to match the name of the directory folder you created. This is what your web address should look like after upload online-repo to your Host Server.
Add online-repo to your iso-profile
Create a file
Custom online repositories will be added to the resulting pacman.conf. This means AUR packages cannot be installed unless you are using webserver to provide
[online-repo] as shown this article).
Add package names to ISO profile
Now you add
kickshaw to your package list for your ISO profile. This means your Packages-Desktop file should look something like this:
Cleaning build environment
For removing your build environment from your hard drive, execute:
Creating an online repo requires you to keep the repo up-to-date when changes are made upstream.