Skip to main content

Development Tools

Your ADL Ubuntu environment is a full Linux system, which means you have access to the same development tools used in professional software engineering. This guide walks you through installing and configuring the essential tools you need to write code, manage projects, and connect to remote systems.

โ„น๏ธPackage Manager First

Most tools are installed through apt, Ubuntu's package manager. Always update your package lists before installing anything new.

$sudo apt update && sudo apt upgrade -y

Package Management with aptโ€‹

The apt package manager is your primary way to install software on Ubuntu. Before installing any development tools, make sure your package lists are current.

$sudo apt update

Search for available packages:

$apt search <package-name>

Install a package:

$sudo apt install -y <package-name>

Remove a package:

$sudo apt remove <package-name>
โญBest Practice

Run sudo apt update before installing new packages. Stale package lists can cause installation failures or install outdated versions.

Build Essentialsโ€‹

Many development workflows require a C/C++ compiler, make, and related build tools. The build-essential package bundles everything you need.

$sudo apt install -y build-essential cmake

Verify the installation:

$gcc --version
Expected Result

gcc (Ubuntu 13.x.x) 13.x.x or similar version output.

$make --version
$cmake --version
โœ…๐Ÿ’ก Tip

You need build-essential even if you do not write C code. Many Python and Node.js packages include native extensions that require a C compiler during installation.

Gitโ€‹

Git is the standard version control system. Install it, configure your identity, and optionally set up SSH access to GitHub.

Installation and Configurationโ€‹

$sudo apt install -y git

Set your name and email. These appear in every commit you make.

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

Verify your configuration:

$git config --list
Expected Result

user.name=Your Name user.email=your.email@example.com

SSH Keys for GitHubโ€‹

SSH keys let you push and pull from GitHub without typing your password each time.

ssh-keygen -t ed25519 -C "your.email@example.com"

Press Enter to accept the default file location, then set a passphrase or press Enter for none.

$cat ~/.ssh/id_ed25519.pub

Copy the output and add it to your GitHub account under Settings > SSH and GPG keys > New SSH key.

Test the connection:

$ssh -T git@github.com
Expected Result

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

Common Git Workflowโ€‹

$git clone git@github.com:username/repo.git
$cd repo && git checkout -b my-feature
$git add .
git commit -m "Add new feature"
$git push origin my-feature
โญBest Practice

Create a new branch for each feature or fix. This keeps your main branch clean and makes code review easier.

Pythonโ€‹

Python is pre-installed on most Ubuntu systems, but you should verify the version and set up virtual environments for project isolation.

Installationโ€‹

$sudo apt install -y python3 python3-pip python3-venv

Verify the installation:

$python3 --version
Expected Result

Python 3.12.x or similar version output.

$pip3 --version

Virtual Environmentsโ€‹

Always use virtual environments to isolate project dependencies. This prevents conflicts between packages required by different projects.

$python3 -m venv ~/myproject-env
$source ~/myproject-env/bin/activate

Your prompt changes to show the active environment. Install packages inside it:

$pip install requests

Deactivate when you are done:

$deactivate

Test with a Simple Scriptโ€‹

python3 -c "import sys; print(f'Python {sys.version} is working')"
Expected Result

Python 3.12.x (main, ...) is working

๐ŸšซUsing pip without a virtual environment

Installing packages globally with pip install can break system tools. Always activate a virtual environment first, or use pip install --user as a fallback.

Node.jsโ€‹

Node.js lets you run JavaScript outside the browser. You can install it directly with apt or use nvm for version management.

Option A: Install via aptโ€‹

$sudo apt install -y nodejs npm
$node --version
$npm --version

nvm (Node Version Manager) lets you switch between Node.js versions per project.

$curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
$source ~/.bashrc
$nvm install --lts

Verify:

$node --version
Expected Result

v22.x.x or the current LTS version.

$npm --version

npm Basicsโ€‹

Initialize a new project:

$mkdir ~/my-node-project && cd ~/my-node-project && npm init -y

Install a package:

$npm install express

Test with a Simple Scriptโ€‹

node -e "console.log('Node.js ' + process.version + ' is working')"
Expected Result

Node.js v22.x.x is working

โญBest Practice

Use nvm if you work on multiple projects that require different Node.js versions. It keeps each project's runtime isolated.

SSHโ€‹

SSH lets you securely connect to remote servers, transfer files, and tunnel services.

Generating Keysโ€‹

If you have not already generated a key for GitHub, create one now:

ssh-keygen -t ed25519 -C "your.email@example.com"

Configuring SSH Configโ€‹

Create or edit ~/.ssh/config to define shortcuts for servers you connect to frequently:

Host myserver
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Port 22

Then connect with just:

$ssh myserver

Connecting to Remote Serversโ€‹

$ssh user@hostname

Copy files to a remote server:

$scp localfile.txt user@hostname:/remote/path/
โœ…๐Ÿ’ก Tip

Add your public key to the remote server's ~/.ssh/authorized_keys file to skip password prompts on every connection.

Common Development Workflowsโ€‹

A typical clone-build-test cycle looks like this:

$git clone git@github.com:username/project.git
$cd project
$cat README.md

For a Python project:

$python3 -m venv .venv && source .venv/bin/activate
$pip install -r requirements.txt
$python3 -m pytest

For a Node.js project:

$npm install
$npm test
๐ŸŸกPerformance โ€” Medium Impact

Running npm install or pip install downloads packages from the internet. If your ADL environment has limited bandwidth, expect these commands to take longer on the first run. Subsequent installs use cached packages.

Verifying Your Setupโ€‹

Run these commands to confirm that all tools are installed and working:

$git --version
$python3 --version
$node --version
$npm --version
$gcc --version
$make --version
$cmake --version
$ssh -V
๐Ÿ”งTroubleshooting
Command not found after installation
Close and reopen your terminal, or run `source ~/.bashrc` to reload your shell configuration.
Permission denied when installing packages
Use `sudo` before apt commands. For pip, activate a virtual environment first instead of using sudo.
SSH connection refused
Verify the remote server&apos;s SSH service is running and that your public key has been added to its authorized_keys file.
nvm: command not found
Run `source ~/.bashrc` after installing nvm. The installer adds nvm to your shell profile, but the current session needs a reload.
pip install fails with build errors
Install build-essential first: `sudo apt install -y build-essential python3-dev`. Many Python packages compile native extensions during installation.
โ“Frequently Asked Questions
Do I need to install all these tools?
No. Install only what your projects require. Git and build-essential are recommended for everyone. Add Python, Node.js, or other tools as needed.
Can I use Docker inside ADL?
Docker support depends on your ADL configuration. Check your environment&apos;s documentation or ask your administrator.
How do I update tools to newer versions?
Run `sudo apt update && sudo apt upgrade` to update apt-managed tools. Use `nvm install --lts` to update Node.js via nvm. Python versions are tied to Ubuntu releases unless you use pyenv.