--- date: 2017-11-16 11:58:40 tags: Tutorial Perl6 RaspberryPi Raku description: > In this tutorial I'll get you through setting up a Raspberry Pi with Perl 6. I am using a Raspberry Pi 3 myself, but other versions should work fine too. However, older versions are slower, so it might take a bit longer to install completely. --- = Perl 6 - Setting up a Raspberry Perl :toc: preamble In this tutorial I'll get you through setting up a Raspberry Pi with https://perl6.org/[Perl 6]. I am using a Raspberry Pi 3 myself, but other versions should work fine too. However, older versions are slower, so it might take a bit longer to install completely. [NOTE] ==== For those who have never had a Raspberry Pi before, you will need the following: - Raspberry Pi board - Power supply (5v 2A, micro USB) - SD card of at least 4gb, but I would advise at least 8gb - Monitor with HDMI cable - Keyboard ==== Perl 6 will be installed using https://github.com/tadzik/rakudobrew[Rakudobrew], which I'll also be using to get https://github.com/ugexe/zef[zef] installed. Zef is the recommended module manager for Perl 6. == Setting up Raspbian The first step is getting the OS set up. To keep this tutorial simple, I will stick to https://www.raspbian.org/[Raspbian], but if you feel confident in your skills you can use any other distribution or OS. Perl 6 installs the same on all UNIX(-like) operating systems. === Get the image First, https://www.Raspberrypi.org/downloads/raspbian/[download the Raspbian image from the Raspberry Pi download page]. I chose the `LITE` version, but if you prefer having a graphical desktop you can go for the `DESKTOP` version instead. At the time of writing, this means I got the `2017-09-07-raspbian-stretch-lite.zip`. If you want to verify you got the correct download and nothing went wrong saving it to your disk, you can verify the checksum. The checksum for your download is noted below the download links. To get the checksum of the file you downloaded, use `sha256sum` as follows: NOTE: Lines prepended with a `$` are to be ran as your normal user, whereas lines with a `#` are ment to be ran as "super user". This can be done by using a privilege escalation program, such as https://www.linux.com/blog/how-use-sudo-and-su-commands-linux-introduction[`sudo`]. [source] ---- $ sha256sum 2017-09-07-raspbian-stretch-lite.zip ---- If the checksum matches the one noted below the download button you used, it should be fine, and you can continue with extracting the image from the zip using `unzip`: [source] ---- $ unzip 2017-09-07-raspbian-stretch-lite.zip ---- This will result in a similarly named file, but with a `.img` extension instead of `.zip`. This is the image that you can write to the SD card. === Write the image to the SD card This step is pretty easy, but typos here can be disastrous for the system you're using to write to the SD card. Open a terminal and run `dmesg -w` as super user (usually doable using `sudo dmesg -w`). This will give immediate feedback when you insert your SD card, and shows which device it is being assigned to. In my case, this was `sdb`, which means the device file resides at `/dev/sdb`. Now, to actually write the image, I'll use `dd` since this is everyone's favourite tool, it seems. If you feel adventurous enough to try out something different, feel free to read up on https://www.vidarholen.net/contents/blog/?p=479[Useless Use of dd]. Make sure to make the `if` argument point to the correct path with your extracted raspbian image, and `of` to point to the correct device as identified earlier. In order to be allowed to run this command, you must be root, which can be achieved by using `sudo` or `doas` again. [source] ---- # dd bs=4M status=progress if=/path/to/2017-09-07-raspbian-stretch-lite.img of=/dev/sdb $ sync ---- Afterwards, plug it into your Raspberry Pi and attach all cables you might need. Think of stuff like a keyboard, mouse, monitor, internet, power. Do power last, as the Raspberry Pi will start immediatly once it receives power. === First boot The Raspberry Pi should start booting the moment you supply it with power. If you attach the HDMI after the power, it's possible you won't have display working, so make sure HDMI is attached before powering up. You'll see some text scrolling by, up to a point where it asks you for a `login`, and accepts keyboard input. The default username is `pi`, and the default password is `Raspberry`. You are strongly advised to change the password upon login, which can be done in the next step. === Configuration The Raspberry Pi comes with its own configuration tool, `raspi-config`. Run this with `sudo` prepended in front of it so you gain the right privileges. I would advise you to at least change the user password from here. After this you should go to `Advanced Options` and expand the filesystem. This will grow the filesystem to the entire SD card's size. TIP: To get to the buttons on the bottom (`Select`, `Finish` and `Back`), use the arrow keys to go left or right. You can look around the tool for other interesting things to modify. Once you are satisfied, go back to the main menu and choose `Finish`. It will ask to reboot, which you should accept. This will apply all the new configurations you just made. === Updating and installing additional packages It's rare for the system to be completely up to date after installing the image on the SD card. Additionally, you also need some extra packages in order to get rakudobrew, and to install Perl 6 itself. For this, we use the package manager bundled with raspbian, `apt`: [source] ---- # apt update # apt upgrade ---- This will update the package lists, and then upgrade all outdated packages to their newest versions. You should do this at least once a week to make sure your system stays up to date. Once the upgrades are finished, you can install some new packages which are needed later on in this tutorial: [source] ---- # apt install git build-essential ---- `git` is required to get the rakudobrew repository and is also used by rakudobrew itself to get the sources needed to build Perl 6 and to install zef. The `build-essential` package comes with all sorts of tools to build software, which is required to build Perl 6. == Installing Perl 6 Now, we've got a working Raspberry Pi installation. We can start doing things with it, such as playing around with Perl 6. === Setting up Rakudobrew Rakudobrew is a nice tool to manage Perl 6 installations on your system. It can also install `zef` for you, so you don't have to deal with this manually. This is all documented on the repository's `README.md` file as well, but I'll explain it here too. I do make a few small tweaks here and there to match my preferred setup more closely. Clone the repository to your system, and add it to your `$PATH` to be able to use the scripts bundled with it: [source] ---- $ mkdir -p ~/.local/var $ git clone https://github.com/tadzik/rakudobrew.git ~/.local/var/rakudobrew $ export PATH=${HOME}/.local/var/rakudobrew/bin:$PATH $ hash -r ---- The `hash -r` call will rehash your PATH, so you can tab-complete `rakudobrew`. Next, initialize rakudobrew: [source] ---- $ rakudobrew init ---- This will give you a notification to automatically load rakudobrew next time. It is advised you follow that message, so you won't have to do it manually each time you log in to the system. === Installing Perl 6 with MoarVM backend Now that rakudobrew is installed and available to use, it's time to make use of it to install Perl 6. [source] ---- $ rakudobrew build moar ---- === Installing zef, the module manager Getting zef to work isn't much harder than installing Perl 6, but its a lot faster. You can have rakudobrew take care of this too: [source] ---- $ rakudobrew build zef ---- == Final words And that should be it, you now have a working Perl 6 installation with the zef module manager to take care of installing and upgrading modules. Now you just need to come up with a nice project to work on to start using and learning the wonders of Perl 6. If you need any help on getting started, try the `#perl6` IRC channel on Freenode, or check out some of the Perl 6 documentation and introduction sites: - https://docs.perl6.org/ - http://perl6intro.com/ For starting projects that are easy to start with and can bring quick results, consider making an IRC bot using https://github.com/zoffixznet/perl6-IRC-Client[`IRC::Client`], or a small web application using https://github.com/Bailador/Bailador[`Bailador`].