Reference
All scripts
Every installer, in plain text. Click any of them to read the exact code before you run it — that is the whole point of this page.
| Script | Step | Runs on | What it does |
|---|---|---|---|
install_ubuntu_wsl.ps1 |
1 | Windows | Enables WSL 2 and installs Ubuntu 24.04 LTS |
| — none — | 1.5 | Ubuntu | Practice page only; these commands come with Ubuntu |
install_cmds.sh |
2 | Ubuntu | Core command line tools |
install_c.sh |
3 | Ubuntu | clang and lldb — compile and debug |
install_py.sh |
4 | Ubuntu | Python 3 — run a program |
install_java.sh |
5 | Ubuntu | Temurin JDK — javac, java, jshell |
report_completion.sh |
5.5 | Ubuntu | Tests steps 2–5 and reports the result. Installs nothing. |
install_more_cmds.sh |
6 | Ubuntu | The wider toolkit — independent of steps 1–5 |
install_binary.sh |
7 | Ubuntu | Hex, disassembly, valgrind, make — independent of steps 1–5 |
install_uv.sh |
8 | Ubuntu | uv: packages, projects, Python versions — independent of steps 1–5 |
install_maven_gradle.sh |
9 | Ubuntu | Maven and Gradle — independent, but needs the JDK from step 5 |
install_all.sh |
2–5 | Ubuntu | Runs steps 2 to 5 in order. Does not include 6 to 12. |
install_py_debug.sh |
12 | Ubuntu | pdb practice files — independent of steps 1–5 |
install_sanitizers.sh |
11 | Ubuntu | AddressSanitizer runtime — needs clang from step 3 |
| — none — | 10 | Ubuntu | Practice page only; jq is already installed by step 2 |
common.sh |
— | Ubuntu | Shared helpers the others load. Not run on its own. |
Ways to run them
Straight from here
$ curl -fsSL https://aikaryashala.com/system_setup/scripts/install_c.sh | bash
Download first, read, then run
$ curl -fsSLO https://aikaryashala.com/system_setup/scripts/install_c.sh
$ less install_c.sh
$ bash install_c.sh
From a clone of the repository
$ git clone https://github.com/aikaryashala/system_setup.git
$ cd system_setup/docs/scripts
$ ./install_c.sh
How they behave
- Idempotent. Re-running one is safe. Anything already present is reported as skip.
- Non-interactive. They ask for your password once at the start, then run to the end unattended.
- Strict. They stop on the first real failure rather than leaving a half-installed system.
- Self-verifying. Each one finishes by printing the version of everything it installed.
Settings you can override
| Variable | Script | Default | Effect |
|---|---|---|---|
PYTHON_VERSION | install_uv.sh | 3.14 | Which Python uv installs |
UV_TOOLS | install_uv.sh | ruff | Tools installed with uv tool install |
JDK_VERSION | install_java.sh | 25 | Which Temurin LTS to install |
SKIP_MAVEN / SKIP_GRADLE | install_maven_gradle.sh | unset | Set to 1 to leave that build tool out |
STUDENT_NAME / ROLL_NUMBER | report_completion.sh | asked for | Skip the prompts |
DRY_RUN | report_completion.sh | unset | Set to 1 to check everything but send nothing |
STEPS | install_all.sh | cmds c py java | Which steps to run, in order. Also accepts more_cmds, binary, uv, maven_gradle, sanitizers and py_debug. |
WSL_DISTRO | install_ubuntu_wsl.ps1 | Ubuntu-24.04 | Which distribution to install |
SYSTEM_SETUP_BASE_URL | all | this site | Where scripts fetch each other from — point it at a fork |
For example, to install Python 3.12 and skip Gradle:
$ curl -fsSL https://aikaryashala.com/system_setup/scripts/install_uv.sh | PYTHON_VERSION=3.12 bash
$ curl -fsSL https://aikaryashala.com/system_setup/scripts/install_java.sh | SKIP_GRADLE=1 bash
Example files
The small programs used on the guide pages, ready to download:
hello.cThe C program from step 3msd.cThe debugging example from book chapter 8overflow.cA deliberate buffer overflow (step 11)hello.pyThe Python script from step 4fetch.pyA uv script with inline dependencies (step 8)student.jsonThe JSON file you check with jq (step 2)sum.pyThe Python program from step 4report.pyThe program to run under pdb (step 12)stats.pyThe module report.py steps into (step 12)Report.javaThe Java program from step 5Stats.javaThe class Report.java calls (step 5)Hello.javaA one-file Java exampleMakefileThe Makefile from step 7