diff --git a/README.md b/README.md
index 41a3215..29221ee 100644
--- a/README.md
+++ b/README.md
@@ -5,35 +5,76 @@ JuJu
Description
-----------
**JuJu** is a small and portable GNU/Linux distribution based on ArchLinux.
+It allows to have an isolated GNU/Linux environment inside the home directory
+without the need to have root privileges that is accessible via chroot and run
+on whatever Linux distribution.
-JuJu can be used inside another GNU/Linx OS via chroot.
-It only contains the package manager (called pacman and yaourt) in order to access
+JuJu only contains the package manager (called pacman and yaourt) in order to access
to a wide range of packages from ArchLinux repositories.
-The main advantage of using JuJu is because you have an isolated environment
-in which you can install packages without affecting a production system.
-Another advantage is that with JuJu you can access to a really wide range
-of packages inside GNU/Linux systems that contains limited repositories
-(such as CentOS and RedHat).
+The main advantage of using JuJu are:
+- It gives an isolated environment in which you can install packages without affecting a production system.
+- Access to a really wide range of packages even inside GNU/Linux systems that contains limited repositories (such as CentOS and RedHat).
+- Install packages without the need to be root.
Quickstart
----------
-After installing JuJu (see next section) just run the main juju script:
-```bash
-juju
-```
+After installing JuJu (see next section) you can run juju either as root or as normal user.
+To run as root:
+
+ # juju
+
+To run as normal user:
+
+ $ juju -n
+
The first time you execute it, the script will download the JuJu image and place it
to the default directory ~/.juju.
-You will need root privileges in order to acces to the chroot.
Installation
------------
Just clone JuJu somewhere (for example in ~/juju):
-```bash
-git clone git://github.com/fsquillace/juju ~/juju
-export PATH=~/juju/bin:$PATH
-```
+ $ git clone git://github.com/fsquillace/juju ~/juju
+ $ export PATH=~/juju/bin:$PATH
JuJu can only works on GNU/Linux OS with kernel version greater or equal
-2.6.32 in 32 or 64 bit.
+2.6.32 on 64 bit architecture (32 bit and arm will be available soon).
+
+Advanced usage
+--------------
+You can build a new JuJu image from scratch by running the following command:
+
+ # juju -b
+
+In this way the script will create a directory containing all the essentials
+files to make JuJu working properly (such as pacman, yaourt, arch-chroot and proot).
+Remember that the script to build the image must run in an ArchLinux OS with
+arch-install-scripts installed.
+
+To install the image named juju-x86\_64.tar.gz:
+
+ # juju -i juju-x86_64.tar.gz
+
+License
+-------
+Copyright (c) 2012-2014
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU Library General Public License as published
+by the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program 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 this program. If not, see .
+
+## Author
+Filippo Squillace
+
+## WWW
+https://github.com/fsquillace/juju
diff --git a/bin/juju b/bin/juju
index 8ea2c8e..9c23dde 100755
--- a/bin/juju
+++ b/bin/juju
@@ -32,6 +32,7 @@ usage() {
echo -e "Usage: $NAME [options]"
echo -e "Options:"
echo -e "-i, --setup-from-file Setup the JuJu image in ${JUJU_HOME}"
+ echo -e "-n, --no-root Run JuJu without root privileges"
echo -e "-b, --build-image Build a JuJu image (must run in ArchLinux only)"
echo -e "-h, --help Show this help message"
echo -e "-v, --version Show the $NAME version"
@@ -48,7 +49,7 @@ version() {
### MAIN PROGRAM ###
###################################
-TEMP=`getopt -o bihv --long build-imagesetup-from-file,help,version -n 'juju' -- "$@"`
+TEMP=`getopt -o nbihv --long no-root,build-image,setup-from-file,help,version -n 'juju' -- "$@"`
if [ $? != 0 ] ; then error "Error on parsing the command line. Try juju -h." ; exit ; fi
@@ -56,12 +57,14 @@ if [ $? != 0 ] ; then error "Error on parsing the command line. Try juju -h." ;
eval set -- "$TEMP"
OPT_SETUP_FROM_FILE=false
+OPT_NO_ROOT=false
OPT_BUILD_IMAGE=false
OPT_HELP=false
OPT_VERSION=false
while true ; do
case "$1" in
-i|--setup-from-file) OPT_SETUP_FROM_FILE=true ; shift ;;
+ -n|--no-root) OPT_NO_ROOT=true ; shift ;;
-b|--build-image) OPT_BUILD_IMAGE=true ; shift ;;
-h|--help) OPT_HELP=true ; shift ;;
-v|--version) OPT_VERSION=true ; shift ;;
@@ -89,6 +92,8 @@ fi
################ DEFINE ACTION ########################
if $OPT_SETUP_FROM_FILE; then
setup_from_file_juju ${ARGS[@]}
+elif $OPT_NO_ROOT; then
+ setup_and_run_no_root_juju
elif $OPT_BUILD_IMAGE; then
build_image_juju
else
diff --git a/lib/core.sh b/lib/core.sh
index 0a20d1a..dedca1c 100644
--- a/lib/core.sh
+++ b/lib/core.sh
@@ -33,7 +33,6 @@ source "$(dirname ${BASH_ARGV[0]})/util.sh"
################################# VARIABLES ##############################
[ -z ${JUJU_HOME} ] && JUJU_HOME=~/.juju
JUJU_REPO=https://bitbucket.org/fsquillace/juju-repo/raw/master
-JUJU_BIN=$(dirname "$0")
ORIGIN_WD=$(pwd)
################################# MAIN FUNCTIONS ##############################
@@ -82,10 +81,8 @@ function setup_from_file_juju(){
fi
local imagefile=$1
- if [ ! -e ${imagefile} ]
- then
- die "Error: The JuJu image file ${imagefile} does not exist"
- fi
+ [ ! -e ${imagefile} ] && die "Error: The JuJu image file ${imagefile} does not exist"
+
info "Installing JuJu from ${imagefile}..."
mkdir -p ${JUJU_HOME}
tar -zxpf ${ORIGIN_WD}/${imagefile} -C ${JUJU_HOME}
@@ -99,6 +96,9 @@ function run_juju(){
${JUJU_HOME}/usr/bin/arch-chroot $JUJU_HOME
}
+function run_no_root_juju(){
+ ${JUJU_HOME}/usr/bin/proot -S ${JUJU_HOME}
+}
function setup_and_run_juju(){
# Setup and run the JuJu environment
@@ -109,6 +109,15 @@ function setup_and_run_juju(){
run_juju
}
+function setup_and_run_no_root_juju(){
+# Setup and run the JuJu environment
+# The setup function will be executed only if the
+# JuJu envinronment in $JUJU_HOME is not present.
+
+ [ ! "$(ls -A $JUJU_HOME)" ] && setup_juju
+ run_no_root_juju
+}
+
function build_image_juju(){
# The function must runs on ArchLinux
# The dependencies are:
@@ -119,21 +128,27 @@ function build_image_juju(){
mkdir -p ${maindir}/root
prepare_build_directory
info "Installing pacman and its dependencies..."
- pacstrap -d ${maindir}/root pacman arch-install-scripts
+ pacstrap -d ${maindir}/root pacman arch-install-scripts binutils
info "Compiling and installing yaourt..."
- mkdir -p ${maindir}/yaourt/{package-query,yaourt}
+ mkdir -p ${maindir}/packages/{package-query,yaourt,proot}
- builtin cd ${maindir}/yaourt/package-query
+ builtin cd ${maindir}/packages/package-query
wget https://aur.archlinux.org/packages/pa/package-query/PKGBUILD
makepkg -sfc --asroot
pacman --noconfirm --root ${maindir}/root -U package-query*.pkg.tar.xz
- builtin cd ${maindir}/yaourt/yaourt
+ builtin cd ${maindir}/packages/yaourt
wget https://aur.archlinux.org/packages/ya/yaourt/PKGBUILD
makepkg -sfc --asroot
pacman --noconfirm --root ${maindir}/root -U yaourt*.pkg.tar.xz
+ info "Compiling and installing proot..."
+ builtin cd ${maindir}/packages/proot
+ wget https://aur.archlinux.org/packages/pr/proot/PKGBUILD
+ makepkg -sfc --asroot
+ pacman --noconfirm --root ${maindir}/root -U proot*.pkg.tar.xz
+
rm ${maindir}/root/var/cache/pacman/pkg/*
builtin cd ${ORIGIN_WD}