mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-01-21 05:00:06 -05:00
316 lines
8.8 KiB
Markdown
316 lines
8.8 KiB
Markdown
# Linux Release
|
||
|
||
These are instructions for publishing a Linux deb package. It can be built locally or the PPA repository can build it. The latter is preferable.
|
||
|
||
## Summary
|
||
|
||
|
||
Starting with a fresh clone from bitbucket.org. It will not work unless it's totally fresh:
|
||
|
||
```
|
||
$ git clone https://mfeemster@bitbucket.org/mfeemster/fractorium.git
|
||
$ cd fractorium
|
||
$ qmake main.pro -r -spec linux-g++-64 CONFIG+=release
|
||
```
|
||
|
||
### Building a `.deb` locally
|
||
|
||
Update `debian/changelog` with a new log message. Update version number. Use the time from `date -R`.
|
||
|
||
Build:
|
||
|
||
```
|
||
$ ./package-linux.sh --binary-only --unsigned
|
||
```
|
||
|
||
Type `s` for single binary, `Enter`. It displays a confirm message, `Enter`.
|
||
|
||
When the build finished, find the `.deb` in `~/PPA/fractorium-VERSION`.
|
||
|
||
### Publishing to Launchpad PPA
|
||
|
||
Remember we are not building a `.deb` here, Launchpad will do that. We are just
|
||
uploading a signed source tarball.
|
||
|
||
Make sure `debian/changelog` was updated.
|
||
|
||
Build:
|
||
|
||
```
|
||
$ ./package-linux.sh
|
||
```
|
||
|
||
Type `s` for single binary, `Enter`. It displays a confirm message, `Enter`.
|
||
|
||
It asks for your GPG key passphrase to sign the source tarball.
|
||
|
||
Now upload the source tarball to Launchpad:
|
||
|
||
```
|
||
$ cd ~/PPA/fractorium-VERSION/
|
||
$ dput ppa:fractorium/ppa fractorium_VERSION-0ubuntu1_source.changes
|
||
```
|
||
|
||
An email will arrive to say if the package was accepted or rejected.
|
||
|
||
Wait for the autobuild to complete, and when the package is published, copy the
|
||
link to the `.deb` from "Package Details".
|
||
|
||
|
||
### Building an AppImage `.deb` and `.rpm` locally
|
||
|
||
The deb used in the PPA is different than the one downloaded from the website.
|
||
The latter is an encapsulation of an AppImage file which makes installation much easier and more likely to succeed due to the library dependencies being contained within.
|
||
|
||
Because of how AppImage works, the build cannot be done on a shared folder from within a VM that points back to the host OS’s file system (usually in /mnt/hgfs).
|
||
So be sure to checkout the source into a location that exists directly in the VM if you are using one.
|
||
|
||
To build the AppImage after successfully building using the make after qmake has ben run, do the following:
|
||
|
||
Ensure you these have two files in the folder up one level from the fractorium folder:
|
||
|
||
`linuxdeployqt-continuous-x86_64.AppImage`
|
||
|
||
`appimagetool-x86_64.AppImage`
|
||
|
||
Which can be downloaded from:
|
||
|
||
https://github.com/probonopd/linuxdeployqt/releases
|
||
|
||
https://appimage.github.io/appimagetool/
|
||
|
||
Make them executable by running this command in the folder they reside in:
|
||
|
||
`chmod +x ./*.AppImage`
|
||
|
||
Once those are installed, run these commands from the root of the fractorium folder:
|
||
|
||
`make`
|
||
|
||
`cd archive`
|
||
|
||
`./build_linux.sh`
|
||
|
||
In fractorium/Bin the output is contained in the following file:
|
||
|
||
`Fractorium-x.y.z.w-.x86_64.deb`
|
||
|
||
Alternatively, select the `.rpm` file for Red Hat.
|
||
|
||
These will contain an AppImage file inside of them. Just copy the file to the machine you want to install on and double click it. Follow the installer instructions.
|
||
|
||
|
||
## Narrative
|
||
|
||
Test that the package creator script:
|
||
|
||
`package-linux.sh` with no arguments builds a signed source for the Launchpad PPA.
|
||
|
||
Instead, now we want an unsigned binary `.deb`:
|
||
|
||
```
|
||
$ ./package-linux.sh --binary-only --unsigned
|
||
```
|
||
|
||
```
|
||
Error: Different version numbers were found. Please update the correct file,
|
||
the version numbers should agree up to the digits in:
|
||
|
||
a.b.c.d
|
||
w.x.y.z
|
||
|
||
./debian/changelog : a.b.c.d
|
||
./Source/Ember/EmberDefines.h : w.x.y.z
|
||
```
|
||
|
||
Change the version number in `debian/changelog` to match the one in `EmberDefines.h`. Next, get the time in the correct format and add it to a new entry in the changelog:
|
||
|
||
```
|
||
$ date -R
|
||
Sat, 18 Jun 2016 13:12:15 +0100
|
||
```
|
||
|
||
Add a new log message at the top of `debian/changelog`, copying the last message
|
||
and changing the version number and time.
|
||
|
||
```
|
||
fractorium (w.x.y.z-0ubuntu1) xenial; urgency=low
|
||
|
||
* release w.x.y.z
|
||
|
||
-- Matt Feemster <matt.feemster@gmail.com> Sat, 18 Jun 2016 13:12:15 +0100
|
||
```
|
||
|
||
Now try again:
|
||
|
||
```
|
||
$ ./package-linux.sh --binary-only --unsigned
|
||
```
|
||
|
||
You will be prompted with a question about the type of build:
|
||
|
||
```
|
||
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
|
||
[s/i/m/l/k/n]
|
||
```
|
||
|
||
Type `s` for single binary, `Enter`.
|
||
|
||
It displays a confirmation message, `Enter`.
|
||
|
||
The build starts. It copied the files which are not ignored in `.gitignore` out
|
||
to `~/PPA/fractorium-VERSION/`, and built it there.
|
||
|
||
Verify the build finished:
|
||
|
||
```
|
||
$ cd ~/PPA/fractorium-w.x.y.z
|
||
$ ls -lh
|
||
total 7.7M
|
||
drwxrwxr-x 2 user user 4.0K Jun 18 13:31 build-area
|
||
drwxrwxr-x 8 user user 4.0K Jun 18 13:19 fractorium
|
||
-rw------- 1 user user 780 Jun 18 13:31 fractorium_w.x.y.z-0ubuntu1_amd64.changes
|
||
-rw------- 1 user user 3.5M Jun 18 13:31 fractorium_w.x.y.z-0ubuntu1_amd64.deb
|
||
-rw-rw-r-- 1 user user 2.1M Jun 18 13:18 fractorium_w.x.y.z.orig.tar.gz
|
||
-rw-rw-r-- 1 user user 2.1M Jun 18 13:18 fractorium-w.x.y.z.tar.gz
|
||
```
|
||
|
||
This `.deb` is ready to use.
|
||
|
||
(aside)
|
||
|
||
You could upload this `.deb` to the website if you don't want to bother with the
|
||
Launchpad PPA. The advantages of the PPA are
|
||
|
||
- Testing the package and build procedure
|
||
- Users will automatically get the updated version when they run their regular upgrades
|
||
|
||
People prefer using the PPA to install and remain up to date like so:
|
||
|
||
```
|
||
sudo apt-add-repository ppa:fractorium/ppa
|
||
sudo apt-get update
|
||
sudo apt-get install fractorium
|
||
```
|
||
|
||
(aside end)
|
||
|
||
Installing the `.deb`:
|
||
|
||
```
|
||
sudo dpkg -i fractorium_w.x.y.z-0ubuntu1_amd64.deb
|
||
```
|
||
|
||
Verify fractorium loads with its menu icon, and the About page has the updated
|
||
version number. Run a few random flames, drag some xforms around, and test GPU support if you have it.
|
||
|
||
Upload the source to the Launchpad PPA for the auto-build.
|
||
|
||
In the original fractorium source folder:
|
||
|
||
```
|
||
$ ./package-linux.sh
|
||
PPA work folder already exists: /home/yume/PPA/fractorium-w.x.y.z
|
||
Move this folder aside or remove it.
|
||
```
|
||
|
||
It expects to be able to create a clean folder with that name and the earlier files aren't needed to remove it:
|
||
|
||
```
|
||
$ rm -r ~/PPA/fractorium-1.0.0.0
|
||
```
|
||
|
||
Try again:
|
||
|
||
```
|
||
$ ./package-linux.sh
|
||
```
|
||
|
||
Press `s` at the type of package question.
|
||
|
||
This is quick, it only creates a source tarball to upload.
|
||
|
||
Before finishing, it asks for your GPG key passphrase to sign the source tarball.
|
||
|
||
Upload it to Launchpad:
|
||
|
||
```
|
||
$ cd ~/PPA/fractorium-w.x.y.z/
|
||
$ dput ppa:fractorium/ppa fractorium_w.x.y.z-0ubuntu1_source.changes
|
||
```
|
||
|
||
It verifies your signature and says `Uploading to ppa (via ftp to ppa.launchpad.net)`.
|
||
|
||
Upload finished, now open your email and wait for a message from Launchpad. It
|
||
arrives, saying the package was accepted.
|
||
|
||
```
|
||
[~fractorium/ubuntu/ppa/xenial] fractorium w.x.y.z-0ubuntu1 (Accepted)
|
||
```
|
||
|
||
Open https://launchpad.net/~fractorium/+archive/ubuntu/ppa from the email and check that the build started:
|
||
|
||
```
|
||
[BUILDING] amd64 build of fractorium w.x.y.z-0ubuntu1 in ubuntu xenial RELEASE
|
||
Build started 2 minutes ago on lgw01-09
|
||
```
|
||
|
||
This will take several minutes.
|
||
|
||
If the package had been rejected, or if the autobuild now fails, then fix the build on your machine. When you want to try again, add a new
|
||
message to the top of `debian/changelog`, with a modified version number and
|
||
time. For these minor changes it is enough to append a letter to the version
|
||
number, such as `fractorium 1.0.0.0a`. Then create a tarball again with
|
||
`package-linux.sh`, and upload to Launchpad with `dput`.
|
||
|
||
Update the project links and description in
|
||
`debian/control`. Bump the version number to `fractorium 1.0.0.0a` and update the time to `date -R`.
|
||
|
||
Publish update:
|
||
|
||
```
|
||
$ ./package-linux.sh
|
||
$ cd ~/PPA/fractorium-w.x.y.za
|
||
$ dput ppa:fractorium/ppa fractorium_w.x.y.za-0ubuntu1_source.changes
|
||
```
|
||
|
||
Email says package accepted. Building has started. Finished:
|
||
|
||
```
|
||
Successfully built on lgw01-33
|
||
|
||
Started 23 minutes ago
|
||
Finished 1 minute ago (took 22 minutes, 6.6 seconds)
|
||
```
|
||
|
||
But also:
|
||
|
||
```
|
||
Binary packages awaiting publication:
|
||
|
||
fractorium-w.x.y.za-0ubuntu1
|
||
```
|
||
|
||
It usually takes a bit more time until the `.deb` is published in the PPA repository.
|
||
|
||
Commit the changes:
|
||
|
||
```
|
||
$ git checkout -b linux-w.x.y.za
|
||
$ git add -A .
|
||
$ git commit -m "linux w.x.y.za"
|
||
```
|
||
|
||
After a little while the package is published now, so go to:
|
||
|
||
- https://launchpad.net/~fractorium/+archive/ubuntu/ppa
|
||
- Select "Package Details"
|
||
- Open the dropdown arrow at the package listing, see "Publishing Details"
|
||
- Under "Package Files", copy the link to the `.deb`
|
||
|
||
https://launchpad.net/~fractorium/+archive/ubuntu/ppa/+files/fractorium_w.x.y.za-0ubuntu1_amd64.deb
|
||
|
||
Update the README.md link to this.
|
||
|
||
All done. Commit, push, send Pull Request.
|