mirror of
https://github.com/Kron4ek/Conty
synced 2024-12-27 09:58:25 +01:00
Init repo
This commit is contained in:
commit
f0a7155c35
6 changed files with 745 additions and 0 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
*.tar filter=lfs diff=lfs merge=lfs -text
|
121
README.md
Normal file
121
README.md
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
## Conty
|
||||||
|
|
||||||
|
This is an easy to use non-root container compressed into squashfs and packed
|
||||||
|
into a single executable that runs (or at least should run) on most Linux distros.
|
||||||
|
|
||||||
|
You can use it to run any applications, including games (Vulkan and OpenGL).
|
||||||
|
Besides, due to bubblewrap, Conty also supports true filesystem sandboxing, so you can even use it to sandbox
|
||||||
|
your applications.
|
||||||
|
|
||||||
|
It uses two technologies:
|
||||||
|
* SuqashFS
|
||||||
|
* Linux namespaces (using bubblewrap)
|
||||||
|
|
||||||
|
## Benefits
|
||||||
|
|
||||||
|
* Single executable - download and run, nothing else it required
|
||||||
|
* Compressed into squashfs, so it takes much less disk space than
|
||||||
|
unpacked containers.
|
||||||
|
* Contains many libraries so it can run almost everything. And you don't
|
||||||
|
need to install anything on your host system. You can even run 32-bit applications
|
||||||
|
on pure 64-bit systems.
|
||||||
|
* Based on Arch Linux, so it contains latest software, including latest
|
||||||
|
videodrivers.
|
||||||
|
* Almost completely seamless experience. All applcation that you run
|
||||||
|
with Conty store their configs in your HOME directory as if you wouldn't
|
||||||
|
use container at all.
|
||||||
|
* Supports filesystem sandboxing
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
The only requirements are bash, fuse2 and tar. And your /tmp directory
|
||||||
|
should allow binaries execution (which it does by default on most distros).
|
||||||
|
|
||||||
|
Also, your Linux kernel must support unprivileged user namespaces. On some
|
||||||
|
Linux distros this feature is disabled by default and can be enabled with sysfs:
|
||||||
|
|
||||||
|
```
|
||||||
|
sysctl kernel.unprivileged_userns_clone=1
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```
|
||||||
|
echo 1 > /proc/sys/kernel/unprivileged_userns_clone
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Either download ready-to-use executable from the releases page or create your
|
||||||
|
own (the instructions are below). Make it executable before run.
|
||||||
|
|
||||||
|
```
|
||||||
|
chmod +x conty.sh
|
||||||
|
./conty.sh command command_arguments
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, if you want to run some application from your HOME directory run:
|
||||||
|
|
||||||
|
```
|
||||||
|
./conty.sh /home/username/App/application_binary
|
||||||
|
```
|
||||||
|
|
||||||
|
Conty also contains Steam, Lutris, Wine-Staging and much more.
|
||||||
|
|
||||||
|
```
|
||||||
|
./conty.sh steam
|
||||||
|
./conty.sh lutris
|
||||||
|
./conty.sh wine app.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
Want to check if your graphics acceleration works? Run glxinfo and glxgears:
|
||||||
|
|
||||||
|
```
|
||||||
|
./conty.sh glxinfo | grep direct
|
||||||
|
./conty.sh glxgears
|
||||||
|
```
|
||||||
|
|
||||||
|
List all built-in binaries with:
|
||||||
|
|
||||||
|
```
|
||||||
|
./conty.sh ls /usr/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sandbox
|
||||||
|
|
||||||
|
Conty uses bubblewrap and thus support filesystem sandboxing. By default
|
||||||
|
it's disabled and all directories on your system are available for the container.
|
||||||
|
|
||||||
|
You can enable sandboxing with the SANDBOX environment variable. You can allow
|
||||||
|
access to directories you want with the WHITELIST_DIRS variable. And it's
|
||||||
|
also possible to disable network with the DISABLE_NET. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
export DISABLE_NET=1
|
||||||
|
export SANDBOX=1
|
||||||
|
export WHITELIST_DIRS="/home/username/.cache /opt /home/username/Downloads"
|
||||||
|
./conty.sh command
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to create your own Conty executable
|
||||||
|
|
||||||
|
If you want to create Arch-based container then use the create-arch-bootstrap.sh script. Root rights
|
||||||
|
are required for this step, because chrooting is used here.
|
||||||
|
|
||||||
|
```
|
||||||
|
./create-arch-bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
You can edit the script, if you want to include different set of packages inside
|
||||||
|
the container.
|
||||||
|
|
||||||
|
If want to use some other distro then you need to manually obtain it from somewhere.
|
||||||
|
|
||||||
|
When distro bootsrap is obtained, use create-conty.sh script to pack
|
||||||
|
everything into a single executable.
|
||||||
|
|
||||||
|
```
|
||||||
|
./create-conty.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Done!
|
412
create-arch-bootstrap.sh
Executable file
412
create-arch-bootstrap.sh
Executable file
|
@ -0,0 +1,412 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Dependencies: wget tar gzip
|
||||||
|
# Root rights are required
|
||||||
|
|
||||||
|
if [ $EUID != 0 ]; then
|
||||||
|
echo "Root rights are required!"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||||
|
|
||||||
|
mount_chroot () {
|
||||||
|
# First unmount just in case
|
||||||
|
umount -Rl "${bootstrap}"
|
||||||
|
|
||||||
|
mount --bind "${bootstrap}" "${bootstrap}"
|
||||||
|
mount --bind /dev "${bootstrap}"/dev
|
||||||
|
mount --bind /dev/shm "${bootstrap}"/dev/shm
|
||||||
|
mount --bind /dev/pts "${bootstrap}"/dev/pts
|
||||||
|
mount --bind /proc "${bootstrap}"/proc
|
||||||
|
mount --bind /sys "${bootstrap}"/sys
|
||||||
|
mount --bind /etc/resolv.conf "${bootstrap}"/etc/resolv.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
unmount_chroot () {
|
||||||
|
umount -Rl "${bootstrap}"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_in_chroot () {
|
||||||
|
chroot "${bootstrap}" /usr/bin/env LANG=en_US.UTF-8 TERM=xterm PATH="/bin:/sbin:/usr/bin:/usr/sbin" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_localegen () {
|
||||||
|
cat <<EOF > locale.gen
|
||||||
|
aa_DJ.UTF-8 UTF-8
|
||||||
|
aa_ER UTF-8
|
||||||
|
aa_ER@saaho UTF-8
|
||||||
|
aa_ET UTF-8
|
||||||
|
af_ZA.UTF-8 UTF-8
|
||||||
|
agr_PE UTF-8
|
||||||
|
ak_GH UTF-8
|
||||||
|
am_ET UTF-8
|
||||||
|
an_ES.UTF-8 UTF-8
|
||||||
|
anp_IN UTF-8
|
||||||
|
ar_AE.UTF-8 UTF-8
|
||||||
|
ar_BH.UTF-8 UTF-8
|
||||||
|
ar_DZ.UTF-8 UTF-8
|
||||||
|
ar_EG.UTF-8 UTF-8
|
||||||
|
ar_IN UTF-8
|
||||||
|
ar_IQ.UTF-8 UTF-8
|
||||||
|
ar_JO.UTF-8 UTF-8
|
||||||
|
ar_KW.UTF-8 UTF-8
|
||||||
|
ar_LB.UTF-8 UTF-8
|
||||||
|
ar_LY.UTF-8 UTF-8
|
||||||
|
ar_MA.UTF-8 UTF-8
|
||||||
|
ar_OM.UTF-8 UTF-8
|
||||||
|
ar_QA.UTF-8 UTF-8
|
||||||
|
ar_SA.UTF-8 UTF-8
|
||||||
|
ar_SD.UTF-8 UTF-8
|
||||||
|
ar_SS UTF-8
|
||||||
|
ar_SY.UTF-8 UTF-8
|
||||||
|
ar_TN.UTF-8 UTF-8
|
||||||
|
ar_YE.UTF-8 UTF-8
|
||||||
|
ayc_PE UTF-8
|
||||||
|
az_AZ UTF-8
|
||||||
|
az_IR UTF-8
|
||||||
|
as_IN UTF-8
|
||||||
|
ast_ES.UTF-8 UTF-8
|
||||||
|
be_BY.UTF-8 UTF-8
|
||||||
|
be_BY@latin UTF-8
|
||||||
|
bem_ZM UTF-8
|
||||||
|
ber_DZ UTF-8
|
||||||
|
ber_MA UTF-8
|
||||||
|
bg_BG.UTF-8 UTF-8
|
||||||
|
bhb_IN.UTF-8 UTF-8
|
||||||
|
bho_IN UTF-8
|
||||||
|
bho_NP UTF-8
|
||||||
|
bi_VU UTF-8
|
||||||
|
bn_BD UTF-8
|
||||||
|
bn_IN UTF-8
|
||||||
|
bo_CN UTF-8
|
||||||
|
bo_IN UTF-8
|
||||||
|
br_FR.UTF-8 UTF-8
|
||||||
|
brx_IN UTF-8
|
||||||
|
bs_BA.UTF-8 UTF-8
|
||||||
|
byn_ER UTF-8
|
||||||
|
ca_AD.UTF-8 UTF-8
|
||||||
|
ca_ES.UTF-8 UTF-8
|
||||||
|
ca_ES@valencia UTF-8
|
||||||
|
ca_FR.UTF-8 UTF-8
|
||||||
|
ca_IT.UTF-8 UTF-8
|
||||||
|
ce_RU UTF-8
|
||||||
|
chr_US UTF-8
|
||||||
|
ckb_IQ UTF-8
|
||||||
|
crh_UA UTF-8
|
||||||
|
cs_CZ.UTF-8 UTF-8
|
||||||
|
csb_PL UTF-8
|
||||||
|
cv_RU UTF-8
|
||||||
|
cy_GB.UTF-8 UTF-8
|
||||||
|
da_DK.UTF-8 UTF-8
|
||||||
|
de_AT.UTF-8 UTF-8
|
||||||
|
de_BE.UTF-8 UTF-8
|
||||||
|
de_CH.UTF-8 UTF-8
|
||||||
|
de_DE.UTF-8 UTF-8
|
||||||
|
de_IT.UTF-8 UTF-8
|
||||||
|
de_LI.UTF-8 UTF-8
|
||||||
|
de_LU.UTF-8 UTF-8
|
||||||
|
doi_IN UTF-8
|
||||||
|
dsb_DE UTF-8
|
||||||
|
dv_MV UTF-8
|
||||||
|
dz_BT UTF-8
|
||||||
|
el_GR.UTF-8 UTF-8
|
||||||
|
el_CY.UTF-8 UTF-8
|
||||||
|
en_AG UTF-8
|
||||||
|
en_AU.UTF-8 UTF-8
|
||||||
|
en_BW.UTF-8 UTF-8
|
||||||
|
en_CA.UTF-8 UTF-8
|
||||||
|
en_DK.UTF-8 UTF-8
|
||||||
|
en_GB.UTF-8 UTF-8
|
||||||
|
en_HK.UTF-8 UTF-8
|
||||||
|
en_IE.UTF-8 UTF-8
|
||||||
|
en_IL UTF-8
|
||||||
|
en_IN UTF-8
|
||||||
|
en_NG UTF-8
|
||||||
|
en_NZ.UTF-8 UTF-8
|
||||||
|
en_PH.UTF-8 UTF-8
|
||||||
|
en_SC.UTF-8 UTF-8
|
||||||
|
en_SG.UTF-8 UTF-8
|
||||||
|
en_US.UTF-8 UTF-8
|
||||||
|
en_ZA.UTF-8 UTF-8
|
||||||
|
en_ZM UTF-8
|
||||||
|
en_ZW.UTF-8 UTF-8
|
||||||
|
eo UTF-8
|
||||||
|
es_AR.UTF-8 UTF-8
|
||||||
|
es_BO.UTF-8 UTF-8
|
||||||
|
es_CL.UTF-8 UTF-8
|
||||||
|
es_CO.UTF-8 UTF-8
|
||||||
|
es_CR.UTF-8 UTF-8
|
||||||
|
es_CU UTF-8
|
||||||
|
es_DO.UTF-8 UTF-8
|
||||||
|
es_EC.UTF-8 UTF-8
|
||||||
|
es_ES.UTF-8 UTF-8
|
||||||
|
es_GT.UTF-8 UTF-8
|
||||||
|
es_HN.UTF-8 UTF-8
|
||||||
|
es_MX.UTF-8 UTF-8
|
||||||
|
es_NI.UTF-8 UTF-8
|
||||||
|
es_PA.UTF-8 UTF-8
|
||||||
|
es_PE.UTF-8 UTF-8
|
||||||
|
es_PR.UTF-8 UTF-8
|
||||||
|
es_PY.UTF-8 UTF-8
|
||||||
|
es_SV.UTF-8 UTF-8
|
||||||
|
es_US.UTF-8 UTF-8
|
||||||
|
es_UY.UTF-8 UTF-8
|
||||||
|
es_VE.UTF-8 UTF-8
|
||||||
|
et_EE.UTF-8 UTF-8
|
||||||
|
eu_ES.UTF-8 UTF-8
|
||||||
|
fa_IR UTF-8
|
||||||
|
ff_SN UTF-8
|
||||||
|
fi_FI.UTF-8 UTF-8
|
||||||
|
fil_PH UTF-8
|
||||||
|
fo_FO.UTF-8 UTF-8
|
||||||
|
fr_BE.UTF-8 UTF-8
|
||||||
|
fr_CA.UTF-8 UTF-8
|
||||||
|
fr_CH.UTF-8 UTF-8
|
||||||
|
fr_FR.UTF-8 UTF-8
|
||||||
|
fr_LU.UTF-8 UTF-8
|
||||||
|
fur_IT UTF-8
|
||||||
|
fy_NL UTF-8
|
||||||
|
fy_DE UTF-8
|
||||||
|
ga_IE.UTF-8 UTF-8
|
||||||
|
gd_GB.UTF-8 UTF-8
|
||||||
|
gez_ER UTF-8
|
||||||
|
gez_ER@abegede UTF-8
|
||||||
|
gez_ET UTF-8
|
||||||
|
gez_ET@abegede UTF-8
|
||||||
|
gl_ES.UTF-8 UTF-8
|
||||||
|
gu_IN UTF-8
|
||||||
|
gv_GB.UTF-8 UTF-8
|
||||||
|
ha_NG UTF-8
|
||||||
|
hak_TW UTF-8
|
||||||
|
he_IL.UTF-8 UTF-8
|
||||||
|
hi_IN UTF-8
|
||||||
|
hif_FJ UTF-8
|
||||||
|
hne_IN UTF-8
|
||||||
|
hr_HR.UTF-8 UTF-8
|
||||||
|
hsb_DE.UTF-8 UTF-8
|
||||||
|
ht_HT UTF-8
|
||||||
|
hu_HU.UTF-8 UTF-8
|
||||||
|
hy_AM UTF-8
|
||||||
|
ia_FR UTF-8
|
||||||
|
id_ID.UTF-8 UTF-8
|
||||||
|
ig_NG UTF-8
|
||||||
|
ik_CA UTF-8
|
||||||
|
is_IS.UTF-8 UTF-8
|
||||||
|
it_CH.UTF-8 UTF-8
|
||||||
|
it_IT.UTF-8 UTF-8
|
||||||
|
iu_CA UTF-8
|
||||||
|
ja_JP.UTF-8 UTF-8
|
||||||
|
ka_GE.UTF-8 UTF-8
|
||||||
|
kab_DZ UTF-8
|
||||||
|
kk_KZ.UTF-8 UTF-8
|
||||||
|
kl_GL.UTF-8 UTF-8
|
||||||
|
km_KH UTF-8
|
||||||
|
kn_IN UTF-8
|
||||||
|
ko_KR.UTF-8 UTF-8
|
||||||
|
kok_IN UTF-8
|
||||||
|
ks_IN UTF-8
|
||||||
|
ks_IN@devanagari UTF-8
|
||||||
|
ku_TR.UTF-8 UTF-8
|
||||||
|
kw_GB.UTF-8 UTF-8
|
||||||
|
ky_KG UTF-8
|
||||||
|
lb_LU UTF-8
|
||||||
|
lg_UG.UTF-8 UTF-8
|
||||||
|
li_BE UTF-8
|
||||||
|
li_NL UTF-8
|
||||||
|
lij_IT UTF-8
|
||||||
|
ln_CD UTF-8
|
||||||
|
lo_LA UTF-8
|
||||||
|
lt_LT.UTF-8 UTF-8
|
||||||
|
lv_LV.UTF-8 UTF-8
|
||||||
|
lzh_TW UTF-8
|
||||||
|
mag_IN UTF-8
|
||||||
|
mai_IN UTF-8
|
||||||
|
mai_NP UTF-8
|
||||||
|
mfe_MU UTF-8
|
||||||
|
mg_MG.UTF-8 UTF-8
|
||||||
|
mhr_RU UTF-8
|
||||||
|
mi_NZ.UTF-8 UTF-8
|
||||||
|
miq_NI UTF-8
|
||||||
|
mjw_IN UTF-8
|
||||||
|
mk_MK.UTF-8 UTF-8
|
||||||
|
ml_IN UTF-8
|
||||||
|
mn_MN UTF-8
|
||||||
|
mni_IN UTF-8
|
||||||
|
mnw_MM UTF-8
|
||||||
|
mr_IN UTF-8
|
||||||
|
ms_MY.UTF-8 UTF-8
|
||||||
|
mt_MT.UTF-8 UTF-8
|
||||||
|
my_MM UTF-8
|
||||||
|
nan_TW UTF-8
|
||||||
|
nan_TW@latin UTF-8
|
||||||
|
nb_NO.UTF-8 UTF-8
|
||||||
|
nds_DE UTF-8
|
||||||
|
nds_NL UTF-8
|
||||||
|
ne_NP UTF-8
|
||||||
|
nhn_MX UTF-8
|
||||||
|
niu_NU UTF-8
|
||||||
|
niu_NZ UTF-8
|
||||||
|
nl_AW UTF-8
|
||||||
|
nl_BE.UTF-8 UTF-8
|
||||||
|
nl_NL.UTF-8 UTF-8
|
||||||
|
nn_NO.UTF-8 UTF-8
|
||||||
|
nr_ZA UTF-8
|
||||||
|
nso_ZA UTF-8
|
||||||
|
oc_FR.UTF-8 UTF-8
|
||||||
|
om_ET UTF-8
|
||||||
|
om_KE.UTF-8 UTF-8
|
||||||
|
or_IN UTF-8
|
||||||
|
os_RU UTF-8
|
||||||
|
pa_IN UTF-8
|
||||||
|
pa_PK UTF-8
|
||||||
|
pap_AW UTF-8
|
||||||
|
pap_CW UTF-8
|
||||||
|
pl_PL.UTF-8 UTF-8
|
||||||
|
ps_AF UTF-8
|
||||||
|
pt_BR.UTF-8 UTF-8
|
||||||
|
pt_PT.UTF-8 UTF-8
|
||||||
|
quz_PE UTF-8
|
||||||
|
raj_IN UTF-8
|
||||||
|
ro_RO.UTF-8 UTF-8
|
||||||
|
ru_RU.UTF-8 UTF-8
|
||||||
|
ru_UA.UTF-8 UTF-8
|
||||||
|
rw_RW UTF-8
|
||||||
|
sa_IN UTF-8
|
||||||
|
sah_RU UTF-8
|
||||||
|
sat_IN UTF-8
|
||||||
|
sc_IT UTF-8
|
||||||
|
sd_IN UTF-8
|
||||||
|
sd_IN@devanagari UTF-8
|
||||||
|
se_NO UTF-8
|
||||||
|
sgs_LT UTF-8
|
||||||
|
shn_MM UTF-8
|
||||||
|
shs_CA UTF-8
|
||||||
|
si_LK UTF-8
|
||||||
|
sid_ET UTF-8
|
||||||
|
sk_SK.UTF-8 UTF-8
|
||||||
|
sl_SI.UTF-8 UTF-8
|
||||||
|
sm_WS UTF-8
|
||||||
|
so_DJ.UTF-8 UTF-8
|
||||||
|
so_ET UTF-8
|
||||||
|
so_KE.UTF-8 UTF-8
|
||||||
|
so_SO.UTF-8 UTF-8
|
||||||
|
sq_AL.UTF-8 UTF-8
|
||||||
|
sq_MK UTF-8
|
||||||
|
sr_ME UTF-8
|
||||||
|
sr_RS UTF-8
|
||||||
|
sr_RS@latin UTF-8
|
||||||
|
ss_ZA UTF-8
|
||||||
|
st_ZA.UTF-8 UTF-8
|
||||||
|
sv_FI.UTF-8 UTF-8
|
||||||
|
sv_SE.UTF-8 UTF-8
|
||||||
|
sw_KE UTF-8
|
||||||
|
sw_TZ UTF-8
|
||||||
|
szl_PL UTF-8
|
||||||
|
ta_IN UTF-8
|
||||||
|
ta_LK UTF-8
|
||||||
|
tcy_IN.UTF-8 UTF-8
|
||||||
|
te_IN UTF-8
|
||||||
|
tg_TJ.UTF-8 UTF-8
|
||||||
|
th_TH.UTF-8 UTF-8
|
||||||
|
the_NP UTF-8
|
||||||
|
ti_ER UTF-8
|
||||||
|
ti_ET UTF-8
|
||||||
|
tig_ER UTF-8
|
||||||
|
tk_TM UTF-8
|
||||||
|
tl_PH.UTF-8 UTF-8
|
||||||
|
tn_ZA UTF-8
|
||||||
|
to_TO UTF-8
|
||||||
|
tpi_PG UTF-8
|
||||||
|
tr_CY.UTF-8 UTF-8
|
||||||
|
tr_TR.UTF-8 UTF-8
|
||||||
|
ts_ZA UTF-8
|
||||||
|
tt_RU UTF-8
|
||||||
|
tt_RU@iqtelif UTF-8
|
||||||
|
ug_CN UTF-8
|
||||||
|
uk_UA.UTF-8 UTF-8
|
||||||
|
unm_US UTF-8
|
||||||
|
ur_IN UTF-8
|
||||||
|
ur_PK UTF-8
|
||||||
|
uz_UZ.UTF-8 UTF-8
|
||||||
|
uz_UZ@cyrillic UTF-8
|
||||||
|
ve_ZA UTF-8
|
||||||
|
vi_VN UTF-8
|
||||||
|
wa_BE.UTF-8 UTF-8
|
||||||
|
wae_CH UTF-8
|
||||||
|
wal_ET UTF-8
|
||||||
|
wo_SN UTF-8
|
||||||
|
xh_ZA.UTF-8 UTF-8
|
||||||
|
yi_US.UTF-8 UTF-8
|
||||||
|
yo_NG UTF-8
|
||||||
|
yue_HK UTF-8
|
||||||
|
yuw_PG UTF-8
|
||||||
|
zh_CN.UTF-8 UTF-8
|
||||||
|
zh_HK.UTF-8 UTF-8
|
||||||
|
zh_SG.UTF-8 UTF-8
|
||||||
|
zh_TW.UTF-8 UTF-8
|
||||||
|
zu_ZA.UTF-8 UTF-8
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_mirrorlist () {
|
||||||
|
cat <<EOF > mirrorlist
|
||||||
|
Server = https://ftp.halifax.rwth-aachen.de/archlinux/\$repo/os/\$arch
|
||||||
|
Server = https://mirror.pseudoform.org/\$repo/os/\$arch
|
||||||
|
Server = https://archlinux.thaller.ws/\$repo/os/\$arch
|
||||||
|
Server = https://mirror.chaoticum.net/arch/\$repo/os/\$arch
|
||||||
|
Server = https://mirror.f4st.host/archlinux/\$repo/os/\$arch
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
cd "${script_dir}" || exit 1
|
||||||
|
|
||||||
|
bootstrap="${script_dir}"/root.x86_64
|
||||||
|
|
||||||
|
packagelist="base nano mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon \
|
||||||
|
vulkan-icd-loader lib32-vulkan-icd-loader nvidia-utils \
|
||||||
|
lib32-nvidia-utils lib32-alsa-plugins wine-staging mesa-demos \
|
||||||
|
vulkan-tools gst-plugins-good gst-plugins-bad gst-plugins-ugly \
|
||||||
|
lib32-gst-plugins-good ttf-dejavu ttf-liberation lib32-openal \
|
||||||
|
lib32-vkd3d vkd3d lib32-libva vulkan-intel lib32-vulkan-intel \
|
||||||
|
winetricks lutris steam"
|
||||||
|
|
||||||
|
wget -q "https://archlinux.org/download/"
|
||||||
|
current_release="$(cat index.html | grep "Current Release" | tail -c -16 | head -c +10)"
|
||||||
|
rm index.html
|
||||||
|
|
||||||
|
echo "Downloading ${current_release} release"
|
||||||
|
wget -q --show-progress -O arch.tar.gz https://mirror.rackspace.com/archlinux/iso/${current_release}/archlinux-bootstrap-${current_release}-x86_64.tar.gz
|
||||||
|
tar xf arch.tar.gz
|
||||||
|
rm arch.tar.gz
|
||||||
|
|
||||||
|
mount_chroot
|
||||||
|
|
||||||
|
generate_localegen
|
||||||
|
generate_mirrorlist
|
||||||
|
|
||||||
|
rm "${bootstrap}"/etc/locale.gen
|
||||||
|
cp locale.gen "${bootstrap}"/etc/locale.gen
|
||||||
|
rm locale.gen
|
||||||
|
|
||||||
|
rm "${bootstrap}"/etc/pacman.d/mirrorlist
|
||||||
|
cp mirrorlist "${bootstrap}"/etc/pacman.d/mirrorlist
|
||||||
|
rm mirrorlist
|
||||||
|
|
||||||
|
echo "[multilib]" >> "${bootstrap}"/etc/pacman.conf
|
||||||
|
echo "Include = /etc/pacman.d/mirrorlist" >> "${bootstrap}"/etc/pacman.conf
|
||||||
|
|
||||||
|
run_in_chroot pacman-key --init
|
||||||
|
run_in_chroot pacman-key --populate archlinux
|
||||||
|
run_in_chroot pacman -Syu --noconfirm
|
||||||
|
run_in_chroot pacman --noconfirm -S ${packagelist}
|
||||||
|
run_in_chroot pacman --noconfirm -Scc
|
||||||
|
run_in_chroot locale-gen
|
||||||
|
|
||||||
|
rm "${bootstrap}"/var/cache/pacman/pkg/*
|
||||||
|
|
||||||
|
unmount_chroot
|
||||||
|
|
||||||
|
clear
|
||||||
|
echo "Done"
|
49
create-conty.sh
Executable file
49
create-conty.sh
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Dependencies: squashfs-tools zstd lz4
|
||||||
|
|
||||||
|
script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||||
|
|
||||||
|
# Builtin suqashfuse supports only lz4 and zstd
|
||||||
|
# So choose either lz4 or zstd
|
||||||
|
squashfs_compressor="zstd"
|
||||||
|
compressor_arguments="-Xcompression-level 19"
|
||||||
|
|
||||||
|
bootstrap="${script_dir}"/root.x86_64
|
||||||
|
|
||||||
|
cd "${script_dir}" || exit 1
|
||||||
|
|
||||||
|
if [ ! -f utils.tar ]; then
|
||||||
|
echo "utils.tar is required!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f squashfs-start.sh ]; then
|
||||||
|
echo "squashfs-start.sh is required!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v mksquashfs 1>/dev/null; then
|
||||||
|
echo "Please install squashfs-tools and run the script again"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${bootstrap}" ]; then
|
||||||
|
echo "Bootstrap is required!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Creating conty..."
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Create the squashfs image
|
||||||
|
rm -f bootstrap.squashfs
|
||||||
|
mksquashfs "${bootstrap}" bootstrap.squashfs -comp $squashfs_compressor $compressor_arguments
|
||||||
|
|
||||||
|
# Combine the files into a single executable using cat
|
||||||
|
cat squashfs-start.sh utils.tar bootstrap.squashfs > conty.sh
|
||||||
|
chmod +x conty.sh
|
||||||
|
|
||||||
|
clear
|
||||||
|
echo "Conty created and ready to use!"
|
159
squashfs-start.sh
Executable file
159
squashfs-start.sh
Executable file
|
@ -0,0 +1,159 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Dependencies: fuse2 tar
|
||||||
|
|
||||||
|
# Prevent launching as root
|
||||||
|
if [ -z $ALLOW_ROOT ]; then
|
||||||
|
if [ $EUID = 0 ]; then
|
||||||
|
echo "Do not run this app as root!"
|
||||||
|
echo
|
||||||
|
echo "If you really need to run it as root, set ALLOW_ROOT env variable."
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Full path to the script
|
||||||
|
script="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
|
# Working directory where squashfs image will be mounted
|
||||||
|
# Default path: /tmp/scriptname_username_randomnumber
|
||||||
|
working_dir=/tmp/"$(basename "$0")"_"$(id -un)"_$RANDOM
|
||||||
|
|
||||||
|
# It's important to set correct sizes below, otherwise there will be
|
||||||
|
# a problem with mounting the squashfs image due to an incorrectly calculated offset.
|
||||||
|
|
||||||
|
# The size of this script
|
||||||
|
scriptsize=4178
|
||||||
|
|
||||||
|
# The size of the utils.tar archive
|
||||||
|
# utils.tar contains bwrap and squashfuse binaries
|
||||||
|
utilssize=1259520
|
||||||
|
|
||||||
|
# Offset where the squashfs image is stored
|
||||||
|
offset=$((scriptsize+utilssize))
|
||||||
|
|
||||||
|
if [ "$1" = "--help" ] || [ "$1" = "-h" ] || [ -z "$1" ]; then
|
||||||
|
echo "Usage: ./conty.sh command command_arguments"
|
||||||
|
echo
|
||||||
|
echo "Arguments:"
|
||||||
|
echo
|
||||||
|
echo -e "-e \tExtract app files"
|
||||||
|
echo -e "-o \tShow squashfs offset"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Environment variables:"
|
||||||
|
echo
|
||||||
|
echo -e "DISABLE_NET \tDisables network access"
|
||||||
|
echo -e "SANDBOX \tEnables filesystem sandbox"
|
||||||
|
echo -e "WHITELIST_DIRS \tWorks together with SANDBOX variable"
|
||||||
|
echo -e "\t\tAllows access to directories specified (separated by space)"
|
||||||
|
echo -e "\t\tin this variable. All specified directories must exist."
|
||||||
|
echo -e "\t\tFor example, WHITELIST_DIRS=\"/home/username/.config /opt/bin\""
|
||||||
|
echo
|
||||||
|
echo "If you enable SANDBOX but don't set WHITELIST_DIRS, then"
|
||||||
|
echo "no directories will be available at all. And a fake temporary HOME"
|
||||||
|
echo "directory will be created inside the container."
|
||||||
|
|
||||||
|
exit
|
||||||
|
elif [ "$1" = "-e" ]; then
|
||||||
|
if command -v unsquashfs 1>/dev/null; then
|
||||||
|
unsquashfs -o $offset -d "$(basename "$0")"_files "${script}"
|
||||||
|
else
|
||||||
|
echo "To extract the image install squashfs-tools."
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
||||||
|
elif [ "$1" = "-o" ]; then
|
||||||
|
echo $offset
|
||||||
|
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if FUSE2 is installed
|
||||||
|
if command -v fusermount 1>/dev/null; then
|
||||||
|
fmount=fusermount
|
||||||
|
else
|
||||||
|
echo "Please install fuse2 and run the app again"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract utils.tar
|
||||||
|
mkdir -p "${working_dir}"
|
||||||
|
tail -c +$((scriptsize+1)) "${script}" | head -c $utilssize > "${working_dir}"/utils.tar
|
||||||
|
tar -C "${working_dir}" -xf "${working_dir}"/utils.tar
|
||||||
|
rm "${working_dir}"/utils.tar
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${working_dir}/utils"
|
||||||
|
sfuse="${working_dir}"/utils/squashfuse
|
||||||
|
bwrap="${working_dir}"/utils/bwrap
|
||||||
|
|
||||||
|
chmod +x "${sfuse}"
|
||||||
|
chmod +x "${bwrap}"
|
||||||
|
|
||||||
|
run_bwrap () {
|
||||||
|
unshare="--unshare-user --unshare-pid --unshare-uts --unshare-cgroup"
|
||||||
|
|
||||||
|
if [ -n "$DISABLE_NET" ]; then
|
||||||
|
echo "Network is disabled"
|
||||||
|
|
||||||
|
net="--unshare-net"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$SANDBOX" ]; then
|
||||||
|
echo "Filesystem sandbox is enabled"
|
||||||
|
|
||||||
|
dirs="--tmpfs /home --tmpfs /opt --tmpfs /mnt --dir ${HOME}"
|
||||||
|
|
||||||
|
if [ -n "$WHITELIST_DIRS" ]; then
|
||||||
|
echo "Allowed directories: ${WHITELIST_DIRS}"
|
||||||
|
|
||||||
|
for i in ${WHITELIST_DIRS}; do
|
||||||
|
whitelist="${whitelist} --bind ${i} ${i}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
dirs="${dirs} ${whitelist}"
|
||||||
|
else
|
||||||
|
dirs="--bind /home /home --bind-try /mnt /mnt --bind-try /opt /opt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
"${bwrap}" --ro-bind "${working_dir}"/mnt / \
|
||||||
|
--dev-bind /dev /dev \
|
||||||
|
--ro-bind /sys /sys \
|
||||||
|
--bind /run /run \
|
||||||
|
--bind /var /var \
|
||||||
|
--bind /tmp /tmp \
|
||||||
|
--ro-bind-try /etc/resolv.conf /etc/resolv.conf \
|
||||||
|
--ro-bind-try /etc/hosts /etc/hosts \
|
||||||
|
--ro-bind-try /etc/nsswitch.conf /etc/nsswitch.conf \
|
||||||
|
--proc /proc \
|
||||||
|
--ro-bind-try /usr/local /usr/local \
|
||||||
|
${dirs} ${unshare} ${net} \
|
||||||
|
--hostname Conty \
|
||||||
|
--setenv PATH "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" \
|
||||||
|
"$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Mount boostrap image
|
||||||
|
mkdir -p "${working_dir}"/mnt
|
||||||
|
"${fmount}" -u "${working_dir}"/mnt 2>/dev/null || umount "${working_dir}"/mnt 2>/dev/null
|
||||||
|
|
||||||
|
"${sfuse}" -o offset="${offset}" "${script}" "${working_dir}"/mnt
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
echo "Running Conty"
|
||||||
|
run_bwrap "$@"
|
||||||
|
|
||||||
|
"${fmount}" -uz "${working_dir}"/mnt 2>/dev/null || umount --lazy "${working_dir}"/mnt 2>/dev/null
|
||||||
|
else
|
||||||
|
echo "Mounting the squashfs image failed!"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "${working_dir}"
|
||||||
|
|
||||||
|
exit
|
3
utils.tar
Normal file
3
utils.tar
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d1c0d735e42d154850d5d9044a662d16b83f62219e86336d87a0df4c09cc7cd2
|
||||||
|
size 1259520
|
Loading…
Reference in a new issue