tREADME.md - uwu - hardware bitcoin wallet software and build system
 (HTM) git clone https://git.parazyd.org/uwu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tREADME.md (4449B)
       ---
            1 uwu
            2 ===
            3 
            4 uwu is a build system and the software for the uwu Bitcoin hardware
            5 wallet.
            6 
            7 ![uwu](res/uwu.png)
            8 
            9 You can donate BTC to support uwu development:
           10 [1Ai71EmjbVBu1QjwKeVEWSG2S1np6VtGEb](bitcoin:1Ai71EmjbVBu1QjwKeVEWSG2S1np6VtGEb)
           11 
           12 Talk about uwu on **irc.oftc.net/#uwu**
           13 
           14 
           15 Table of Contents
           16 =================
           17 
           18    * [uwu](#uwu)
           19       * [Concept](#concept)
           20       * [Building uwu](#building-uwu)
           21          * [Environment setup](#environment-setup)
           22          * [Compiling](#compiling)
           23       * [Hardware](#hardware)
           24          * [Preparation](#preparation)
           25       * [Using uwu](#using-uwu)
           26       * [License and copyright](#license-and-copyright)
           27 
           28 
           29 Concept
           30 -------
           31 
           32 uwu is designed as a Bitcoin hardware wallet for people who are
           33 comfortable with the command line. There are no methods to handhold
           34 you with lousy apps and interfaces, instead, everything is available
           35 to the user and you can utilize the full power of the command line
           36 to work with your wallet.
           37 
           38 Conceptually, uwu is supposed to run securely on a Raspberry Pi
           39 Zero and provide a serial console by utilizing Linux's USB gadget
           40 subsystem. Upon connecting your uwu device to your computer (or maybe
           41 another device like a mobile phone), uwu will appear as a serial
           42 console you can connect to and issue commands.
           43 
           44 uwu's kernel is a minimal build of mainline Linux, with no loadable
           45 module support. Everything that is necessary is compiled in, so
           46 there's no filesystem latency to load modules.
           47 
           48 In the userspace, uwu's backend is
           49 [Electrum](https://github.com/spesmilo/electrum). It runs as a daemon
           50 in offline mode and the user can interface with it by using the serial
           51 console. This means a single uwu device can have as many wallets and
           52 as many users(!) as you want.
           53 
           54 As further development happens, this concept will evolve, and this
           55 document will contain practical usage examples of uwu. Stay tuned!
           56 
           57 
           58 Building uwu
           59 ------------
           60 
           61 This build system's goal is to create a cpio archive that can be
           62 extracted on a microSD card to be used on the Raspberry Pi Zero.
           63 The following sections will explain how to set up the build environment
           64 and will show the necessary configurations.
           65 
           66 ### Environment setup
           67 
           68 First, clone this repository
           69 
           70 ```
           71 $ git clone https://github.com/parazyd/uwu
           72 ```
           73 
           74 After we have it, we can start configuring things. The entire
           75 configuration is done in `config.mk`. We simply need to insert a valid
           76 path to a static `qemu-arm` binary that can be used in the ARM chroot,
           77 and a valid (cross)compiler prefix. The Raspberry Pi Zero needs an
           78 `armv6` architecture compiler. The rest of the variables will be
           79 updated as new software versions are released.
           80 
           81 Further on, we need to setup `binfmt_misc`. Your system's kernel
           82 config should contain `CONFIG_BINFMT_MISC=m` or `CONFIG_BINFMT_MISC=y`.
           83 
           84 On Gentoo/OpenRC:
           85 
           86 ```
           87 # /etc/init.d/qemu-binfmt start
           88 ```
           89 
           90 On Devuan/Debian it should be automagic.
           91 
           92 If all went well, we're done with our build environment and we can
           93 start compiling uwu!
           94 
           95 
           96 ### Compiling
           97 
           98 To compile uwu and get the resulting cpio archive, we can issue
           99 
          100 ```
          101 $ make -j$(nproc)
          102 $ sudo make -j$(nproc) image
          103 ```
          104 
          105 This process can take 20 minutes of crunching, depending on your
          106 hardware. When this is issued, the build system will start downloading
          107 the necessary source code and binaries. It will be compiling the Linux
          108 kernel, and setting up and configuring an Alpine Linux chroot. Once
          109 done, the chroot will be packed and compressed into a cpio archive
          110 which can then be extracted on a microSD card we can use with our
          111 Raspberry Pi Zero.
          112 
          113 
          114 Hardware
          115 --------
          116 
          117 * [Raspberry Pi Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/)
          118 * Class 10 microSD card (128M or more)
          119 * Micro USB cable
          120 
          121 
          122 ### Preparation
          123 
          124 After you've built the image, you should copy it to your microSD card.
          125 Create a VFAT partition on your microSD card and format it:
          126 
          127 ```
          128 # parted /dev/mmcblk0 --script -- mklabel msdos 
          129 # parted /dev/mmcblk0 --script -- mkpart primary fat32 2048s 100%
          130 # mkfs.vfat /dev/mmcblk0p1
          131 ```
          132 
          133 Mount it and extract the cpio archive:
          134 
          135 ```
          136 # mkdir mnt
          137 # mount /dev/mmcblk0p1 mnt
          138 # cd mnt && cpio -i < ../uwu-*.cpio && cd ..
          139 # umount mnt
          140 ```
          141 
          142 With this, you've successfully installed uwu and you're ready to boot.
          143 
          144 
          145 Using uwu
          146 ---------
          147 
          148 TODO
          149 
          150 
          151 License and copyright
          152 ---------------------
          153 
          154 * uwu and its components are licensed with
          155   [GPL-3](https://www.gnu.org/licenses/gpl-3.0.txt).
          156 * Raspberry Pi firmware is licensed from Broadcom Corporation and
          157   Raspberry Pi Ltd.