Linux Mint Cinnamon upgrade 17.1 to 17.3 – Cinnamon crash with nvidia-304

I’ve been using Mint Cinnamon 17.1 as my main desktop OS, of all the Linux distros I’ve played with in the past couple of years, this is my favorite by far (in terms of simplicity of the Desktop Environment).

17.3 Rosa came out recently, so I hadn’t upgraded for a while, so updated via the menu link in the software package manager.

I realized from installing and configuring 17.1 before that I needed to use the older nvidia-304 graphics – I have an older HP mobo with nvidia 6150SE graphics on the motherboard, and the best driver seems to be nvidia-304.

The upgrade itself was without issue, but after rebooting and logging on, within a few sessions I got the message “Cinnamon just crashed. You are currently running in Fallback Mode” and various parts of the screen started not refreshing. At one point when I pressed Yes on the dialog, but that resulted in more corruption to the point where individual characters became scrambled and not readable.

Seems like others are having the same issue too:

From feedback from others, it seems 17.2 was the last stable version for them, so I reinstalled 17.2 from a dvd, completely wiping my / partition. Luckily my docs and everything else I needed to keep was on a separate /home partition, so this worked out for me.

Usually any issues with a distro are on the initial install. This is the first time I can think of that doing an upgrade had significant issues, so hopefully they can get it sorted.

Running AROS / Icaros Desktop on VirtualBox

I love to install and check out different operating systems. Installing on something like VirtualBox means you can install as a guest, play with it, and either continue to use it or delete the disk image, with no impact to your host OS. So here’s an unusual one to check out:

AROS is an open source implementation of the AmigaOS 3.1 apis, that runs on Intel and PowerPC cpus (Amigas were originally Motorola 68k based). It seems there’s a couple of different variations, the one I installed was Icaros Desktop, which comes with a live CD, which you can also install from.

One installed, it boots from a GRUB menu, and wow, does it boot quick, within a couple of seconds (running under VirtualBox on my i7 MacBook Pro). It boots so fast I might be tempted to install this as a bare metal install on an old PC and play around with it for a while. It also looks very pretty :-)

Industries that build their own tools

Here’s an interesting observation, and maybe something you haven’t thought of before. If you work in IT, particular in software development, the tools that you use as a developer were built by other developers.

Think about that for a minute. Can you imagine if chefs built their own ovens, or doctors made their own medicines?

Is there any other industry that builds it’s own tools?

Packet radio: Direwolf and pilinbpq

I’ve been playing around recently with setting up some packet radio software on the Raspberry Pi. The next thing I was interested in getting working was a BPQ32 node with BBS and Chat. G8BPQ’s instructions here are pretty easy to follow. What I got stuck on however was whether BPQ needed or used ax25, and apparently it doesn’t. So from the simplest direwolf and linbpq setup, you start direwolf, configure linbpq to point to Direwolf’s virtual kiss tnc serial port, and off you go.

I played around testing with 2 radios, one with Direwolf, linbpq and a Rigblaster connected to a Yaesu FT-60 HT, and the second, an Icom 880 connected with a Rigblaster Plug and Play to a desktop running Linux Mint, also using Direwolf. There was some random oddness wth connecting from one to the other, maybe because of the radios in close proximity, that turned out I just needed to increase default timeout settings. I set these both to the same in direwolf.conf and bpq32.cfg:

TXDELAY=300

TXTAIL=30

Once I’d added these (based on other suggested settings elsewhere in other people’s BPQ configs), then I was off and running. Looks good!

How to reset your password on Raspbian

What not to do: reset your password before you change/setup your keyboard locale, use punctuation characters in your new password, and then change the locale. Yeah, that’s not going to work. Now I don’t know where some of the characters moved to :-)

I’m going to leave this post right here for future reference.

Update 2/3/16: after I edit the cmdline.txt and booted to a shell, passwd gave me this error:

passwd: Authentication token manipulation error
passwd: password unchanged

Further down the post, this recommendation to remount / solved my issue:

mount -rw -o remount /

Then I did passwd and the change worked this time.

Setting up your new Raspberry Pi

I’ve had a Raspberry Pi model B for a couple of years and have used it as the basis for a number of projects, and blogged a number of getting started tips and other topics. As I just got a shiny new Rasberry Pi 2, I went back to find some of my prior posts on setting up and customizing some basics.

Here’s a few of my posts that are pretty useful to get up and running:

ReactOS guest on VirtualBox

Installing ReactOS in VirtualBox for a test drive. A few notes:

  • Attached harddisk image only seems to be detected if using IDE, not SATA
  • Insert the VirtualBox GuestAdditions cd after installing, and run the Windows 32 bit guest additions
  • Default network card of Intel Pro/1000 does not get detected with VirtualBox Guest Additions, change to PCNet FAST/III instead
  • New, supported apps (like Firefox) can be installed via the ReactOS Application Manager

Converting a ngRoute based AngularJS app to Angular ui-router

My AngularJS app I’ve been developing for a while was using ngRoute for it’s routing between views (I put together a simple example for reference on GitHub here). I got to the point where I need more that just single URL based routes to views, I needed to have at least one of the views incorporate other nested views that are part of a wizard set of pages. This is something that’s not supported by default in ngRoute, so I’m taking a look at AngularJS ui-router as an alternative.

AngularUI Router is state based, rather than that URL based.

Here’s my starting point for my app before adding the nested views and converting to ui-router:

var myApp = angular.module('MyApp', [ "ngRoute", "ngAnimate",
 "MyControllers" ]);

myApp.config([ '$routeProvider', function($routeProvider{
  $routeProvider.when('/', {
    templateUrl : 'home.html'
  }).when('/page1', {
    templateUrl : 'page1/page1.html',
    controller : 'Page1Controller'
  }).when('/page2', {
    templateUrl : 'page2.html'
  }).when('/page3', {
    templateUrl : 'page3.html'
  }).otherwise({
    redirectTo : '/'
  });
}]);

Converted to the state based approach, my routing config now looks like:

var myApp = angular.module('MyApp', [ "ui.router", "ngAnimate", "MyControllers" ]);

myApp.config(function($stateProvider, $urlRouterProvider) {

  $stateProvider
    // show home page
    .state('home', {
      url: '/home',
      templateUrl: 'home.html'
    })

    //show page2
    .state('page2', {
      url: '/page2',
      templateUrl: 'page2/page2.html',
      controller: 'Page2Controller'
    })

    //show page3
    .state('page3', {
      url: '/page3',
      templateUrl: 'page3.html'
    })

  // catch all route
  // send users to the home page
  $urlRouterProvider.otherwise('/home');
});

The ng-view from ngRoute is now replaced with the ui-view directive from ui-router:

<div ng-view></div>

becomes:

<div ui-view></div>

My menu links looked like this previously:

<li><a href="index.html#/home">Home</a></li>
<li><a href="index.html#/page1">Page 1</a></li>
<li><a href="index.html#/page2">Page 2</a></li>

 

Instead of using URLs that map to view templates, ui-router uses states and state changes to move between page templates – here’s what the replacement for the above menu links looked like:

<li><a ui-sref="home">Home</a></li>
<li><a ui-sref="page1">Page 1</a></li>
<li><a ui-sref="page2">Page 2</a></li>

Right now the routing configuration is really not that much different than before: the ui-router config is slightly different and ui-sref states replaced the links. Where the interesting part is that now you can also support nested views, that look like this in the configuration:

  $stateProvider
    // show page2
    .state('page2', {
      url: '/page2',
      templateUrl: 'page2/page2.html'
    })

    //show page2 - sub page1
    .state('page2.subsection1', {
      url: '/page2/sub1',
      templateUrl: 'page2/page2sub1.html'
    })

    //show page2 - sub page2
    .state('page2.subsection2', {
      url: '/page2/sub2',
      templateUrl: 'page2/page2sub2.html'
    })

This is the routing for page2 and two nested views that are nested within the main ui-view (ui-view is the ui-router replacement for ng-view ) with a states of page2.subsection1 and page2.subsection2.

The nested views have corresponding nested states in the routing, identified with a dot notation. Assuming page 2 has a submenu and it’s own ui-view nested view, the submenu would like like this:

<li><a ui-sref="page2.subsection1">Subsection 1</a></li>
<li><a ui-sref="page2.subsection2">Subsection 2</a></li>

With a following ui-view nested view in the page following the Page 2’s submenu:

<div ui-view></div>

… clicking on the submenu items will load the nested view fragments into this nested view.

Full docs for ui-router are here.

I have two working sample apps showing an approach using ngRouter and then the examples above updates to use ng-router:

  • Using ng-route here
  • Using ui-router here

Linbpq: configure via web page before bbs and chat apps start

It’s not immediately obvious from the docs, but after installing and creating a bpq32.cfg file for pilinbpq BPQ32 on the Pi (or Linux in general probably), after you’ve started pilinbpq running, you need to hit the admin web pages to configure the last few params before the services are accessible.

For example, if you telnet into your node locally and then type bbs or chat, you’ll see the error: “bbs application is not running”.

Hit the admin web pages for both bbs and chat, and complete the blank fields in the config. For me these where the applicationID and Streams values. The Id matches the id value of the app in the bpq32.cfg file. Streams is I think number of concurrent clients. Save values, restart, and you should be good.

Apache httpd in a Docker container

I have a ‘getting started‘ post on Docker already, so I thought it would be useful to pull together some of the simplest possible examples of building and running Docker containers, as real examples.

On the Docker Hub there’s many prebuilt images already. As a quick example, let’s use the Apache Httpd image and build a container that runs httpd and serves an example webpage.

This is pretty much the instructions that are on the httpd image page, so no surprises here.

In a new folder, create a Dockerfile:

FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

Create an index.html file in public-html and put some hello world content in it.

Next, from a Docker Quickstart Terminal, cd into the folder when you created the Dockerfile and public-html, and build your image:

docker build -t imagename .

 
Now to start up a container based on your image called imagename (name it whatever you like), and expose port 80 on the container to port 80 to the outside world:

docker run -it -p 80:80 imagename

Now point a browser at the IP of your docker machine (displayed when Docker Quickstart starts up), and success, you should see your html being served from apache in your container!

If you’re on Windows, the equivalent to capture the tty output is:

winpty docker run -it -p 80:80 imagename