raspberry pi b+ – arch linux update and future plans

Raspberry Pi B+
Beaglebone Black Rev C

Back in August I picked up two new little computers, the Raspberry Pi B+ and a Beaglebone Black Rev C. I moved my rolling Arch Linux for Arm from my older Raspberry Pi B to the B+. The Beaglebone came with Debian pre-installed.

Since receiving both boards I’ve had little time to work with them, either individually or as part of a larger project. As usual I had the best of intentions, but life interfered, and with the exception of just powering on the boards a bit and seeing if they worked, everything has been sitting in my big storage box for such items.

What makes this even more annoying for me is I also ordered three P8X32A-D40 Propeller chips, and even had one of them working in the Propeller developer’s board. The long-term goal has always been to integrate the RPi with the Propeller using an I2C channel. I had hoped to have everything working together before now. Both boards were ordered from Adafruit.

Software Update

I’ve gone and updated Arch Linux Arm for the Raspberry Pi. It runs fine on both the prior B and the current B+. I’ve created a compressed image and moved it up to my Google Drive location here. The compressed image is 1.6 GB compressed, and fits on an 8GB or larger SDHC card. I’ve switched from zip to compressed tar. The readme is here on Google Drive.

This may be the last Arch Linux release. Because the Beaglebone Black is pre-loaded with Debian, and because there is now a more current Raspbian (Debian-based) release for the Raspberry Pi, I’m looking at moving all my Raspberry Pi development to Raspbian in order to make the development environments on both boards as close as possible. This also fits in with my primary development system which runs Ubuntu 14.04.

Update

I installed Raspbian and booted into the system. Initial configuration was well thought out. On first boot you’re presented with a simple character-based menu. The first entry is to resize the active partition to use the entire micro SDHC card. I am using 16GB cards these days, and it was a pleasure to have the partition simply and cleanly repartitioned to use all 16GB. I had to use a separate Ubuntu utility to resize the Arch Linux partition to 8GB (that’s what I had at the time).

Right now my Raspbian installation boots into a simple command line environment. If I want the desktop I run startx, which boots the desktop into LXDE. I’m no fan of LXDE, and it looks like I’m still not. But I have to admit that it runs much faster and smoother than the first time I tried Raspbian. What’s most impressive about the latest Raspbian desktop is the latest Epiphany web browser. It isn’t perfect, but it’s still amazingly good on such minute hardware as the RPi B+. I’m suitably impressed with this iteration.

may raspberry pi

My work with the Raspberry Pi has slowed of late, due in no small part to a lot of travel so far this year. When I got back this weekend, powered up the Raspberry and updated Arch Linux ARM to the latest packages, as least as of Saturday 3 May. I then went through my usual of cleaning up the file system and creating a compressed image. It was at the end of that process I discovered my biggest problem to date: the size of the compressed ZIP file. It had grown over 500MB to roughly 1.5GB compressed.

I tried to upload it to Sourceforge, only to find out they had a 1GB file size limit. So I pushed it out to the only place I have that would accept it, Goggle Drive. Please note that the older images have been deleted from Sourceforge, and for all intents and purposes, I’m done with using Sourceforge. From now on I’ll use Google Drive to hold publicly accessible compressed images, and Github to hold any source.

Furthermore, the link to Sourceforge on the main menu has been replaced with a link to my Raspberry Pi category. Simply click on it to read everything I’ve published on the subject, including posts like this one. It will help you quickly find what I’ve been doing as well as links to resources.

Here is the link to the compressed image zip file:

Link https://drive.google.com/file/d/0B3akRjoJF444SXA5dEJUeWJTdWc/edit?usp=sharing

I did download the file and found it took me, on my Brighthouse Networks connection, approximately 45 minutes.

And here is the link to the README.TXT file:

Link https://drive.google.com/file/d/0B3akRjoJF444cE9SV2R5R1ZvNGM/edit?usp=sharing

I’m going to repeat a good bit of the README, with additional comments.

Release Notes for my personal El Cinco de Mayo RPi Arch Linux Arm release

  1. The primary reason for this release is to fix Heartbleed in the OpenSSL libraries.
  2. The secondary reason is to remove unneeded applications, clean up work areas, and reduce as much as possible overall disk image usage.

The TWM-based X Windowing Arch Linux Raspberry Pi image has been updated

ArchLinuxARM-2014.05.05-rpi-twm08G.zip, located on my Google Drive location, contains ArchLinuxARM-2014.05.05-rpi-twm08G.img, a 7,948,206,080 byte file that can be flashed to an 8GB or larger SDHC or micro SDHC card. To use this image unzip and then copy the resultant 8GB file to your target SDHC or equivalent card.

This image has the TWM X window manager installed with custom configurations. All TWM related files are located in the subdirectory twm and its related subdirectories.

All Arch Linux ARM packages are updated as of 3 May 2014. NOTE: This includes updated ssl libraries to fix Heartbleed bug/exploit.

Note for future reference: My Raspberry Pi support system is a Samsung R580 with Ubuntu 14.04 LTS installed.

Node.js and Web Applications on the Raspberry Pi

Node.js is still installed, and updated from the Arch Linux Arm repositories.

Local node.js work directories have been cleaned out, leaving only two:

  • express.jade (for web framework work)
  • node_modules (for GPIO and I2C work)

To start the example node.js and Express web app:

  1. cd into express.jade
  2. type node app.js

You do not need to be root to run app.js. The web app listens on port 8080.

Security

Security has been scaled back with this image.

  • the firewall is now inactive

I determined that my ruleset for the firewall (iptables) was incorrect. This resulted in less than ideal remote access. Furthermore, it was determined that iptables.service (see systemctl) had an adverse impact on performance. Therefore the iptables.service has been disabled and the link in /etc/iptables has been removed. If you wish to enable this on your own the various iptables files are still on the image for you to work with. Good luck.

  • root login via ssh is still blocked, however.
  • sudo pi now requires a password again.

Other Applications

Java 8, which was installed local to pi, has been removed, along with all Java tools, such as ant. It will not be re-installed.

Future application development will be via Javascript (node.js), Python (2.7.6 and 3.4.0 or later), and gcc (8.4.2). These, along with bash scripting, give you four different ways to develop. Adding Java 8 to the mix provided no real benefit to such a small machine, and proved to be a major resource consumer that the Raspberry Pi did not need to support. The four current languages also have the advantage of being supported out of the Arch Linux Arm repositories; Java 8 was downloaded direct from Oracle.

pacman

The pacman cache (/var/cache/pacman) has been cleaned up with pacman -Sc. This has removed all unnecessary package references, reducing pacman’s cache disk footprint by more than half (over 400MB).

Python

RPi.GPIO has been updated to 0.5.5. It is built and deployed in this image.

Note that ~/RPi.GPIO-0.5.5/test/test.py will not work as-is with Python 3.4.0. The print statement in that version of Python is a fully qualified function (see PEP 3105) and is fully enforced. I  have included a patch in these release notes that you can cut and pasted into an individual patch file and apply to test.py.

Note to everyone: The fix is already in the test directory as test34.py, for Python 3.4.0. Even the patch is there as patch.txt. I bring this up in case you want to apply it to another installation on another distribution.

--- test.py 2014-04-21 08:45:14.000000000 -0400+++ test34.py 2014-05-03 00:54:50.910000000 -0400@@ -123,13 +123,13 @@ GPIO.setup(LED_PIN, GPIO.OUT) pwm = GPIO.PWM(LED_PIN, 50) pwm.start(100)-print "\nPWM tests"+print("\nPWM tests") response = raw_input('Is the LED on (y/n) ? ').upper() self.assertEqual(response,'Y') pwm.start(0) response = raw_input('Is the LED off (y/n) ? ').upper() self.assertEqual(response,'Y')-print "LED Brighten/fade test..."+print("LED Brighten/fade test...") for i in range(0,3): for x in range(0,101,5): pwm.ChangeDutyCycle(x)@@ -224,14 +224,14 @@ def cb(self,chan): self.switchcount += 1-print 'Button press',self.switchcount+print('Button press',self.switchcount) def setUp(self): GPIO.setup(SWITCH_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) def test_switchbounce(self): self.switchcount = 0-print "\nSwitch bounce test.  Press switch at least 10 times and count..."+print("\nSwitch bounce test.  Press switch at least 10 times and count...") GPIO.add_event_detect(SWITCH_PIN, GPIO.FALLING, callback=self.cb, bouncetime=200) while self.switchcount < 10: time.sleep(1)@@ -239,12 +239,12 @@ def test_event_detected(self): self.switchcount = 0-print "\nGPIO.event_detected() switch bounce test.  Press switch at least 10 times and count..."+print("\nGPIO.event_detected() switch bounce test.  Press switch at least 10 times and count...") GPIO.add_event_detect(SWITCH_PIN, GPIO.FALLING, bouncetime=200) while self.switchcount < 10: if GPIO.event_detected(SWITCH_PIN): self.switchcount += 1-print 'Button press',self.switchcount+print('Button press',self.switchcount) GPIO.remove_event_detect(SWITCH_PIN) def tearDown(self):

Accounts:
Console only: root, password: root
Console and ssh: pi, password: pi

As pi, to start the TWM X Windowing desktop, type startx at the prompt.