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.
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 -yPackage 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 updateSearch for available packages:
apt search <package-name>Install a package:
sudo apt install -y <package-name>Remove a package:
sudo apt remove <package-name>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 cmakeVerify the installation:
gcc --versiongcc (Ubuntu 13.x.x) 13.x.x or similar version output.
make --versioncmake --versionYou 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 gitSet 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 --listuser.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.pubCopy 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.comHi username! You've successfully authenticated, but GitHub does not provide shell access.
Common Git Workflowโ
git clone git@github.com:username/repo.gitcd repo && git checkout -b my-featuregit add .git commit -m "Add new feature"
git push origin my-featureCreate 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-venvVerify the installation:
python3 --versionPython 3.12.x or similar version output.
pip3 --versionVirtual Environmentsโ
Always use virtual environments to isolate project dependencies. This prevents conflicts between packages required by different projects.
python3 -m venv ~/myproject-envsource ~/myproject-env/bin/activateYour prompt changes to show the active environment. Install packages inside it:
pip install requestsDeactivate when you are done:
deactivateTest with a Simple Scriptโ
python3 -c "import sys; print(f'Python {sys.version} is working')"
Python 3.12.x (main, ...) is working
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 npmnode --versionnpm --versionOption B: Install via nvm (Recommended)โ
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 | bashsource ~/.bashrcnvm install --ltsVerify:
node --versionv22.x.x or the current LTS version.
npm --versionnpm Basicsโ
Initialize a new project:
mkdir ~/my-node-project && cd ~/my-node-project && npm init -yInstall a package:
npm install expressTest with a Simple Scriptโ
node -e "console.log('Node.js ' + process.version + ' is working')"
Node.js v22.x.x is working
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 myserverConnecting to Remote Serversโ
ssh user@hostnameCopy files to a remote server:
scp localfile.txt user@hostname:/remote/path/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.gitcd projectcat README.mdFor a Python project:
python3 -m venv .venv && source .venv/bin/activatepip install -r requirements.txtpython3 -m pytestFor a Node.js project:
npm installnpm testRunning 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 --versionpython3 --versionnode --versionnpm --versiongcc --versionmake --versioncmake --versionssh -V