Welcome
=======
Welcome to manup.mreschke.net/README.html
README Created by mReschke on 2013-08-20 Updated 2014-07-22
Copyright (c) 2012, Matthew Reschke
Introduction
============
Manup which stands for "Manage Unix Ports" or "Unix Port Manager"
is a simple and generic package manager written in python and bash.
Packages use a custom `PORTBUILD` bash file to script installation. It uses
the MIT license so anyone can build their own manup server, custom repositories
and ports.
This program is a work in progress and is not tested extremely well. I use
it for my own personal script/file delivery system. The advanced features
like dependencies, optional dependencies... are not tested thoroughly.
Nothing will hurt your system thought, all uninstall/install is tested well,
it won't delete / on unisntall, at least it hasn't yet, but that also depends
on your own `PORTBUILD` files, you can do whatever you want in those.
I wrote manup in early 2013 because I have 50+ computers at home and work.
On each one I have the same bash profiles and custom bash functions and custom
scripts for various purposes... Each computer has different OS's,
Windows/Cygwin, Mac, FreeBSD, and all flavors of linux. I needed a simple
script/file delivery system, a package manager. A package manager that I could
easily install/run on any OS and system. I didn't want to make custom .deb's
or custom .rpm files for all my stuff. I needed a simple generic format, so I
created my own `PORTBUILD` system and the manup python client to go with it.
Manup is a client/server application. The manup server is simply a folder structure
of ports, code, files and simple bash helper scripts. This folder must be web
accessible and in an exact format listed below (or browse manup.mreschke.net).
Once you have this web accessible folder structure you can simply download and
install the manup python client, edit its `/etc/manup/manup.conf` file with your
web accessible repository urls, run `manup sync` then `manup search` and start
installing your own packages!
The manup client does keep track of files that were installed by each port.
When you uninstall the port it uninstalles each and every file that it originally
installed. You can define 'config' files in your `PORTBUILD` that will not be
overwritten when you upgrade your port (instead a `/etc/yourport/yourconfig.manupnew`
file will be copied in its place). You can define dependencies in your `PORTBUILD`
which will be automatically installed with your port.
The simple bash helper scripts (buildtree, create, package...) on the server side
really help you build your ports quickly and easily. You can have your own manup
server and repos with several of your own custom ports in minutes.
If you do copy this server folder structure to make your own server, be sure to
edit all of the bash scripts with your URL and information.
How to Install the Manup Client
===============================
If you have created your own manup server, then you should modify your install bash
script and of course substitute manup.mreschke.net below with your URL
On your linux/bsd/mac/cygwin computer simply run:
curl -LSs http://manup.mreschke.net/install | bash
sudo manup
sudo manup sync
sudo manup install manup/manup
Running manup for the first time creates a default `/etc/manup/manup.conf` file.
Edit that config file with your repo URLs and settings then run
`sudo manup sync` and `sudo manup search` to view your available packages.
You can of course use my repos which are defaulted in the config or can be viewed
at manup.mreschke.net. Most of these repos are for my own personal use so
use at your own risk.
The Server File Structure and URLs
==================================
All files are contained in one manup root directory. This directory contains
some bash helper scripts for building the tree and packages along with folders
for each of your repos. In these examples my repo is named lfs.
Port that is made up of some one elses source code
--------------------------------------------------
./lfs/gnutls/PORTBUILD
./lfs/gnutls/gnutls-3.0.9.tar.gz
./lfs/gnutls/package (symlink to manups ./package bash script)
The package script in this gnutls example would be run if you add a new upgraded
tar.gz file. Once you add the file, you then manually edit the `PORTBUILD` with at
least the new version number and reset the rel (release) to blank. Then run
`./package` which will update the `PORTBUILDS` filesize, fileurl and md5sum for you.
Port that is made up of your own custom scripts and files
---------------------------------------------------------
I code all my custom ports right in its manup directory, so it contains all the
source code of my project. The package bash script will notice the `source/myapp-1.0`
directory and create the .tar.gz file from it.
./lfs/myapp/PORTBUILD
./lfs/myapp/myapp-1.0.tar.gz
./lfs/myapp/package (symlink to manups ./package bash script)
./lfs/myapp/source
./lfs/myapp/source/myapp-1.0
./lfs/myapp/source/myapp-1.0/wherever scripts/files/folder you have
By running the packages script in this `./lfs/myapp/` directory it will read
the PORTBUILD, find that you are on version 1.0, then look for `source/myapp-1.0`,
if it exists it will tar.gz `source/myapp-1.0/` contents, this is your port package.
Like all other linux source code tar.gz, the `myapp-1.0` is the base of the tar, so
if you export the tar in `/tmp` folder, a `myapp-1.0` folder is made with the contents
inside.
Web Accessible URLs
-------------------
The main manup root folder should be web accessible, which means your repo folders
should be directly visible at http://manup.yourdomain.com/yourfirstrepo/
These are the URLs that you enter in your `/etc/manup/manup.conf` file, one line
for each repo you want to use.
Contributing
============
Thank you for considering contributing to manup! Fork and pull!
License
=======
Manup is open-sourced software licensed under the [MIT license](http://mreschke.com/license/mit)