Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

How do I create my own custom PPA to share with the Ubuntu community? I am trying to create my own custom package set and I would really like to share it with the community.

share|improve this question
    
related or the same: askubuntu.com/questions/28562/… –  fossfreedom Jul 8 at 22:01
    
Maybe this helps packaging.ubuntu.com/html/getting-set-up.html –  rubo77 Jul 9 at 10:12
add comment

3 Answers 3

up vote 24 down vote accepted

Using a Personal Package Archive (PPA), you can distribute software and updates directly to Ubuntu users. Create your source package, upload it and Launchpad will build binaries and then host them in your own apt repository.

Here is a detailed explanation.

share|improve this answer
    
FWIW I was able to active my PPA before I signed the code of conduct. –  Sparhawk Apr 3 at 4:30
    
This is the best answer. You were just told how to create a PPA. The response below (by totti) is not a PPA, but it is a public repository. The two are different, despite (potentially) accomplishing the same thing. He even says in the first line of his answer: "This question has a well written, accepted answer. As the OP wants a simple way to publish his packages I'm giving an easy hack." Because you prefer the easy hack does not make it the best answer. –  lbaile200 Jul 9 at 14:47
    
OK, but none of the links in this answer really describes how to do it from scratch. all links here are made for developers, that are already into the material much more –  rubo77 Jul 9 at 15:07
    
@rubo77 - the "how to create" is strictly too broad to be answerable. It all depends what you are trying to package. Indeed each of the steps in the above answer can be individual Q's with a good detailed answer each. –  fossfreedom Jul 11 at 14:25
    
Totti's new answer is great already –  rubo77 Jul 12 at 7:15
add comment

How to create a .deb file

This is a tutorial on creating a basic .deb file from a given sample script. In this tutorial first we create a sample program in bash that just show 'HELLO FROM PROGRAM'. Then we create a control file for the program in order to make a debian installer. Finally they are packaked into a .deb file.

Steps:

  1. create a sample program in bash

    mkdir "$HOME/create_deb/pgmdir"
    gedit "$HOME/create_deb/pgmdir/zenity_hello.sh"
    

    paste the following code into it

    #!/bin/bash
    echo 'HELLO FROM PROGRAM' | zenity --text-info 
    
  2. Make the program executable

    chmod  x "$HOME/create_deb/pgmdir/zenity_hello.sh"
    
  3. Create control file for the debian package

    Make a file named control inside folder DEBIAN

    mkdir "$HOME"/create_deb/DEBIAN
    gedit "$HOME"/create_deb/DEBIAN/control
    

    and paste following details

    Package: hellodeb
    Version: 0.1
    Architecture: all
    Maintainer: totti
    Installed-Size: 6
    Depends: zenity, bash
    Section: testing
    Priority: optional
    Homepage: http://askubuntu.com
    Description: This is my first debian package.
     Guided by Totti Torvalds.
     In Description new line start with a space.
    

    You can edit the contents if you like.

  4. Create postinst script, that is executed on installation of package on OS

    gedit "$HOME"/create_deb/DEBIAN/postinst
    

    then paste

    #!/bin/sh
    set -e
    echo 'Installing program : zenity_hello.sh ......' | zenity --text-info
    
  5. Create prerm script, that is executed on removel of package from OS

    #!/bin/sh
    set -e
    echo 'Removing program : zenity_hello.sh ......' | zenity --text-info
    
  6. Make package structure and copy programs, data, etc..
    Create a structure of your installed programs and it's data. In this example we put the file at /bin.

    mkdir -p "$HOME"/create_deb/bin
    cp "$HOME/create_deb/pgmdir/zenity_hello.sh" "$HOME/create_deb/bin/zenity_hello"
    
  7. Build the .deb file.

    dpkg-deb --build "$HOME"/create_deb  .
    

    The . will auto name the .deb file with version, arch etc. Or your custom name

    dpkg-deb --build "$HOME"/create_deb  "$HOME"/create_deb/hellodeb.deb
    

    Or if you build the .deb file with

    debuild -k'your GPG key here' -S
    

    then you can upload it to Ubuntu Launchpad with

    dput ppa:<lp-username>/<ppa-name> packet-source.changes
    

    like described here (source: create a .deb Package from scripts or binaries)

  8. Install the newly created .deb package.
    You can open it with software-center but it may not allow you to install. So I recommend to use gdebi package manager.

    sudo apt-get install gdebi
    
    gdebi "$HOME"/create_deb/hellodeb.deb
    

    Now you can install it. During installation you should see a gtk dialogue

    Installing program : zenity_hello.sh ......

  9. After installing open a terminal and type zenity_hello. If the program correctly installed and everything OK you should see a gtk dialogue

    HELLO FROM PROGRAM

  10. Removing package

    sudo apt-get remove zenity_hello
    

Publish your repository in 2 minutes

As the OP wants a simple way to publish his packages I'm giving an easy hack.

requirement: dropbox (or anyother service, for ex. github) account with a public folder.

  1. Create a folder inside your Public-Dropbox-Folder where you put your *.deb Files:

    mkdir ~/Dropbox/Public/deb-packages  
    

    or create that folder somwhere else and put a symlink in your Public folder:

    mkdir ~/deb-packages
    cd ~/Dropbox/Public
    ln -s ~/deb-packages/ deb-packages
    
  2. Go into that folder and create a script that, when executed, creates the Packages.gz, containing all the needed informationen about your deb-packages. create:

    gedit import.sh  
    

    put this in it:

    #!/bin/bash
    dpkg-scanpackages . /dev/null |gzip > Packages.gz
    

    make it executable:

    chmod  x import.sh
    
  3. Copy some *.deb Files into the Folder. Could be your own or some that aren't available through other repositories. Then go into the Folder and execute the script we put there:

    cd ~/deb-packages/ 
    ./import.sh
    

    That should create the so called Packages.gz File, which apt looks for to know which Packages are located at this repository.


That's it

Now, wait for Dropbox to synchronize the Folder and grab the Public-URL from the Packages.gz. It should look something like this:

http://dl.getdropbox.../Packages.gz

Get rid of the end of that link, put some more words to it and you can now use and populate the following line for the sources.list:

deb http://dl.getdropbox.../deb-packages ./

That's it you got your own deb repository running. Always synchronized locally, but available to anyone, anytime, anywhere.

NOTE: dpkg-scanpackages is available from dpkg-dev
reference

share|improve this answer
1  
+1 Great! this worked: I used Github and there the raw directory for a folder releases/ see github.com/rubo77/mouse-speed/blob/master/release/… –  rubo77 Jul 9 at 12:16
    
This describes a self hosted PPA, but how can I Build a Ubuntu debian package –  rubo77 Jul 9 at 15:03
    
If you build the .deb file in step 7. with debuild -us -uc -k'your GPG key here' then you can upload it with dput ppa:<lp-username>/<ppa-name> packet-source.changes to Launchpad like described here (source: create a .deb Package from scripts or binaries) –  rubo77 Jul 14 at 23:40
    
@rubo77,Thanks, I welcome you to add this infos at end of my answer. –  totti Jul 18 at 8:53
    
OK, I just did, I also found out, that you need other parameters for Launchpad to not to create the .deb file right now (just -S): debuild -k'your GPG key here' -S because Launchpad will create the deb file (if it is not rejected) - what would the ` -us -uc` have been for? –  rubo77 Jul 18 at 9:41
add comment

You will need a Launchpad.net account to create a PPA. Just click on your user on Launchpad (click on your name on the upper left) and create a PPA. You may have to first sign the Code of Conduct and have a GPG key registered with your account.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.