npm package: @mattb.tech/kindle-writer
Description: A tool for using a Kindle as a typewriter
Author: Matt Benton
Latest version: 0.5.0
Deprecated: moved to @mattb.tech/eretti

# Kindle-Writer

## TODO

- Photo of setup
- Make video of usage
- Usage guide
- Setup script that installs software etc.

## Items Required

- Raspberry Pi 3 B+
- USB Power pack and cable
- MicroSD card and adapter to plug into laptop
- Ethernet cable (to get started only)
- Laptop (all instructions here for Mac OS X laptop)

## Setup

### Tiny Core Install

First we need to install the base Tiny Core Linux system onto the MicroSD card. When I plug the SD card into my laptop it comes in as `/dev/disk3`, but **please be aware that it may come up as something else on your system. If you blindly follow the commands below you will wipe /dev/disk3 on your system.**

For the commands below to work you need to click to "eject" the MicroSD card you've plugged in to your laptop, otherwise it will complain: `dd: /dev/disk3: Resource busy`.

```
$ cd `mktemp -d`
$ wget http://www.tinycorelinux.net/11.x/armv7/test_releases/RPi/piCore-11.0beta1a.zip
$ unzip piCore-11.0beta1a.zip
$ sudo dd bs=4m if=piCore-11.0beta1a.img of=/dev/disk3
```

### First Boot

Put the SD card in the Raspberry Pi, and boot it for the first time by connecting it to a USB power pack (or other USB power source). Connect up an Ethernet cable to get on the Internet as well.

You should be able to SSH into the machine after a few seconds. The password will be `piCore`.

```
$ ssh tc@box
```

First things first run...

```
tc@box:~$ filetool.sh -b
```

This will backup the current content of the system onto the SD card, which means the newly generated SSH keys will be the same next time you connect, avoiding grizzly security warnings.

### Setting up partitions

Then we want to enter the interactive mode of `fdisk` to fiddle around with the partitions. We are aiming to (1) expand the size of the second partition which will store the software and (2) create another partition just to store our writing.

```
tc@box:~$ sudo fdisk -u /dev/mmcblk0
```

Start by entering `p`. This will output something like this...

```
Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk0p1    43,4,3      1023,37,5         8192     195692     187501 91.5M  6 FAT16
/dev/mmcblk0p2    1023,37,5   1023,37,5       195693     351943     156251 76.2M 83 Linux
```

Note down the `StartLBA` of `/dev/mmcblk0p2` as we're going to need it later.

Next we want to delete the second partition. Enter `d` and then `2`. Then we want to create a new primary partition in its place. Enter `n`, `p` and then `2`. Then for the "First sector" enter the `StartLBA` number we noted down earlier. Enter `+1024M` giving us a generous 1Gb of storage space for our application.

We use a "linux" format for this second partition by entering `t` then `2` then `83`.

Again, we'll want to enter `p` to see the work we've done so far. This time note down the `EndLBA` of `/dev/mmcblk0p2`.

We follow a similar process to create the third partition. Enter `n`, `p`, and then `3`. For the "First sector" enter the `EndLBA` we've noted down plus one. We can accept the default for the end sector to go to the end of our SD card.

To make it easy to get the writing off on multiple machines we want to make this partition easily readable. We make it FAT32 to do so. Enter `t`, `3`, `b`.

With all this done we want to enter `w` to write the changes.

Reboot before the next steps.

```
tc@box:~$ sudo reboot
```

Once you've SSH'd back in.

```
tc@box:~$ sudo resize2fs /dev/mmcblk0p2
tc@box:~$ sudo mkfs.vfat -F 32 -n KindleWriter /dev/mmcblk0p3
```

Setup our output filesystem to mount on boot

```
tc@box:~$ echo "mkdir /mnt/kindlewriter && mount -t vfat /dev/mmcblk0p3 /mnt/kindlewriter -o rw,umask=000" >> /opt/bootlocal.sh
tc@box:~$ filetool.sh -b
```

### Install Prerequisites

Install tcz using tce-load

```
tc@box:~$ tce-load -wi screen firmware-rpi-wifi wifi wireless_tools libnl
```

Install node

```
tc@box:~$ wget https://nodejs.org/dist/v14.3.0/node-v14.3.0-linux-armv7l.tar.xz
tc@box:~$ tar xf node-v14.3.0-linux-armv7l.tar.xz
tc@box:~$ PATH=$PATH:~/node-v14.3.0-linux-armv7l/bin
```

Hostapd hasn't been built for TinyCoreLinux 11.x, but we can use the build for TinyCoreLinux 10.x.

```
tc@box:~$ wget http://www.tinycorelinux.net/10.x/armv7/tcz/hostapd.tcz http://www.tinycorelinux.net/10.x/armv7/tcz/hostapd.tcz.dep http://www.tinycorelinux.net/10.x/armv7/tcz/hostapd.tcz.md5.txt -P /mnt/mmcblk0p2/tce/optional/
tc@box:~$ echo "hostapd.tcz" >> /mnt/mmcblk0p2/tce/onboot.lst
```

### Install Software

Now that we've got those prerequisites sorted, we can install the Kindle-Writer software

```
tc@box:~$ npm install @mattb.tech/kindle-writer
tc@box:~$ node_modules/.bin/kindle-writer-install-home
```

After running the second command, the system will always start directly into a screen session running the Kindle-Writer server.

To configure the device as a Wifi Access Point...

```
tc@box:~$ echo "/home/tc/start_wifi.sh &" >> /opt/bootlocal.sh
```

Save all your changes

```
tc@box:~$ filetool.sh -b
```

## Upgrading

You can grab the latest version just by reinstalling `@mattb.tech/kindle-writer`. SSH in, start a new window in screen with `Ctrl+a Ctrl+c` and then run

```
tc@box:~$ npm install @mattb.tech/kindle-writer
tc@box:~$ node_modules/.bin/kindle-writer-install-profile
tc@box:~$ filetool.sh -b
```