{"id":13961581,"url":"https://github.com/sabotage-linux/sabotage","last_synced_at":"2025-12-17T00:20:11.323Z","repository":{"id":1884448,"uuid":"2073231","full_name":"sabotage-linux/sabotage","owner":"sabotage-linux","description":"a radical and experimental distribution based on musl libc and busybox","archived":false,"fork":true,"pushed_at":"2025-06-13T13:38:36.000Z","size":11701,"stargazers_count":554,"open_issues_count":50,"forks_count":69,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-06-13T14:46:29.370Z","etag":null,"topics":["busybox","desktop","distro","efficient","embedded","fast","hardcore","lightweight","linux","musl","no-bullshit","no-dbus","no-systemd","radical","server"],"latest_commit_sha":null,"homepage":"http://sabo.xyz","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"pikhq/sabotage","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sabotage-linux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2011-07-19T16:59:46.000Z","updated_at":"2025-06-13T13:38:42.000Z","dependencies_parsed_at":"2023-07-12T04:46:29.195Z","dependency_job_id":null,"html_url":"https://github.com/sabotage-linux/sabotage","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/sabotage-linux/sabotage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabotage-linux%2Fsabotage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabotage-linux%2Fsabotage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabotage-linux%2Fsabotage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabotage-linux%2Fsabotage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sabotage-linux","download_url":"https://codeload.github.com/sabotage-linux/sabotage/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sabotage-linux%2Fsabotage/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266253514,"owners_count":23900051,"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":["busybox","desktop","distro","efficient","embedded","fast","hardcore","lightweight","linux","musl","no-bullshit","no-dbus","no-systemd","radical","server"],"created_at":"2024-08-08T17:01:16.842Z","updated_at":"2025-12-17T00:20:11.216Z","avatar_url":"https://github.com/sabotage-linux.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"# Sabotage Linux\n\nThis is Sabotage, an experimental distribution based on musl libc and busybox.\n\nCurrently Sabotage supports i386, x86_64, MIPS, PowerPC32 and ARM(v4t+).\nARM hardfloat (hf) is supported via crosscompilation of stage1,\nsince it requires a recent GCC which we can't easily bootstrap in stage0 due\nto library dependencies of GCC introduced with 4.3.\n\nThe preferred way to build Sabotage is using a native Linux environment for\nthe desired architecture.\nIt is now also possible to cross-compile large parts of it.\nAs cross-compiling is hairy and support for it is quite new, expect breakage.\nNative builds are well tested and considered stable.\n\n\n## Requirements:\n\n* ~4G free disk space.\n* A Linux 3.8+ host kernel with USER_NS support, for entering native chroots\n  without root.\n* A Linux 2.6+ host kernel can be used, but requires root access.\n* A `gcc` 4.x tool chain.\n* `git`, to check out the repository.\n* `bzip2`, `sed`, `patch`, `tar`, `wc`, `wget` and `xz` are needed to run the\n  build script.\n* Lots of time and a fair bit of Linux knowledge.\n\nThis system has built *natively* on Debian 6 \u0026 7, Fedora 18 \u0026 21, Ubuntu 14.04,\nUbuntu 16.04, openSUSE 13.2, Alpine 3.1.2 and Void Linux.\n\n## Obtaining Sabotage\n\nYou can bootstrap your own build from the scripts at:\n\nhttps://github.com/sabotage-linux/sabotage\n\nDownload ready-to-boot QEMU/VirtualBox disk images that you may also extract\nthe rootfs from:\n\n* DE : http://ftp.barfooze.de/pub/sabotage/\n* GR : http://foss.aueb.gr/mirrors/linux/sabotage/\n* FR : http://mirrors.2f30.org/sabotage/\n\nThe DE mirror is the master from which the other mirrors are periodically\nsynced.\n\nSHA512 checksums for releases get posted on the mailing lists, archived here:\n\nhttp://openwall.com/lists/sabotage/\n\n**READ THE COOKBOOK FIRST BEFORE POSTING**.\n\n\n## Native Build Instructions:\n\n**DO NOT RUN SCRIPTS YOU HAVE NOT READ**.\n\n\t$ cp KEEP/config.stage0 config\n\t$ vi config\n\nSet the `SABOTAGE_BUILDDIR`, `A`, and `MAKE_THREADS` variables.\nYou may usually ignore the other values.\nBoth the config file and the COOKBOOK cover the meaning of these variables.\n\nNOTE: It is possible to build an i386 Sabotage from within an existing 32-bit\nchroot on a 64-bit system.\nThe `enter-chroot` script automatically handles this scenario.\n\n\t$ ./build-stage0        # ~2min on 3GHz 8core, 75min on ARM A8 800Mhz\n\t$ ./enter-chroot\n\nOnce inside the chroot:\n\n\t$ butch install stage1\t# Installs core system + build chain\n\nATTENTION: if you're using void or arch linux, building gcc630 in stage1 might\nfail due to a buggy ld. there's a workaround though:\nhttps://github.com/sabotage-linux/sabotage/issues/505\n\nAt this point, stage1 is complete and your Sabotage chroot is set up. There are\ntwo optional steps to consider at this time:\n\n\t$ /src/utils/clean-stage1.sh     # remove unneeded bootstrap packages\n\t$ /src/utils/rebuild-stage1.sh   # rebuild core packages with the stage1 gcc\n\nRebuilding stage1 will not only optimize the packages built with the older\nbootstrap compiler, but will also ensure that your builds are reproducible\nand will match the results of others.\n\nYou may also install optional packages:\n\n\t$ butch install core    # base developer system\n\t$ butch install xorg    # install everything needed for X11\n\t$ butch install world   # almost everything\n\nYou may list available packages by using `ls /src/pkg`.\n\nIf you wish to build the default kernel:\n\n\t$ butch install kernel\n\nRun `butch` and look at the usage information for further options.\n\n`butch` uses build templates that allow for a high level of customization.\n`KEEP/butch_build_template.txt` is the base template used by Sabotage.\nIt provides a tuned `config.cache` for faster configure runs.\nIt also installs packages into `/opt`, creates file lists, etc.\n\nAn alternative bootstrap path is also available (for x86_64 and i386)\nwhich minimises the influence of the host system on the stage0 build.\nIt builds a small chroot containing [bootsh](https://github.com/davidar/bootsh)\nand the sabotage sources, which can then bootstrap itself into the stage0\nbuild in an isolated environment.\nThis effectively reduces the binary seed provided by the host system from\naround 50MB to under 1MB. The procedure differs slightly from above:\n\n\t$ ./create-minimal-rootfs   # ~10s on 3GHz 16-core\n\t$ ./enter-chroot boot.sh\n\nOnce inside the chroot:\n\n\t$ /src/utils/boot-stage0.sh\n\t$ butch install stage1\n\n## After Compiling\n\nWhen finished compiling, exit the chroot and either:\n\n* Run `utils/root-perms.sh /path/to/rootfs` to fix permissions\n* Use the rootfs directly, by copying it to some disk.\n* Use `utils/run-emulator.sh` to boot the system in QEMU.\n  Running in QEMU has poor HDD performance, as the FS is mounted via 9P protocol.\n  It's not recommended for building packages, but it's practical for testing.\n* Use `utils/write-hd-image.sh` to create an image file.\n  The image file boots in QEMU.\n  To convert it into VirtualBox format use `VBoxManage convertfromraw`.\n\n\n## RUNNING SABOTAGE FOR THE FIRST TIME\n\nThe default root password is \"sabotage\".\n\nStart the sshd service using `sv u sshd`, which will create keys on first use.\nTo make the service autostart on boot, remove `/etc/service/sshd/down`.\n\nEdit `/etc/rc.local` for other things to autostart, such as network\nconfiguration, DHCP, console keymapping...\n\nIf you have X installed, edit the example `/bin/X` for the correct evdev\nsettings, then run `startx`.\nCheck `/etc/xinitrc` for X11 keyboard configuration.\n\n## Cross-Compile Requirements:\n\n* [musl-cross][0] or [musl-cross-make][1] for your target arch.\n* `butch` installed for the build host in $PATH\n   (since it lives in KEEP/bin, adding that to $PATH will also do).\n* `pkgconf` symlinked as pkg-config in $PATH, before other pkg-config versions.\n  a standard `pkg-config` installed on the host may also work, but is untested.\n* Packages may have a `deps.host` section listing further packages required on\n  the host.\n\nThe only supported cross-compile setup is using a Sabotage host that has the\nsame packages installed as the ones you wish to compile, but it was also\nsuccessfully used on non-sabotage hosts.\n\nIf you intend to cross-compile only packages written in C, the choice of the\nversion of your cross-compiler is not important. If you however intend to\ncompile also C++ packages, you should use the same GCC version that is built\nas default during stage1 (currently GCC 6.5.0) from `musl-cross-make` repo.\nthat is necessary so the applications are built against the same libstdc++\nthey'll be bundled together with (if they use dynamic linking).\n\nadditionally, the cross toolchain needs to use the identical (currently 2.27)\nor an older binutils version as in our `binutils` package.\nnewer binutils often immediately default to new features that the older versions\ncan't deal with (e.g. https://github.com/richfelker/musl-cross-make/pull/73 )\n\nThe cross-compile setup of sabotage can be used to either build individual\npackages for a different architecture, or a complete sabotage environment.\nIf using the former, you may want to export STATICBUILD=1 to build the packages\nstatically, if possible (some packages depend on dynamic linking to work\ncorrectly, for example to load modules/plugins at runtime).\n\n## Cross-Compile Instructions:\n\n\t$ mkdir x-prefix/powerpc\n\t$ cd x-prefix/powerpc\n\t$ cp SABOTAGEDIR/KEEP/config.cross config\n\t$ vi config # set your vars\n\t$ CONFIG=./config SABOTAGEDIR/utils/setup-rootfs.sh # initialize rootfs\n\t$ CONFIG=./config butch install nano # start building stuff\n\nMuch like a native build, a config file is copied and edited.\n`utils/setup-rootfs.sh` is run instead of `./build-stage0` to construct the\nnew root.\nFinally, we use `butch` to start cross-compiling and installing packages into\nit.\nUnlike native compilation, you don't have to build any stages, you can\nimmediately start compiling the packages you're interested in. If you intend\nto use the resulting rootfs to boot into, you should however start with building\n`musl`, `stage1`, and if you want to use the resulting rootfs as a full sabotage\ninstallation with development tools, also the package `base-dev`.\n\n\n## NOTES TO CONTRIBUTORS\n\nPlease use unified `diff` format (`diff -u`) for patches.\n\n### Use Git\n\nIt is necessary that you create `git` branches for your work.\nThis allows your changes to be checked out and rebased as needed, without merge\nconflicts.\n\nDo not commit more than one change/package in a single commit.\nUse a meaningful commit message that mentions the package name.\nPlease follow the style and conventions of your fellow contributors.\n\n### Use Templates\n\nWhen creating packages, try starting from the autoconf template:\n\n\t$ cp KEEP/pkg_skel/autoconf pkg/my-new-pkg\n\nThere are other convenient templates located in `KEEP/pkg_skel/` as well.\n\nTry running `utils/dlinfo.sh`:\n\n\t$ utils/dlinfo.sh http://1.2.3.4/my_new_pkg.tar.xz\n\n`utils/dlinfo.sh` will return the file stats and sha512sum for easy copying\nand pasting into your new package.\n\n### Package Name Guideline\n\nPackage names may consist of the following characters: a-z 0-9 -\ni.e: lower-case and numbers only, dash to separate.\n\nPerl5 modules from cpan must be named as perl5-Module-Submodule,\nfor examples perl5-XML-Parser. Uppercase should be applied exactly\nas in the module name.\n\nPython modules must be named as python-module.\nexample: python-setuptools\n\nFollowing this convention makes it possible to use package names in\nregexes or URLs without having to escape or encode/decode them.\n\n### Package Sources and Philosophy\n\nSabotage is designed with limited internet availability in mind.\nAfter downloading packages in advance, when you have internet, you may build\nlater offline at your leisure.\n\nSpace considerations are a top issue, both bandwidth and HD image size.\nSabotage ISOs and images ship with all tarballs to fulfill the GPL.\nALWAYS USE a TAR.XZ (preferred) or TAR.BZ2 download URL.\n\nPlease do not use FTP mirrors. FTP is a [broken, ancient protocol](http://mywiki.wooledge.org/FtpMustDie).\n\nDownloads from git or other source repositories are not desired.\nThis would add an internet connection as a build-time dependency.\n\n### Package maintainance\n\nEven though the sabotage linux team is at the moment rather small, we try to\nkeep all packages up-to-date, if possible. Updating a package usually requires\nat least one test build, and eventually one or more fixes and another rebuild\nfor each fix. So under some circumstances, this might require several hours of\nwork. Since our time is limited, some non-core packages that lack a maintainer\nand we consider of low importance will be updated (upstream URL) without a build\ntest and marked as `[untested]` in the commit message.\nThose packages may or may not build. If you find a build error in such a package\nfeel free to report the error or even better, fix it, make a PR and claim\nmaintainership.\n\n\n## THANKS\n\nSabotage originally was a distribution curated by chris2, based around shell\nscripts and Plan 9's mk.\nThis was possible through the help and inspiration of\ndalias, niklata, garbeam, pikhq, xmw, gaf and Arch Linux.\nSpecial thanks go to @AequoreaVictoria for years of support and countless\ncontributions.\n\n## CONTACT\n\nThere \u003cstrike\u003eis\u003c/strike\u003e was a mailing list: sabotage@lists.openwall.com\n\n\u003cstrike\u003eEmail sabotage-subscribe@lists.openwall.com and follow its instructions to\nsubscribe.\u003c/strike\u003e\n\nArchives available: http://openwall.com/lists/sabotage/\n\n**The mailing list is currently unmaintained. please use IRC.**\n\n/join #sabotage on irc.libera.chat for real time help.\n\n**READ THE COOKBOOK FIRST BEFORE POSTING**.\n\n\n## DONATIONS\n\nBitcoins are welcome:\n\n1HXhSKSyBUGAAga29WbpTkKGpruQq9J8Bb\n\n[0]:https://github.com/GregorR/musl-cross\n[1]:https://github.com/richfelker/musl-cross-make\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsabotage-linux%2Fsabotage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsabotage-linux%2Fsabotage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsabotage-linux%2Fsabotage/lists"}