mirror of
https://github.com/fsquillace/junest.git
synced 2026-07-22 10:37:20 +00:00
Define three type of users: normal, fakeroot and root
This commit is contained in:
parent
8b91d2b60f
commit
f52d0fa8b2
3 changed files with 55 additions and 42 deletions
27
README.md
27
README.md
|
|
@ -1,6 +1,6 @@
|
|||
JuJu
|
||||
====
|
||||
**JuJu**: the portable GNU/Linux distribution.
|
||||
**JuJu**: the portable GNU/Linux distribution
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
|
@ -19,17 +19,24 @@ The main advantage of using JuJu are:
|
|||
|
||||
Quickstart
|
||||
----------
|
||||
After installing JuJu (see next section) you can run juju either as root or as normal user.
|
||||
To run as root:
|
||||
There are three different ways you can run JuJu:
|
||||
|
||||
# juju
|
||||
|
||||
To run as normal user:
|
||||
|
||||
$ juju -n
|
||||
- As normal user - Allow to make basic operations using [proot](https://wiki.archlinux.org/index.php/Proot):
|
||||
```
|
||||
$ juju
|
||||
```
|
||||
- As fakeroot - Allow to install/remove packages using [proot](https://wiki.archlinux.org/index.php/Proot):
|
||||
```
|
||||
$ juju -f
|
||||
```
|
||||
- As root - Allow to have fully root privileges inside JuJu environment using [arch-chroot](https://wiki.archlinux.org/index.php/Chroot) (you need to be root for executing this):
|
||||
```
|
||||
# juju -r
|
||||
```
|
||||
|
||||
The first time you execute it, the script will download the JuJu image and place it
|
||||
to the default directory ~/.juju.
|
||||
You can change this behavior by changing the environment variable *JUJU\_HOME*.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
|
@ -63,7 +70,9 @@ Troubleshooting
|
|||
In order to install packages using yaourt you may need to install the package groups *base-devel*
|
||||
that contains all the essential packages for compiling source code (such as gcc, make, patch, etc):
|
||||
|
||||
```
|
||||
pacman -S base-devel
|
||||
```
|
||||
|
||||
- **Q**: Why do I get the error: "FATAL: kernel too old"?
|
||||
- **A**: This is because the executable from the precompiled package cannot
|
||||
|
|
@ -71,8 +80,10 @@ always run if the kernel is old.
|
|||
In order to check if the executable can be compatible with the kernel of
|
||||
the host OS just use file command, for instance:
|
||||
|
||||
```
|
||||
file ~/.juju/usr/bin/bash
|
||||
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ec37e49e7188ff4030052783e61b859113e18ca6, stripped
|
||||
```
|
||||
|
||||
From the output you can see what is the minimum recommended Linux kernel version.
|
||||
|
||||
|
|
|
|||
25
bin/juju
25
bin/juju
|
|
@ -32,7 +32,8 @@ usage() {
|
|||
echo -e "Usage: $NAME [options]"
|
||||
echo -e "Options:"
|
||||
echo -e "-i, --setup-from-file <image> Setup the JuJu image in ${JUJU_HOME}"
|
||||
echo -e "-n, --no-root Run JuJu without root privileges"
|
||||
echo -e "-f, --fakeroot Run JuJu with fakeroot privileges"
|
||||
echo -e "-r, --root Run JuJu with 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"
|
||||
|
|
@ -49,7 +50,7 @@ version() {
|
|||
### MAIN PROGRAM ###
|
||||
###################################
|
||||
|
||||
TEMP=`getopt -o nbihv --long no-root,build-image,setup-from-file,help,version -n 'juju' -- "$@"`
|
||||
TEMP=`getopt -o rfbihv --long root,fakeroot,build-image,setup-from-file,help,version -n 'juju' -- "$@"`
|
||||
|
||||
if [ $? != 0 ] ; then error "Error on parsing the command line. Try juju -h." ; exit ; fi
|
||||
|
||||
|
|
@ -57,14 +58,16 @@ 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_FAKEROOT=false
|
||||
OPT_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 ;;
|
||||
-f|--fakeroot) OPT_FAKEROOT=true ; shift ;;
|
||||
-r|--root) OPT_ROOT=true ; shift ;;
|
||||
-b|--build-image) OPT_BUILD_IMAGE=true ; shift ;;
|
||||
-h|--help) OPT_HELP=true ; shift ;;
|
||||
-v|--version) OPT_VERSION=true ; shift ;;
|
||||
|
|
@ -92,12 +95,20 @@ 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
|
||||
exit
|
||||
elif $OPT_BUILD_IMAGE; then
|
||||
build_image_juju
|
||||
exit
|
||||
fi
|
||||
|
||||
[ ! "$(ls -A $JUJU_HOME)" ] && setup_juju
|
||||
|
||||
if $OPT_FAKEROOT; then
|
||||
run_juju_as_fakeroot
|
||||
elif $OPT_ROOT; then
|
||||
run_juju_as_root
|
||||
else
|
||||
setup_and_run_juju
|
||||
run_juju_as_user
|
||||
fi
|
||||
|
||||
# vim: set ts=4 sw=4 noet:
|
||||
|
|
|
|||
45
lib/core.sh
45
lib/core.sh
|
|
@ -53,6 +53,15 @@ function prepare_build_directory(){
|
|||
}
|
||||
|
||||
|
||||
function _setup_juju(){
|
||||
imagepath=$1
|
||||
mkdir -p ${JUJU_HOME}
|
||||
tar -zxpf ${imagepath} -C ${JUJU_HOME}
|
||||
mkdir -p ${JUJU_HOME}/run/lock
|
||||
info "JuJu installed successfully"
|
||||
}
|
||||
|
||||
|
||||
function setup_juju(){
|
||||
# Setup the JuJu environment
|
||||
local maindir=$(TMPDIR=/tmp mktemp -d -t juju.XXXXXXXXXX)
|
||||
|
|
@ -88,47 +97,29 @@ function setup_from_file_juju(){
|
|||
}
|
||||
|
||||
|
||||
function _setup_juju(){
|
||||
imagepath=$1
|
||||
mkdir -p ${JUJU_HOME}
|
||||
tar -zxpf ${imagepath} -C ${JUJU_HOME}
|
||||
mkdir -p ${JUJU_HOME}/run/lock
|
||||
info "JuJu installed successfully"
|
||||
}
|
||||
|
||||
|
||||
function run_juju(){
|
||||
function run_juju_as_root(){
|
||||
mkdir -p ${JUJU_HOME}/${HOME}
|
||||
${JUJU_HOME}/usr/bin/arch-chroot $JUJU_HOME /usr/bin/bash -c 'mkdir -p /run/lock && /bin/sh'
|
||||
}
|
||||
|
||||
|
||||
function run_no_root_juju(){
|
||||
function _run_juju_with_proot(){
|
||||
if ${JUJU_HOME}/usr/bin/proot ${JUJU_HOME}/usr/bin/true &> /dev/null
|
||||
then
|
||||
${JUJU_HOME}/usr/bin/proot -S ${JUJU_HOME}
|
||||
${JUJU_HOME}/usr/bin/proot $@ ${JUJU_HOME}
|
||||
else
|
||||
PROOT_NO_SECCOMP=1 ${JUJU_HOME}/usr/bin/proot -S ${JUJU_HOME}
|
||||
PROOT_NO_SECCOMP=1 ${JUJU_HOME}/usr/bin/proot $@ ${JUJU_HOME}
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function setup_and_run_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_juju
|
||||
function run_juju_as_fakeroot(){
|
||||
_run_juju_with_proot "-S"
|
||||
}
|
||||
|
||||
|
||||
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 run_juju_as_user(){
|
||||
_run_juju_with_proot "-R"
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue