From 6ebc4dec012a8625bbc931c0bac312117f3ca6e6 Mon Sep 17 00:00:00 2001 From: Curtis Gedak Date: Sat, 18 Nov 2017 13:24:00 -0700 Subject: [PATCH] Initial Package Manuskript for Linux with dpkg tutorial --- Package-Manuskript-for-Linux-with-dpkg.md | 204 ++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 Package-Manuskript-for-Linux-with-dpkg.md diff --git a/Package-Manuskript-for-Linux-with-dpkg.md b/Package-Manuskript-for-Linux-with-dpkg.md new file mode 100644 index 0000000..54dbfd3 --- /dev/null +++ b/Package-Manuskript-for-Linux-with-dpkg.md @@ -0,0 +1,204 @@ +# SUMMARY + +This guide describes the steps for packaging **Manuskript** for Linux +using `dpkg`. The resulting `.deb` package runs on both 32-bit and +64-bit Debian based GNU/Linux distributions. + +# CONSIDERATIONS + +This document is heavily based on the steps found in this +[stackoverflow.com answer](https://stackoverflow.com/questions/7110604/standard-way-to-create-debian-packages-for-distributing-python-programs/26077181#26077181). +A huge thank you to +[Rafael Senties Martinelli](https://stackoverflow.com/users/3672754/rafael-senties-martinelli) +for posting this simplified method of building a `.deb` package. + +Originally I tried Ubuntu 14.04 Trusty Tahr as the base distro to +build the `.deb` file. Unfortunately when this `.deb` file was +installed on same distro it failed to run. Hence I am now using +Debian 8 Jessie. + +# PREPARATION + +Install tools needed to build package. + + sudo update + sudo apt install dpkg wget + +# CREATE PACKAGE STRUCTURE + +These are the basics for creating a Debian package for manuskript with +`dpkg -b `. + +Note that I have modified these steps to be specific to manuskript. + +In all of the steps replace the following variables with values: + + AppName manuskript + AppVersion 0.5.0 + PkgNumber 1 + PkgVersion 0.5.0-1 + PkgSizeInKb # find with: du -sk manuskript-0.5.0-1 + + 1. Create the files and folders in order to recreate the following structure: + + {PkgVersion}/ + {PkgVersion}/DEBIAN + {PkgVersion}/DEBIAN/control + {PkgVersion}/usr/ + {PkgVersion}/usr/bin/ + {PkgVersion}/usr/bin/{AppName} # Invocation script + {PkgVersion}/usr/share/ + {PkgVersion}/usr/share/applications + {PkgVersion}/usr/share/applications/{AppName}.desktop + {PkgVersion}/usr/share/{AppName} + {PkgVersion}/usr/share/{AppName}/{AppName-files} # Python code + + Now the code to do this: + + mkdir dist + cd dist + mkdir -p manuskript-0.5.0-1/DEBIAN + mkdir -p manuskript-0.5.0-1/usr/bin + mkdir -p manuskript-0.5.0-1/usr/share/applications + + 2. Add the python source code + + pushd manuskript-0.5.0-1/usr/share + wget https://github.com/olivierkes/manuskript/archive/0.5.0.tar.gz + tar -xvf 0.5.0.tar.gz + rm 0.5.0.tar.gz + mv manuskript-0.5.0 manuskript + popd + + 3. Add the invocation script + + Create `manuskript-0.5.0-1/usr/bin/manuskript` invocation file + with contents: + + *----- begin manuskript -----* + + #!/usr/bin/env python3 + # -*- coding: utf-8 -*- + # + # manuskript - invocation python script + # + # Copyright (C) 2017 Olivier Keshavjee + # + # This file is part of Manuskript. + # + # Manuskript is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. + # + # Manuskript is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with Manuskript. If not, see . + + import os + import sys + + sys.path.insert(1, '/usr/share/manuskript/') + + from manuskript import main + + main.run() + + *----- end manuskript -----* + + 4. Make the invocation script permissions executable. + + chmod 0755 manuskript-0.5.0-1/usr/bin/manuskript + + 5. Make the desktop graphic icon launch file. + + Create + `manuskript-0.5.0-1/usr/share/applications/manuskript.desktop` + file with contents: + + *----- begin manuskript.desktop -----* + + [Desktop Entry] + Name=Manuskript + Comment=An open source tool for writers + Keywords=manuskript;office;write;edit;novel;text;msk + Exec=/usr/bin/manuskript + Terminal=false + Type=Application + Icon=/usr/share/manuskript/icons/Manuskript/icon-512px.png + Categories=Office;WordProcessor; + + *----- end manuskript.desktop -----* + + **After 0.5.0 release start using + `/usr/share/manuskript/icons/Manuskript/manuskript.svg`** + + 6. Make the DEBIAN control file. + + Fields taken from + [deb-control man page](http://man7.org/linux/man-pages/man5/deb-control.5.html). + + Create `manuskript-0.5.0-1/DEBIAN/control` file with contents: + + *----- begin control -----* + + Package: manuskript + Version: 0.5.0-1 + Maintainer: Curtis Gedak + Description: Manuskript open source tool for writers. + Manuskript is an open source tool for writers. It + provides a rich environment to help writers create + their first draft and then further refine and edit + their masterpiece. + Section: office, text + Priority: optional + Installed-Size: {PkgSizeInKb} + Architecture: all + Origin: Debian 8 Jessie + Bugs: https://github.com/olivierkes/manuskript/issues + Homepage: https://github.com/olivierkes/manuskript/ + Source: https://github.com/olivierkes/manuskript/archive/0.5.0.tar.gz + Depends: python3, python3-pyqt5, python3-pyqt5.qtwebkit, libqt5svg5, python3-lxml, zlib1g, python3-enchant, python3-markdown, pandoc + Suggests: texlive-latex-recommended + + *----- end control -----* + + **Remember to fill in `{PkgSizeInKb}`!** + Use command: `du -sk manuskript-0.5.0-1` + + *NOTE: Build on Ubuntu 14.04 Trusty Tahr would fail to run when + the `.deb` package was installed. Now using Debian 8 Jessie.* + + 7. Change all the folders and files ownership to root. + + sudo chown root:root -R manuskript-0.5.0-1 + + 8. Create the `.deb` package. + + dpkg -b manuskript-0.5.0-1 + + This should create a `manuskript-0.5.0-1.deb` file. + +# PACKAGE INSTALL TEST + +Install `.deb` package with: + + sudo apt update # Ensure repository is up-to-date + sudo dpkg -i manuskript-0.5.0-1.deb # Install package without dependencies + sudo apt install -f # Install missing dependencies + +And try running manuskript. + +Other useful commands: + +* List installed manuskript package with `dpkg -l | grep -i manuskript` +* Remove manuskript package with `sudo apt purge manuskript` or `sudo + dpkg --purge manuskript` + +# REFERENCES + +- [Standard way to create debian packages for distributing Python programs?](https://stackoverflow.com/questions/7110604/standard-way-to-create-debian-packages-for-distributing-python-programs/26077181#26077181)