Ubuntu 20.04: Programming Tools

The primary purpose of my laptop is programming and building things. I like to dabble in all kinds of things, but most of them are programming related. This is part of my series with my notes setting up Ubuntu 20.04 of my laptop.


I installed Virtualbox from Ubuntu’s sources this time rather than the Oracle website.

sudo apt install virtualbox

To set it up, I went to File > Preferences > Network and clicked the plus button on the right to add a new network.

Also, I went to File > Host Network Manager and clicked create to setup vboxnet0.

Lastly, I went to my VirtualBox VMs folder that I had copied from my other computer and double clicked on each of the machines’ vbox files.

IDEs / Tools

These are the tools that I installed from Ubuntu:

sudo apt install \
       vim \
       vim-gtk3 \
       git-cola \
       meld \
       openjdk-13-jdk \

I couldn’t find the nautilus-compare extension anymore. I’ll have to look for that later.

For my gVim configuration, I need a folder for the work files. So, I created it with:

mkdir ~/.vimtmp

To configure Git, I ran the following two commands:

git config --global user.name "my name"
git config --global user.email my.email@email.com

Visual Studio Code

I simply installed Visual Studio code from the Microsoft’s website. Once the Deb package was downloaded , I ran:

sudo apt install ~/Downloads/code_1.44.2-1587059832_amd64.deb

These are the extensions that installed. I just hit Ctrl+P in Code and pasted each line in the textbox to install the extension.

  • ext install johnpapa.angular-essentials
  • ext install humao.rest-client
  • ext install raagh.angular-karma-test-explorer
  • ext install hbenl.vscode-jasmine-test-adapter
  • ext install dart-code.flutter

Node JS

For Node, I used these commands to install it:

sudo apt-get install nodejs 
sudo apt-get install npm 
sudo npm install npm@latest -g
sudo npm install -g gulp 
sudo npm install -g grunt 
sudo npm link @angular/cli


Eclipse is a bit of a long install as well. I downloaded it from the website. I extracted the downloaded tar ball into the Downloads folder. After drilling down into the folders, I double clicked on the “eclipse-inst” file. In the installer, I chose “Eclipse IDE for Java Developers”. I changed the installation path to:

  • <home folder>/bin/eclipse/java-2020-03

The challenge is installing all of the plugins. I did that from Help > Install New Software. After select “All Available Sites” in “Work with”, I selected the following items to install:

  • Application Development Frameworks > e(fx)clipse – Minimal JavaFX OSGi Integration bundles
  • Collaboration > Dynamic Languages Toolkit – Mylyn Integration
  • Collaboration > Github Integration with task focused interface
  • Programming Languages > C/C++ Development Tools
  • Programming Languages > JavaScript Development Tools
  • Programming Languages > JavaScript Development Tools Chromium/V8 Remote Debugger
  • Programming Languages > PHP Development Tools (PDT)
  • Programming Languages > PHP Development Tools (PDT) PHPUnit Support
  • Web, XML, Java EE and OSGi Enterprise Development > Eclipse Java Web Developer Tools
  • Web, XML, Java EE and OSGi Enterprise Development > Eclipse Web Developer Tools
  • Web, XML, Java EE and OSGi Enterprise Development > Javascript Development Tools
  • Web, XML, Java EE and OSGi Enterprise Development > PHP Development Tools
  • Update 12/2/2019 — Programming Languages > PHP Development Tools (PDT) Composer Support

e(fx)clipse was a bit of a different install this time around. I visited the page in the marketplace. Then, I drug the “Install” button on the Package Explorer in Eclipse. Then, I confirmed and accepted the license agreement.

After Eclipse restarted, I went to Window > Preferences. Then, I went to JavaFX and entered /usr/lib/jvm/java-13-openjdk-amd64/lib for the JavaFX 11+ SDK.

I also added a site in the installer: http://download.eclipse.org/efxclipse/runtime-nightly/site

  • FXTarget > e(fx)clipse – Minimal JavaFX OSGi integration bundles
  • FXTarget > e(fx)clipse – Target Platform Feature

Once installed, don’t forget to use Libre Menu Editor to add a launcher for Eclipse.

Finally, for Java FX GUI development, I use Gluon Scene Developer. I just downloaded that from the website. I downloaded the Java FX 11 Deb version. I installed it with:

sudo apt install ~/Downloads/scenebuilder-11.0.0.deb

Somehow in the process of all this, I got it to where the code complete wouldn’t work. It didn’t have any of the methods/properties in the code complete. I fixed that by going to: Window > Preferences > Java > Editor > Content Assist > Advanced


I ran through the install instructions on the Flutter website. I could download the main installation package directly from the instructions. I extracted it into my bin directory:

tar -xvf ~/Downloads/flutter_linux_1.17.1-stable.tar.xz -C ~/bin/

Next, I added it to my path:

vi ~/.bashrc

Then, I added this to the bottom of the file:

#  for flutter install
export PATH="$PATH:$HOME/bin/flutter/bin

And, to make sure I got it right, and to set it for the current session:

. ~/.bashrc
echo $PATH
which flutter
flutter --version

Next, I ran the precache:

flutter precache

For some reason, I got a message: “Failed to download the Android dependencies”. I just ignored it for the time being.

Next, I downloaded Android Studio from the website. I installed it just by extracting it to my bin directory:

tar xzvf ~/Downloads/android-studio-ide-192.6392135-linux.tar.gz -C ~/bin

I also added it to my path by adding the following lines to my ~/.bashrc:

#  for Android Studio install
export PATH="$PATH:$HOME/bin/android-studio/bin"

Finally, I launched studio.sh (if you didn’t get it put in your path yet, it is in the bin folder where you installed it.) That launched the Setup Wizard. I just picked the standard setup.

I installed KVM because it said it would make the emulator perform better. I just used the instructions that it pointed me to. I installed these first and added myself to the groups:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
sudo adduser `id -un` libvirt
virsh list --all

Now, back on the Android Studio welcome screen, I clicked Configure > AVD Manager. There, I created a new device. I chose Pixel 3XL to match my phone.

I didn’t worry about installing the plugins for Android Studio. I have them in Visual Studio Code. To check everything, I ran:

flutter doctor

The only thing that I worried about was the licenses, which was fixed with:

flutter doctor --android-licenses

Since I installed flutter into a different directory, I had to update my project. I tried:

flutter pub get
flutter clean
flutter build apk


I use MySQL as the database for some of my projects. So, I needed it for testing and developing on those.

sudo apt install mariadb-server-10.3

I don’t want it running all of the time. I only want the database when I am working on those projects. So, I’ll set it up to run only when I manually start the service.

sudo systemctl disable mysql

I exported the database on the old server with:

sudo mysqldump -p matthew > matthewbackup.txt

Then, on my new laptop I imported it with:

cd ~/Downloads
sed -i '' 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' matthewbackup.txt
sudo mysql
create database matthew;
use matthew;
source matthewbackup.txt

Note: I initially got this error: “Unknown collation: ‘utf8mb4_0900_ai_ci'”. That is the reason for the sed command added in there.

While, I’m at it, the same project needs PHP. I installed the php package, but that just installed apache and everything. I didn’t want that much installed. (sudo apt install php). These are the packages that installs:

apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.4 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
php-common php7.4 php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline

Instead, I just installed:

sudo apt install php7.4

In order to work with packages, I also need Composer. I installed that using curl:

sudo apt install curl php-cli php-mbstring git unzip php-xml
cd ~/Downloads
curl -sS https://getcomposer.org/installer -o composer-setup.php
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Note: I did do the verification, but the Hash might change. You can get the correct one from the top of this page. I also had to add the php-xml to work with my project (required by lcobucci/jwt).


Leave a Comment

Your email address will not be published. Required fields are marked *