{"id":13503258,"url":"https://github.com/fsquillace/junest","last_synced_at":"2025-05-15T05:08:03.236Z","repository":{"id":22067147,"uuid":"25396290","full_name":"fsquillace/junest","owner":"fsquillace","description":"The lightweight Arch Linux based distro that runs, without root privileges, on top of any other Linux distro.","archived":false,"fork":false,"pushed_at":"2024-10-12T09:56:57.000Z","size":514,"stargazers_count":2145,"open_issues_count":63,"forks_count":113,"subscribers_count":39,"default_branch":"master","last_synced_at":"2025-04-11T02:51:25.159Z","etag":null,"topics":["arch-linux","archlinux","linux","linux-distros","linux-os","qemu","root-privileges","sandbox","shell"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fsquillace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"fsquillace","custom":"https://github.com/fsquillace/junest/blob/master/README.md#donating"}},"created_at":"2014-10-18T12:11:47.000Z","updated_at":"2025-04-10T21:47:45.000Z","dependencies_parsed_at":"2023-11-15T22:36:46.367Z","dependency_job_id":"834917b3-4d4d-439d-8718-0e21952e209a","html_url":"https://github.com/fsquillace/junest","commit_stats":null,"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fsquillace%2Fjunest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fsquillace%2Fjunest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fsquillace%2Fjunest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fsquillace%2Fjunest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fsquillace","download_url":"https://codeload.github.com/fsquillace/junest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254276447,"owners_count":22043867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arch-linux","archlinux","linux","linux-distros","linux-os","qemu","root-privileges","sandbox","shell"],"created_at":"2024-07-31T22:02:43.746Z","updated_at":"2025-05-15T05:07:58.228Z","avatar_url":"https://github.com/fsquillace.png","language":"Shell","readme":"JuNest\n======\n\n\u003e [!IMPORTANT]\n\u003e Starting from Ubuntu 23.10+, [unprivileged user namespaces has been restricted](https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces).\n\u003e If using JuNest within Ubuntu, you may need root privileges in order to enable it.\n\u003e Alternatively, you can access JuNest using the `proot` mode as described\n\u003e [below](#Proot-based).\n\nThe lightweight Arch Linux based distro that runs, without root privileges, on top of any other Linux distro.\n\n\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://github.com/fsquillace/junest\"\u003e\u003cimg\n        alt=\"JuNest\"\n        width=250px\n        src=\"https://cdn.rawgit.com/fsquillace/junest-logo/master/junest.svg\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\n|Project Status|Donation|Communication|\n|:------------:|:------:|:-----------:|\n| [![Build status](https://api.travis-ci.com/fsquillace/junest.png?branch=master)](https://app.travis-ci.com/github/fsquillace/junest) [![OpenHub](https://www.openhub.net/p/junest/widgets/project_thin_badge.gif)](https://www.openhub.net/p/junest) | [![Github Sponsors](https://img.shields.io/badge/GitHub-Sponsors-orange.svg)](https://github.com/sponsors/fsquillace) [![PayPal](https://img.shields.io/badge/PayPal-Donation-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=8LEHQKBCYTACY) [![Buy me a coffee](https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png)](https://www.buymeacoffee.com/fsquillace) | [![Join the Discord server at https://discord.gg/ttfBT7MKve](https://img.shields.io/badge/Discord-Server-blueviolet.svg)](https://discord.gg/ttfBT7MKve) |\n\n**Table of Contents**\n- [Description](#description)\n- [Quickstart](#quickstart)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Advanced usage](#advanced-usage)\n- [Internals](#internals)\n- [Troubleshooting](#troubleshooting)\n- [More documentation](#more-documentation)\n- [Contributing](#contributing)\n- [Donating](#donating)\n- [Authors](#authors)\n\nDescription\n===========\n**JuNest** (Jailed User Nest) is a lightweight Arch Linux based distribution\nthat allows the creation of disposable and partially isolated GNU/Linux environments\nwithin any generic GNU/Linux host OS and without requiring root\nprivileges to install packages.\n\nJuNest is built around [pacman](https://wiki.archlinux.org/index.php/Pacman),\nthe Arch Linux package manager, which allows access\nto a wide range of packages from the Arch Linux repositories.\n\nThe main advantages of using JuNest include:\n\n- Install packages without root privileges.\n- Create partially isolated environments in which you can install packages without risking mishaps on production systems.\n- Access a wider range of packages, particularly on GNU/Linux distros with comparatively limited repositories (such as CentOS and Red Hat).\n- Run on a different architecture from the host OS via QEMU.\n- Available for `x86_64` and `arm` architectures but you can build your own image from scratch too!\n- All Arch Linux lovers can enjoy their favourite distro everywhere!\n\nJuNest follows the [Arch Linux philosophy](https://wiki.archlinux.org/index.php/The_Arch_Way).\n\nHow different is JuNest from Docker and Vagrant?\n------------------------------------------------\nAlthough JuNest sounds similar to a virtualisation/Linux container-like system,\nJuNest is quite different from solutions like Docker or Vagrant.\nIn fact, the purpose of JuNest is **not** to\nbuild a completely isolated environment but, conversely, to provide the ability to run\nprograms as if they were running natively from the host OS. Almost everything is shared\nbetween the host OS and the JuNest sandbox (kernel, process subtree, network, mounting, etc)\nand only the root filesystem gets isolated\n(since the programs installed in JuNest need to reside elsewhere).\n\nThis allows interaction between processes belonging to both host OS and JuNest.\nFor example, you can install the `top` command in JuNest and use it to monitor\nprocesses belonging to the host OS.\n\nInstallation\n============\n\n## Dependencies ##\nJuNest comes with a very short list of dependencies in order to be installed in most\nof GNU/Linux distributions.\nBefore installing JuNest be sure that all dependencies are properly installed in your system:\n\n- [bash (\u003e=4.0)](https://www.gnu.org/software/bash/)\n- [GNU coreutils](https://www.gnu.org/software/coreutils/)\n\n## Installation from git repository ##\nJust clone the JuNest repo somewhere (for example in ~/.local/share/junest):\n\n```sh\ngit clone https://github.com/fsquillace/junest.git ~/.local/share/junest\nexport PATH=~/.local/share/junest/bin:$PATH\n```\n\nOptionally you want to use the wrappers to run commands\ninstalled in JuNest directly from host:\n\n```sh\nexport PATH=\"$PATH:~/.junest/usr/bin_wrappers\"\n```\nUpdate your `~/.bashrc` or `~/.zshrc` to get always the wrappers available.\n\n### Installation using AUR (Arch Linux only) ###\nIf you are using an Arch Linux system you can, alternatively, install JuNest from the [AUR repository](https://aur.archlinux.org/packages/junest-git/).\nJuNest will be located in `/opt/junest/`\n\nQuickstart\n==========\n\nSetup environment\n-----------------\n\nThe first operation required is to install the JuNest environment in the\nlocation of your choice via `JUNEST_HOME` environment variable\n(it must contain an absolute path) which by\ndefault is `~/.junest`:\n\n```sh\njunest setup\n```\n\nThe script will download the image from the repository and will place it to the default directory `~/.junest`.\n\nAccess to environment\n---------------------\n\nJuNest uses the Linux namespaces (aka `ns`) as the default backend program. To access via `ns` just type:\n\n```sh\njunest\n```\n\nYou can use the command `sudo` to acquire fakeroot privileges and\ninstall/remove packages.\n\nAlternatively, you can access fakeroot privileges without using `sudo` all the\ntime with the `-f` (or `--fakeroot`) option:\n\n```sh\njunest -f\n```\n\nAnother execution mode is via [Proot](https://wiki.archlinux.org/index.php/Proot):\n\n```sh\njunest proot [-f]\n```\n\nThere are multiple backend programs, each with its own pros/cons.\nTo know more about the JuNest execution modes depending on the backend program\nused, see the [Usage](#usage) section below.\n\nRun JuNest installed programs directly from host OS\n---------------------------------------\n\nPrograms installed within JuNest can be accessible directly from host machine\nwithout entering into a JuNest session\n(namely, no need to call `junest` command first).\nFor instance, supposing the host OS is an Ubuntu distro you can directly\nrun `pacman` by simply updating the `PATH` variable:\n\n```sh\nexport PATH=\"$PATH:~/.junest/usr/bin_wrappers\"\nsudoj pacman -S htop\nhtop\n```\n\nBy default the wrappers use `ns` mode. To use the `ns --fakeroot` you can use the convenient command helper `sudoj`.\nFor more control on backend modes you can use the `JUNEST_ARGS` environment variable too.\nFor instance, if you want to run `iftop` with real root privileges:\n\n```\nsudoj pacman -S iftop\nsudo JUNEST_ARGS=\"groot\" iftop\n```\n\nBin wrappers can be always recreated (e.g. in case for some reasons they get\ncorrupted) with:\n\n```\njunest create-bin-wrappers -f\n```\n\nBin wrappers are automatically generated each time they get installed inside JuNest.\nThis only works for executables located in `/usr/bin` path.\nFor executables in other locations (say `/usr/mybinpath`) you can only create\nwrappers manually by executing the command:\n\n```\njunest create-bin-wrappers --bin-path /usr/mybinpath\n```\n\nObviously, to get access to the corresponding bin wrappers you will need to\nupdate your `PATH` variable accordingly:\n\n```\nexport PATH=\"$PATH:~/.junest/usr/mybinpath_wrappers\"\n```\n\nInstall packages from AUR\n-------------------------\n\nIn `ns` mode, you can easily install package from [AUR](https://aur.archlinux.org/) repository\nusing the already available [`yay`](https://aur.archlinux.org/packages/yay/)\ncommand. In `proot` mode, JuNest does no longer support the building of AUR packages.\n\n**Remember** that in order to build packages from AUR, `base-devel` package group is required\nfirst:\n\n```sh\npacman -S base-devel\n```\n\nJuNest uses a modified version of `sudo` provided by `junest/sudo-fake`. And the original `core/sudo`\npackage will be ignored **(and must not be installed)** during the installation of `base-devel`.\n\nHave fun!\n---------\n\nIf you are new on Arch Linux and you are not familiar with `pacman` package manager\nvisit the [pacman rosetta page](https://wiki.archlinux.org/index.php/Pacman_Rosetta).\n\nUsage\n=====\nThere are three different ways you can run JuNest depending on the backend program you decide to use.\n\nLinux namespaces based\n----------------------\nThe [Linux namespaces](http://man7.org/linux/man-pages/man7/namespaces.7.html)\nrepresents the default backend program for JuNest.\nThe requirements for having Linux namespaces working are:\n\n1. Kernel starting from Linux 3.8 allows unprivileged processes to create\nuser and mount namespaces.\n1. The Linux kernel distro must have the user namespace enabled.\n\nIn the last years, the majority of GNU/Linux distros have the user namespace\nenabled by default. This means that you do not need to have root privileges to\naccess to the JuNest environment via this method.\nThis\n[wiki](https://github.com/fsquillace/junest/wiki/Linux-distros-with-user-namespace-enabled-by-default)\nprovides the state of the user namespace on several GNU/Linux distros.\n\nIn order to run JuNest via Linux namespaces:\n\n- As normal user - Allow to make basic operations or install/remove packages\nwith `sudo` command: `junest ns` or `junest`\n- As fakeroot - Allow to install/remove packages: `junest ns -f` or `junest -f`\n\nThis mode is based on the fantastic\n[`bubblewrap`](https://github.com/containers/bubblewrap) command.\n\nPRoot based\n-----------\n[Proot](https://wiki.archlinux.org/index.php/Proot) represents a portable\nsolution which allows unprivileged users to execute programs inside a sandbox\nand works well in most of GNU/Linux distros available.\n\nIn order to run JuNest via Proot:\n\n- As normal user - Allow to make basic operations: `junest proot`\n\n- As fakeroot - Allow to install/remove packages: `junest proot -f`\n\nIn `proot` mode, the minimum recommended Linux kernel for the host OS is 2.6.32 on x86 (64 bit)\nand ARM architectures. It is still possible to run JuNest on lower\n2.6.x host OS kernels but errors may appear, and some applications may\ncrash. For further information, read the [Troubleshooting](#troubleshooting)\nsection below.\n\nChroot based\n------------\nThis solution suits only for privileged users. JuNest provides the possibility\nto run the environment via `chroot` program.\nIn particular, it uses a special program called `GRoot`, a small and portable\nversion of\n[arch-chroot](https://wiki.archlinux.org/index.php/Chroot)\nwrapper, that allows to bind mount directories specified by the user, such as\n`/proc`, `/sys`, `/dev`, `/tmp`, `/run/user/\u003cid\u003e` and `$HOME`, before\nexecuting any programs inside the JuNest sandbox. In case the mounting will not\nwork, JuNest is even providing the possibility to run the environment directly via\nthe pure `chroot` command.\n\nIn order to run JuNest via `chroot` solutions:\n\n- As root via `GRoot` - Allow to have fully root privileges inside JuNest environment (you need to be root for executing this): `junest groot`\n\n- As root via `chroot` - Allow to have fully root privileges inside JuNest environment (you need to be root for executing this): `junest root`\n\nExecution modes comparison table\n----------------\nThe following table shows the capabilities that each backend program is able to perform:\n\n|     | QEMU | Root privileges required | Manage Official Packages | Manage AUR Packages | Portability | Support | User modes |\n| --- | ---- | ------------------------ | ------------------------ | ------------------- | ----------- | ------- | ---------- |\n| **Linux Namespaces** | NO | NO | YES | YES | Poor | YES | Normal user and `fakeroot` |\n| **Proot** | YES | NO | YES | NO | YES | YES | Normal user and `fakeroot` |\n| **Chroot** | NO | YES | YES | YES | YES | YES | `root` only |\n\nAdvanced usage\n==============\n## Build image ##\nYou can build a new JuNest image from scratch by running the following command:\n\n```sh\njunest build [-n]\n```\n\nThe script will create a directory containing all the essentials\nfiles in order to make JuNest working properly (such as `pacman` and `proot`).\nThe option `-n` will skip the final validation tests if they are not needed.\nRemember that the script to build the image must run in an Arch Linux OS with\narch-install-scripts and the base-devel packages installed.\nTo change the build directory just use the `JUNEST_TEMPDIR` (by default /tmp).\n\nAfter creating the image `junest-x86_64.tar.gz` you can install it by running:\n\n```sh\njunest setup -i junest-x86_64.tar.gz\n```\n\nFor more details, you can also take a look at\n[junest-builder](https://github.com/fsquillace/junest-builder)\nthat contains the script and systemd service used for the automatic building\nof the JuNest image.\n\nRelated wiki page:\n\n- [How to build a JuNest image using QEMU](https://github.com/fsquillace/junest/wiki/How-to-build-a-JuNest-image-using-QEMU)\n\n## Run JuNest using a different architecture via QEMU ##\nThe following command will download the ARM JuNest image and will run QEMU in\ncase the host OS runs on `x86_64` architecture:\n\n```sh\n$\u003e export JUNEST_HOME=~/.junest-arm\n$\u003e junest setup -a arm\n$\u003e junest proot -- uname -m\narmv7l\n```\n\n## Bind directories ##\nTo bind a host directory to a guest location:\n\n```sh\njunest -b \"--bind /home/user/mydata /mnt/mydata\"\n```\n\nOr using proot arguments:\n\n```sh\njunest proot -b \"-b /mnt/mydata:/home/user/mydata\"\n```\n\nThe option `-b` to provide options to the backend program will work with PRoot, Namespace and GRoot backend programs.\nCheck out the backend program options by passing `--help` option:\n\n```sh\njunest [u|g|p] -b \"--help\"\n```\n\n## Systemd integration ##\nAlthough JuNest has not been designed to be a complete container, it is even possible to\nvirtualize the process tree thanks to the [systemd container](https://wiki.archlinux.org/index.php/Systemd-nspawn).\nThe JuNest containter allows to run services inside the container that can be\nvisible from the host OS through the network.\nThe drawbacks of this are that the host OS must use systemd as a service manager,\nand the container can only be executed using root privileges.\n\nTo boot a JuNest container:\n\n```sh\nsudo systemd-nspawn -bD ~/.junest\n```\n\nRelated wiki page:\n\n- [How to run junest as a container](https://github.com/fsquillace/junest/wiki/How-to-run-JuNest-as-a-container)\n- [How to run services using Systemd](https://github.com/fsquillace/junest/wiki/How-to-run-services-using-Systemd)\n\nInternals\n=========\n## Automatic fallback for all the dependent host OS executables ##\nJuNest attempts first to run the executables in the host OS located in different\npositions (`/usr/bin`, `/bin`, `/usr/sbin` and `/sbin`).\nAs a fallback it tries to run the same executable if it is available in the JuNest\nenvironment.\n\n## Automatic building of the JuNest images ##\nThere is a periodic automation build of the JuNest images for `x86_64` arch\nonly.\nThe JuNest image for `arm` architecture may not be always up to date because\nthe build is performed manually.\n\n## Static QEMU binaries ##\nThere are static QEMU binaries included in JuNest image that allows to run JuNest\nin a different architecture from the host system. They are located in `/opt/qemu`\ndirectory.\n\nTroubleshooting\n===============\n\nFor Arch Linux related FAQs take a look at the [General troubleshooting page](https://wiki.archlinux.org/index.php/General_troubleshooting).\n\n## Cannot use AUR repository ##\n\n\u003e **Q**: Why do I get the following error when I try to install a package?\n\n    Cannot find the gzip binary required for compressing man and info pages.\n\n\u003e **A**: JuNest comes with a very basic number of packages.\n\u003e In order to install AUR packages you need to install the package group `base-devel` first\n\u003e that contains all the essential packages for compiling from source code (such as gcc, make, patch, etc):\n\n    #\u003e pacman -S base-devel\n\n\u003e Remember to not install `core/sudo` as it conflicts with `junest/sudo-fake` package.\n\n## Can't set user and group as root\n\n\u003e **Q**: In ns mode when installing package I get the following error:\n\n    warning: warning given when extracting /usr/file... (Can't set user=0/group=0 for\n    /usr/file...)\n\n\u003e **A**: This is because as fakeroot is not possible to set the owner/group of\n\u003e files as root. The package will still be installed correctly even though this\n\u003e message is showed.\n\n## Could not change the root directory in pacman\n\n## No servers configured for repository ##\n\n\u003e **Q**: Why I cannot install packages?\n\n    #\u003e pacman -S lsof\n    Packages (1): lsof-4.88-2\n\n    Total Download Size:    0.09 MiB\n    Total Installed Size:   0.21 MiB\n\n    error: no servers configured for repository: core\n    error: no servers configured for repository: community\n    error: failed to commit transaction (no servers configured for repository)\n    Errors occurred, no packages were upgraded.\n\n\u003e **A**: You need simply to update the mirrorlist file according to your location:\n\n    # Uncomment the repository line according to your location\n    #\u003e nano /etc/pacman.d/mirrorlist\n    #\u003e pacman -Syy\n\n## Locate the package for a given file ##\n\n\u003e **Q**: How do I find which package a certain file belongs to?\n\n\u003e **A**: JuNest is a really small distro, therefore you frequently need to find\n\u003e the package name for a certain file. `pkgfile` is an extremely useful package\n\u003e that allows you to detect the package of a given file.\n\u003e For instance, if you want to find the package name for the command `getopt`:\n\n    #\u003e pacman -S pkgfile\n    #\u003e pkgfile --update\n    $\u003e pkgfile getop\n    core/util-linux\n\n\u003e Alternatively, you can use directly `pacman` command only. Take a look [here](https://wiki.archlinux.org/index.php/General_troubleshooting#Message:_%22error_while_loading_shared_libraries%22).\n\n## Kernel too old ##\n\n\u003e **Q**: Why do I get the error: \"FATAL: kernel too old\"?\n\n\u003e **A**: This is because the binaries from the precompiled package are\n\u003e compiled for Linux kernel 2.6.32. When JuNest is started without further\n\u003e options, it tries to run a shell from the JuNest chroot. The system sees that\n\u003e the host OS kernel is too old and refuses to start the shell.\n\n\u003e The solution is to present a higher \"fake\" kernel version to the JuNest\n\u003e chroot. PRoot offers the *-k* option for this, and JuNest passes this option\n\u003e on to PRoot when *-p* is prepended. For example, to fake a kernel version of\n\u003e 3.10, issue the following command:\n\n    $\u003e junest proot -b \"-k 3.10\"\n\n\u003e As Arch Linux ships binaries for kernel version 2.6.32, the above error is\n\u003e not unique to the precompiled package from JuNest. It will also appear when\n\u003e trying to run binaries that were later installed in the JuNest chroot with\n\u003e the `pacman` command.\n\n\u003e In order to check if an executable inside JuNest chroot is compatible with\n\u003e the kernel of the host OS just use the `file` command, for instance:\n\n    $\u003e file ~/.junest/usr/bin/bash\n    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked\n    (uses shared libs), for GNU/Linux 2.6.32,\n    BuildID[sha1]=ec37e49e7188ff4030052783e61b859113e18ca6, stripped\n\n\u003e The output shows the minimum recommended Linux kernel version.\n\n## Kernel doesn't support private futexes ##\n\n\u003e **Q**: Why do I get the warning: \"kompat: this kernel doesn't support private\n\u003e futexes and PRoot can't emulate them.\"?\n\n\u003e **A**: This happens on older host OS kernels when the trick of showing a fake\n\u003e kernel version to the JuNest chroot is applied (see above:\n\u003e [Kernel too old](#kernel-too-old)).\n\n\u003e The consequence of showing a fake kernel version to the JuNest chroot is that\n\u003e in the background, PRoot needs to translate requests from applications in the\n\u003e chroot to the old kernel of the host OS. Some of the newer kernel\n\u003e functionality can be emulated, but private futexes cannot be translated.\n\n\u003e Private Futexes were introduced in Linux kernel 2.6.22. Therefore, the above\n\u003e problem likely appears on old Linux systems, for example RHEL5 systems, which\n\u003e are based on Linux kernel 2.6.18. Many of the core tools like `which`, `man`,\n\u003e or `vim` run without problems while others, especially XOrg-based programs,\n\u003e are more likely to show the warning. These are also more likely to crash\n\u003e unexpectedly.\n\n\u003e Currently, there is no (easy) workaround for this. In order to be fully\n\u003e compatible with kernels below 2.6.22, both the precompiled package from\n\u003e JuNest and all software that is installed later needs to be compiled for this\n\u003e kernel. Most likely this can only be achieved by building the needed software\n\u003e packages from source, which kind of contradicts JuNest's distro-in-a-distro\n\u003e philosophy.\n\n## SUID permissions ##\n\u003e **Q**: Why I do not have permissions for ping?\n\n    $\u003e ping www.google.com\n    ping: icmp open socket: Operation not permitted\n\n\u003e **A**: The ping command uses *suid* permissions that allow to execute the command using\n\u003e root privileges. The fakeroot mode is not able to execute a command set with suid,\n\u003e and you may need to use root privileges. There are other few commands that\n\u003e have *suid* permission, you can list the commands from your JuNest environment\n\u003e with the following command:\n\n    $\u003e find /usr/bin -perm /4000\n\n## No characters are visible on a graphic application ##\n\n\u003e **Q**: Why I do not see any characters in the application I have installed?\n\n\u003e **A**: This is probably because there are no\n\u003e [fonts](https://wiki.archlinux.org/index.php/Font_Configuration) installed in\n\u003e the system.\n\n\u003e To quick fix this, you can just install a fonts package:\n\n    #\u003e pacman -S gnu-free-fonts\n\n## Differences between filesystem and package ownership ##\n\n\u003e **Q**: Why do I get warning when I install a package using root privileges?\n\n    #\u003e pacman -S systat\n    ...\n    warning: directory ownership differs on /usr/\n    filesystem: 1000:100  package: 0:0\n    ...\n\n\u003e **A**: In these cases the package installation went smoothly anyway.\n\u003e This should happen every time you install package with root privileges\n\u003e since JuNest will try to preserve the JuNest environment by assigning ownership\n\u003e of the files to the real user.\n\n## Unprivileged user namespace disable at kernel compile time or kernel too old ##\n\n\u003e **Q**: Why do I get this warning when I run JuNest via Linux namespaces?\n\n    $\u003e junest ns\n    Unprivileged user namespace is disabled at kernel compile time or kernel too old (\u003c3.8). Proceeding anyway...\n\n\u003e **A**: This means that JuNest detected that the host OS either\n\u003e does not have a newer kernel version or the unprivileged user namespace\n\u003e is not enabled at kernel compile time.\n\u003e JuNest does not stop the execution of the program but it attempts to run it\n\u003e anyway. Try to use Proot as backend program in case is not possible to invoke namespaces.\n\n## Unprivileged user namespace disabled\n\n\u003e **Q**: Why do I get this warning when I run JuNest via Linux namespaces?\n\n    $\u003e junest ns\n    Unprivileged user namespace disabled. Root permissions are required to enable it: sudo sysctl kernel.unprivileged_userns_clone=1\n\n\u003e **A**: This means that JuNest detected that the host OS either\n\u003e does not have a newer Linux version or the user namespace is not enabled.\n\u003e JuNest does not stop the execution of the program but it attempts to run it\n\u003e anyway. If you have root permissions try to enable it, otherwise try to use\n\u003e Proot as backend program.\n\nMore documentation\n==================\nThere are additional tutorials in the\n[JuNest wiki page](https://github.com/fsquillace/junest/wiki).\n\nContributing\n============\nContributions are welcome! You could help improving JuNest in the following ways:\n\n- [Reporting Bugs](CONTRIBUTING.md#reporting-bugs)\n- [Suggesting Enhancements](CONTRIBUTING.md#suggesting-enhancements)\n- [Writing Code](CONTRIBUTING.md#your-first-code-contribution)\n\nDonating\n========\nTo sustain the project please consider funding by donations through\nthe [GitHub Sponsors page](https://github.com/sponsors/fsquillace/).\n\nAuthors\n=======\nJuNest was originally created in late 2014 by [Filippo Squillace (feel.sqoox@gmail.com)](https://github.com/fsquillace).\n\nHere is a list of [**really appreciated contributors**](https://github.com/fsquillace/junest/graphs/contributors)!\n\n[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/0)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/0)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/1)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/1)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/2)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/2)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/3)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/3)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/4)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/4)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/5)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/5)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/6)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/6)[![](https://sourcerer.io/fame/fsquillace/fsquillace/junest/images/7)](https://sourcerer.io/fame/fsquillace/fsquillace/junest/links/7)\n","funding_links":["https://github.com/sponsors/fsquillace","https://github.com/fsquillace/junest/blob/master/README.md#donating","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=8LEHQKBCYTACY","https://www.buymeacoffee.com/fsquillace","https://github.com/sponsors/fsquillace/"],"categories":["Shell","By Language","archlinux","Other projects"],"sub_categories":["Shell","Other"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsquillace%2Fjunest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffsquillace%2Fjunest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsquillace%2Fjunest/lists"}