Category Archives: How-to

How To Customize Your Terminal Prompt

This is a bit of a goofy hack, but some of the options can be useful if you need a little more information on your terminal prompt. Basically, I’m using it to put a Space Invader as my command prompt.screen-shot-2016-11-07-at-10-02-38-pmThis technique is for OSX/MacOS, but it will likely work on various Linux distros as they share a common terminal shell implementation.

In Terminal, open the .bash_profile file using the nano text editor
sudo nano .bash_profile

Add a new line containing the following code:
PS1=" "

Inside the quotes, you could add nearly anything you want. There are a handful of official switches that generate specific outputs:

  • \d Current Date
  • \t Current Time
  • \h Host Name
  • # Command Number
  • \u User Name
  • \W Current Working Directory (/Folder)
  • \w Current Working Directory, Full Path (~/Desktop/Folder)

Now, if you want to drop a Space Invader inside the quotes, just add it (or any other emoji) from the Edit>Emoji & Symbols menu.

How To Increase WordPress Max Upload Size

I’ve got a major organizational project underway, going through my archives and building new websites for old projects to migrate everything under the AirborneSurfer.com domain. As such, I started to build a new website for the old Afterburn podcast, but I couldn’t upload the 15MB MP3 files because of the silly 2MB WordPress max upload size.

Increase WordPress Max Upload Size
“No one will ever upload a file over 2MB! That’s absurd!”

I started by digging through the plugin “store”, trying  a few “upload enhancer” plugins that only gave lip service to the larger upload size. To actually increase WordPress max upload size, you’ll need to do a little editing on the back end. Open a text editor and create a file named php.ini, then add the following lines of code:

memory_limit = 100M
upload_max_filesize = xxM
post_max_size = xxM
file_uploads = On

Where xx denotes your desired file size in MB. 100 is a safe number in most cases, but note that your max_post_size value must be larger than your upload_max_filesize value otherwise you’ll have some heartache when you try to publish a post with one of those large files embedded in it! Save the file and upload it to your the wp-admin folder in your WordPress directory. It couldn’t be much simpler.

How to schedule a task in Linux

Sometimes, you need a task to run at a particular time on a particular schedule. For Project Spoofy, I need the Raspberry Pi to reboot periodically so that any new photos added to ownCloud will be subsequently added to the fbi slideshow. For simplicity, I’m going to schedule a task in Linux to reboot the Pi each night at about 2:30AM, so no one should be affected by the short break in the slideshow.

Schedule a task in Linux

To schedule a task in Linux, use the cron utility to define the schedule as well as the command to be executed. Cron has to be edited by the root account, so a standard user (pi) would need to execute the following command:

cron -e -u root

If logged in as root already, simply execute cron -e

Debian will ask which utility to use to edit the crontab file; I prefer using nano as with everything else. Once the crontab file is open in nano, you will see some information as well as some example formatting. Basically, every task should exist on a separate line starting with the scheduling:
┌───────────── min (0 – 59)
│ ┌────────────── hour (0 – 23)
│ │ ┌─────────────── day of month (1 – 31)
│ │ │ ┌──────────────── month (1 – 12)
│ │ │ │ ┌───────────────── day of week (0 – 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ │ │
│ │ │ │ │
* * * * * command to execute
To reboot at 2:30AM every day, the following line must be appended to the end of the file:

30 2 * * * /sbin/shutdown -r now

The biggest thing to remember is ensuring that the time and time zone are correct. As a pilot, I understand the importance of UTC (or Zulu) time for coordinating across time zones, so I prefer to keep my remote machines set to UTC and do the math accordingly!

How to Automatically Run a Linux Command on Boot

For Project Spoofy, once we’re automatically logged into the Raspberry Pi, we need to execute the commands to run the DDNS update client and the slideshow. It’s a simple process to automatically run a linux command on boot in Debian: just add the command(s) to the end of the .bashrc file in the user’s home folder.

sudo nano ~/.bashrc

How to Automatically Login to Linux

For Project Spoofy, I’m using fbi to pull photos from ownCloud and display them automatically on screen with no further input. In order to do this properly, the system must automatically login to Linux without a password. What’s more, I need the system to login as root so that fbi will have access to the proper folders to display images. Since we’re working on a Raspberry Pi, note that these instructions are specific to Debian and it’s derivatives.

How to automatically login to Linux

To do this, we simply need to edit the getty@.service file

sudo nano /lib/systemd/system/getty@.service

Then change the file that reads ExecStart=-/sbin/agetty --noclear %I $TERM to ExecStart=-/sbin/agetty --noclear -a USERNAME %I $TERM

Adding the -a option will enable autologin for the USERNAME that follows, so -a root will automatically login to the root account.

Create a Linux slideshow using fbi

Fbi (Frame Buffer Imageviewer, not that other FBI) is a great lightweight Linux slideshow viewer that’s executable from the command line. It’s super simple to install, too:

sudo apt-get install fbi

Fbi will take any file or folder you specify in the command and create a slideshow. All the parameters are specified in the command line, for example:

fbi -noverbose -a -u -t 180 /PATH/TO/PHOTOS/*.jpg

For Project Spoofy, I’m going to point the fbi path to the ownCloud installation, but there’s a hitch: ownCloud has strict permissions, so it can only be accessed by root. In order to run fbi, we’ll need to run it as root. We can’t do this through sudo, though, as that only elevates privileges of the current user (pi). We’ll have to enable the root account either by logging in or by invoking the sudo -i command.

For more information on the fbi application, check out the manpage here.

How To Set Up Dynamic DNS Using No-IP on Raspberry Pi

Now that we have a working ownCloud installation on our Raspberry Pi, we need a way to be able to remotely access the device from across the internet. Knowing the IP address and forwarding the appropriate ports on the router is only part of the story: most residential ISPs will periodically change the external IP address of their customers for logistical reasons that we won’t get into here (it’s a matter of traditional infrastructure limitations and convenience for the ISP). We’re going to need a way to automatically keep track of the IP address of the device as it potentially changes; as a fortuitous consequence, we’re going to be able to get an easy-to-remember URL in exchange. To do all this, we’re going to set up dynamic DNS using No-IP on Raspberry Pi.

No-IP is a service that allows you to assign a static domain name to a dynamic IP address. Their basic level of service is free, but only affords a limited selection of domains and has to be renewed every 30 days. There are paid offerings available with more features, but for our purposes, we’ll stick with the free product. To get started, sign up for an account at www.noip.com. Once logged into your account, click the “Add a Host” button and fill in the appropriate information: choose a domain, host type [which should be DNS Host (A)], and the external IP address for the network to which the Raspberry Pi is connected. Click the “Add Host” button at the bottom, and then it’s time to set up the client on the RPi.

Using No-IP on Raspberry PI

On the Raspberry Pi, open a terminal session. The first thing we’ll need is a directory to install the Dynamic Update Client. Type mkdir /home/pi/noip and press enter, then navigate to the directory by typing cd /home/pi/noip.

Download the client by typing wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz then unzar the archive file by invoking tar vzxf noip-duc-linux.tar.gz and enter the newly written directory with cd noip-2.1.9-1

Now we can install the client using sudo make and then sudo make install. During the installation process, you will be asked for your NoIP credentials as well as your preferred refresh interval (in minutes). Enter them when prompted, then wait for the setup to complete.

Once the installation is complete, run the client by invoking sudo /usr/local/bin/noip2. You can always check on the status of the client by invoking sudo noip2 -S (for status!)

Port Forwarding

Now, all you have to do is set up port forwarding on your router to point port 80 to the Raspberry Pi. Every router’s instructions are going to be slightly different, so check your particular model’s documentation. My Linksys router hides the port forwarding options under the security section and the “Apps and gaming” section. If you make sure that HTTP (port 80) points to the internal IP address for the  RPi, you should be able to navigate to the domain you previously set up on No-IP and reach the default Apache information page. If you get this page, everything is working!