Ubuntu 20.10: Programming Tools

This is my last post for my Ubuntu 20.10 install. Below is my notes for installing all of the programming-related apps and tools that I like to have available.

Virtualbox

I installed virtualbox just from the respoitory:

sudo apt install virtualbox

I learned that you can install the extension pack on the version from the repository. That doesn’t really matter. But, it didn’t do what I wanted so I decided to just uninstall it. You can do that by going to File > Preferences. Then, under Extensions, you can remove it.

I setup the network in File > Host Network Manager. I created vboxnet0.

Finally, I double clicked on all of the .vbox files in my file system to add all the machines.

Tools

These are the tools I like:

  • vim: an updated version of the vi text editor
  • vim-gtk: a GUI version of the vi editor
  • git-cola: a GUI interface to git version control (also installs git itself) because I don’t use git enough to remember the commands
  • meld: text compare tool
  • openjdk: Java development kit
  • openjfx: JFX java development that I use in one of my projects (see note below)
sudo apt install \
       vim \
       vim-gtk3 \
       git-cola \
       meld \
       openjdk-8-jdk \
       openjdk-13-jdk \
       openjdk-15-jdk \
       openjfx

Note: I tried openjdk 15 intially, but I had issues with Flutter. (I never did really figure out that that was the problem or not.) I also had issues with the OpenJFX. It installed into /usr/share/openjfx and was missing the Ant jar file. I never did find the current Ant for openjfx.

For my vim config, I have it saving the temp files in a specific directory rather than where the file is that I’m editing. So, that directory needs to be created:

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 installed Visual Studio Code from the Microsoft Website. I just downloaded the deb file.

sudo apt install ./Downloads/code_1.50.1-1602600906_amd64.deb

After installing, I opened Code and used Ctrl+P to install these extensions:

  • 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

I installed Node with these commands. I also added the tools that I use with angular.

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

I use Eclipse for Java development. I just downloaded the installer from the website. I used “Extract Here” in nautilus and double clicked on the installer (eclipse-inst).

Going through the installer, I …

  • picked Eclipse IDE for Java Developers
  • changed the install path to: /home/skp/bin/eclipse/java-2020-09

I installed e(fx)clipse using the market place. I visited the website in my browser and then drug the install button to my workspace.

Before, I installed a bunch of stuff that I don’t normally use. This time, I just installed a few things from the marketplace:

For Java FX, I use the Gluon Scene Developer. I downloaded that from the website. I downloaded the deb version for Java FX 11. Then, I installed it with:

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

Open JFX

I have one App that I have been playing with that uses Open JFX. So, I installed it to work with Eclipse. I keep finding it more and more difficult to install using the regular Ubuntu packages.

The OpenJFX package installs into /usr/share/openjfx/lib. I also found some jars installed in /usr/share/java. It came from the libopenjfx-java package.

$ dpkg -S /usr/share/java/javafx-base.jar 
libopenjfx-java: /usr/share/java/javafx-base.jar

So, instead of using the packages, I downloaded the “JavaFX Linux SDK” from Gluon’s website. Then, I extracted it into my Eclipse folder.

unzip ~/Downloads/openjfx-11.0.2_linux-x64_bin-sdk.zip
mv javafx-sdk-11.0.2/ ~/bin/eclipse/

In Eclipse, I opened preferences (Window > Preferences). I set the Java FX Path.

Also, I went to the Build Path (Java > Build Path > User Libraries). I added a new one called JavaFX.

Then, I added all of the Jars in the installation folder:

Flutter

This time the flutter instructions suggest using snap. So, I just went that route to install it.\

sudo snap install flutter --classic

Note: this installs flutter in the directory /home/skp/snap/flutter/common/flutter. You’ll need that later for Android Studio.

When I ran flutter doctor, it downloaded the flutter linux stable tar ball. That took a little while, but it seemed to install fine by itself.

I downloaded Android Studio from the website. While it was downloading, I installed the following prerequisites:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
udo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev

I extracted the code to my bin directory:

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

Flutter doctor wants to be able to see the files, so I added the path to the end of my ~/.bashrc with these lines:

#  for Android Studio install
export PATH="$PATH:$HOME/bin/studio/android-studio/bin"
export STUDIO_JDK=/usr/lib/jvm/java-8-openjdk-amd64/

Then, I launched the studio.sh script in the bin directory. To make it easier to launch, I used the Menu Editor (MenuLibre) to add a launcher. Both the icon and the shell script are in the bin directory of what I extracted.

I followed these instructions to enable VM acceleration. Note the instructions say to use libvirt-bin, but as best I can tell libvirt-daemon is the correct one in this case. I also don’t think that I need ubuntu-vm-builder and ia32-libs-multiarch.

sudo apt-get install cpu-checker
egrep -c '(vmx|svm)' /proc/cpuinfo
#  result: 24
kvm-ok
#  result:
#INFO: /dev/kvm exists
#KVM acceleration can be used
sudo apt-get install qemu-kvm libvirt-daemon bridge-utils

To clear up the “android license status unknown”, I ran:

flutter doctor --android-licenses

I got this crazy error when I did that:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
	at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
	at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
	at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 5 more

I found a solution that suggested installing the command-line tools. In Android Studio, I opened File > Settings. Then, I went to Appearance & Behavoir > System Settings > Android SDK. I installed the “Android SDK Command-line Tools (latest)” on the SDK Tools tab.

After that, the flutter doctor license command worked fine.

Also in the settings, I went to the Languages & Frameworks > Flutter and set the flutter path to /home/skp/snap/flutter/common/flutter

Note: At one point, it complained about my dart SDK path not being configured. That is located insde the flutter folder: /home/skp/snap/flutter/common/flutter/bin/cache/dart-sdk

I still had a problem with it not building my flutter project correctly. I was getting this error:

FAILURE: Build failed with an exception.                                
                                                                        
* What went wrong:                                                      
Could not initialize class org.codehaus.groovy.runtime.InvokerHelper   

I remembered that I had been working on the beta channel previously. So, I tried going to the beta channel with these commands:

 flutter channel beta
 flutter upgrade

While these commands did some thorough building and resetting things, I’m not sure they helped in the end.

cd android
./gradlew app:assembleRelease
cd ..
flutter pub cache repair
flutter pub get
flutter clean
flutter build apk

This article helped. I ran these two commands and got it to build:

flutter build apk --profile
flutter build apk --release

MySQL / PHP

I have a project that uses both MySQL and PHP. I just want to develop in it as a hobby but not run it full time. So, I installed it like this:

sudo apt install mariadb-server-10.3
sudo apt install php7.4
sudo apt install php-mysql
sudo apt install composer

(Note: I probably should have done php7.4-fpm instead.)

To keep it from running all of the time, I ran this:

sudo systemctl disable mysql

To get the actual database, I had to run this command on my server.

sudo mysqldump -p matthew > matthewbackup.txt

I loaded the backup script with these commands:

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
\q

So, after all this, I found that Apache got installed somehow. To found how, I installed aptitude and tried to use the why command to figure out.

$ sudo apt install aptitude
$ aptitude why apache2 --show-summary
Packages requiring apache2:
  php7.4

I fixed it with:

sudo apt remove apache2
sudo apt autoremove

Resources

Leave a Comment

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