add README
This commit is contained in:
parent
13930c94ed
commit
c4e984a709
237
README.md
Normal file
237
README.md
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
RUNON - Run your commands in any systems
|
||||||
|
========================================
|
||||||
|
|
||||||
|
home: https://git.grandou.net/gilles/runon
|
||||||
|
|
||||||
|
|
||||||
|
Quick HOWTO
|
||||||
|
-----------
|
||||||
|
|
||||||
|
$ grep ^PRETTY_NAME /etc/os-release
|
||||||
|
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
|
||||||
|
|
||||||
|
$ runon centos7 grep ^PRETTY_NAME /etc/os-release
|
||||||
|
PRETTY_NAME="CentOS Linux 7 (Core)"
|
||||||
|
|
||||||
|
$ runon ubuntu20.04 grep ^PRETTY_NAME /etc/os-release
|
||||||
|
PRETTY_NAME="Ubuntu 20.04.2 LTS"
|
||||||
|
|
||||||
|
$ runon debian9 grep ^PRETTY_NAME /etc/os-release
|
||||||
|
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
|
||||||
|
|
||||||
|
$ runon centos7 xclock
|
||||||
|
[xclock launched!]
|
||||||
|
|
||||||
|
|
||||||
|
Install
|
||||||
|
-------
|
||||||
|
|
||||||
|
Installation is only tested on Debian 10, even though it should work
|
||||||
|
straightforward on any equivalent system.
|
||||||
|
|
||||||
|
## Docker Install
|
||||||
|
|
||||||
|
sudo apt install docker
|
||||||
|
|
||||||
|
Check that your user is part of `docker` group:
|
||||||
|
|
||||||
|
sudo adduser <user> docker
|
||||||
|
|
||||||
|
|
||||||
|
## manual install
|
||||||
|
|
||||||
|
cd <tools>
|
||||||
|
git clone https://git.grandou.net/gilles/runon
|
||||||
|
|
||||||
|
local install, in you `~/bin` (or wherever directory which is in your
|
||||||
|
PATH):
|
||||||
|
|
||||||
|
cd ~/bin
|
||||||
|
ln -s ~/tools/runon/runon
|
||||||
|
|
||||||
|
mkdir ~/.config/runon
|
||||||
|
cp <tools>/runon/runon.conf ~/.config/runon/
|
||||||
|
|
||||||
|
system install, for all users, as `root`:
|
||||||
|
|
||||||
|
mkdir /etc/runon
|
||||||
|
cp <tools>/run/runon /usr/local/bin/runon
|
||||||
|
cp <tools>/run/runon.conf /etc/runon/
|
||||||
|
|
||||||
|
each user can have its own configuration in `~/.config/runon/runon.conf`.
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
With the default configuration, a seamless environment is set up,
|
||||||
|
allowing to transparently run commands in various environments, while
|
||||||
|
keeping:
|
||||||
|
|
||||||
|
* user environment (uid, gid, password, home directory, ...)
|
||||||
|
* X support to run graphical applications
|
||||||
|
|
||||||
|
## Basic usage
|
||||||
|
|
||||||
|
runon [options] <osname> <command>
|
||||||
|
|
||||||
|
runon -h
|
||||||
|
|
||||||
|
## available options
|
||||||
|
|
||||||
|
* `-v` verbose output, this is really usefull when running new
|
||||||
|
containers for the first time, as the initial docker build can be
|
||||||
|
quite long (several minutes) especially with slow internet link.
|
||||||
|
If the command seems to be stalled, don't hesitate to interrupt it
|
||||||
|
(with `CTRL-C`) and to restart it with `-v`.
|
||||||
|
|
||||||
|
* `-u` forces the container image to be updated, useful if the
|
||||||
|
distribution has been updated and you want to use it. Otherwise,
|
||||||
|
if a container has been already built, it will be used directly
|
||||||
|
without doing any network access.
|
||||||
|
|
||||||
|
* `-c <configfile>` uses a custom config file, useful to try new
|
||||||
|
distribution without breaking your running config.
|
||||||
|
|
||||||
|
## Interactive shell
|
||||||
|
|
||||||
|
Just run:
|
||||||
|
|
||||||
|
runon <osname>
|
||||||
|
|
||||||
|
while start an insteractive shell in the container system:
|
||||||
|
|
||||||
|
gilles@host:~$ runon centos8
|
||||||
|
(centos8) gilles@host:~$ cat /etc/os-release
|
||||||
|
NAME="CentOS Linux"
|
||||||
|
VERSION="8"
|
||||||
|
ID="centos"
|
||||||
|
ID_LIKE="rhel fedora"
|
||||||
|
VERSION_ID="8"
|
||||||
|
PLATFORM_ID="platform:el8"
|
||||||
|
PRETTY_NAME="CentOS Linux 8"
|
||||||
|
ANSI_COLOR="0;31"
|
||||||
|
CPE_NAME="cpe:/o:centos:centos:8"
|
||||||
|
HOME_URL="https://centos.org/"
|
||||||
|
BUG_REPORT_URL="https://bugs.centos.org/"
|
||||||
|
CENTOS_MANTISBT_PROJECT="CentOS-8"
|
||||||
|
CENTOS_MANTISBT_PROJECT_VERSION="8"
|
||||||
|
(centos8) gilles@host:~$ id
|
||||||
|
uid=1000(gilles) gid=1000(gilles) groups=1000(gilles)
|
||||||
|
(centos8) gilles@host:~$ sudo id
|
||||||
|
[sudo] password for gilles:
|
||||||
|
uid=0(root) gid=0(root) groups=0(root)
|
||||||
|
(centos8) gilles@host:~$ xclock
|
||||||
|
^C
|
||||||
|
(centos8) gilles@host:~$ exit
|
||||||
|
exit
|
||||||
|
gilles@host:~$
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Configuration is done in `runon.conf` file, which describes supported
|
||||||
|
distribution in .INI format.
|
||||||
|
|
||||||
|
## Example config
|
||||||
|
|
||||||
|
```
|
||||||
|
[DEFAULT]
|
||||||
|
environment =
|
||||||
|
HOME
|
||||||
|
USER
|
||||||
|
DISPLAY
|
||||||
|
debian_chroot=${osname}
|
||||||
|
|
||||||
|
|
||||||
|
binds =
|
||||||
|
/etc/passwd:ro
|
||||||
|
/etc/group:ro
|
||||||
|
/etc/shadow:ro
|
||||||
|
/tmp/.X11-unix:ro
|
||||||
|
/home/${user}
|
||||||
|
|
||||||
|
[centos8]
|
||||||
|
dockerfile =
|
||||||
|
FROM centos:8
|
||||||
|
RUN yum install dnf-plugins-core -y
|
||||||
|
RUN yum config-manager --set-enabled powertools -y
|
||||||
|
RUN yum install sudo -y
|
||||||
|
RUN echo "Defaults lecture = never" >> /etc/sudoers
|
||||||
|
RUN echo "ALL ALL=(ALL) ALL" >> /etc/sudoers
|
||||||
|
pkginstall = RUN yum install {} -y
|
||||||
|
packages = ksh csh xterm xorg-x11-apps xkeyboard-config git
|
||||||
|
|
||||||
|
[debian9]
|
||||||
|
dockerfile =
|
||||||
|
FROM debian:9
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get -y install sudo
|
||||||
|
RUN echo "Defaults lecture = never" >> /etc/sudoers
|
||||||
|
pkginstall = RUN apt-get -y install {}
|
||||||
|
packages = ksh csh xterm x11-apps libgtk-3-0 build-essential git
|
||||||
|
```
|
||||||
|
|
||||||
|
Each section `[osname]` defines a distribution which can be used by runon.
|
||||||
|
The `[DEFAULT]` section defines default values which is used if not
|
||||||
|
overriden in individual section.
|
||||||
|
|
||||||
|
## Config entries
|
||||||
|
|
||||||
|
* `dockerfile` the base content of dockerfile which will be used to
|
||||||
|
generate the running environment. There is usually no need to diverge
|
||||||
|
from the ones given in example.
|
||||||
|
|
||||||
|
* `pkginstall` the dockerfile command used to install a package, likely
|
||||||
|
to be standard for all `deb` and `rpm` based distributions. In the
|
||||||
|
command `{}` is replaced by the package name.
|
||||||
|
|
||||||
|
* `packages` the list of packages to install. Feel free to add the ones
|
||||||
|
you need for your commands (likely news system libs, new tools, ...)
|
||||||
|
|
||||||
|
* `binds` the list of files and directories from the host system to
|
||||||
|
expose in the container system. you might want to add `/opt` or other
|
||||||
|
shared directories. See below for a description of `binds` entries
|
||||||
|
|
||||||
|
* `environment` the list of environment variables you want to pass or
|
||||||
|
set in the container system. See below for a description
|
||||||
|
|
||||||
|
Lines starting with `#` or `;` are comments.
|
||||||
|
|
||||||
|
Some substitution happens upon reading the configuration:
|
||||||
|
|
||||||
|
* `${user}` the current username
|
||||||
|
* `${osname}` the executed distribution.
|
||||||
|
|
||||||
|
## Binds
|
||||||
|
|
||||||
|
Each `binds` line can have one of the following formats:
|
||||||
|
|
||||||
|
<hostpath>
|
||||||
|
<hostpath>:<mode>
|
||||||
|
<hostpath>:<containerpath>
|
||||||
|
<hostpath>:<containerpath>:<mode>
|
||||||
|
|
||||||
|
with:
|
||||||
|
|
||||||
|
* `<hostpath>` is the filename or the dirname of the path you want
|
||||||
|
to expose
|
||||||
|
* `<containerpath>` is the pathname inside the container, by default
|
||||||
|
it's the same path.
|
||||||
|
* `<mode>` can be `rw`, read-write (by default), or `ro`, read-only.
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
|
||||||
|
Each `environment` line define a Environment Variable which is set
|
||||||
|
in the container upon execution.
|
||||||
|
|
||||||
|
Each line can have one of the following formats:
|
||||||
|
|
||||||
|
<envvar>
|
||||||
|
<envvar>=<value>
|
||||||
|
|
||||||
|
If no value is given, the host value is passed into the container.
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user