<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chris Thompson</title>
    <description>The latest articles on DEV Community by Chris Thompson (@yegct).</description>
    <link>https://dev.to/yegct</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F957146%2F1756e8ac-6a22-4a32-981d-9881bd0496ba.jpeg</url>
      <title>DEV Community: Chris Thompson</title>
      <link>https://dev.to/yegct</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yegct"/>
    <language>en</language>
    <item>
      <title>Frame.work laptop after action review</title>
      <dc:creator>Chris Thompson</dc:creator>
      <pubDate>Wed, 09 Nov 2022 18:57:32 +0000</pubDate>
      <link>https://dev.to/yegct/framework-laptop-after-action-review-57pc</link>
      <guid>https://dev.to/yegct/framework-laptop-after-action-review-57pc</guid>
      <description>&lt;p&gt;Back in January of this year, I ordered a &lt;a href="https://frame.work/"&gt;framework laptop&lt;/a&gt;. I use this for programming and more general tasks. This is not a review of the laptop itself; instead, I talk about some hardware problems I ran into.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;I ordered a DIY laptop, meaning I had to assemble the laptop from parts. This was very easy, except for the wifi antenna which was incredibly fiddly. Far easier than the last desktop system I built.&lt;/p&gt;

&lt;p&gt;My specs are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Core i7-1165G&lt;/li&gt;
&lt;li&gt;Intel Wi-Fi 6E AX210 No vPro&lt;/li&gt;
&lt;li&gt;32GB (2 x 16GB) DDR4-3200&lt;/li&gt;
&lt;li&gt;2x USB-A, 2x USB-C, 1x DisplayPort, 1x HDMI&lt;/li&gt;
&lt;li&gt;Framework power adapter&lt;/li&gt;
&lt;li&gt;2 TB SSD, ordered locally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  RAM
&lt;/h3&gt;

&lt;p&gt;One of the two RAM sticks was defective as per &lt;a href="https://www.memtest86.com/"&gt;memtest86&lt;/a&gt;. Framework refused to provide warranty, directing me to the memory manufacturer. They did replace the RAM stick under warranty but took many weeks to ship out the replacement and I had to pay substantial customs fees to have it shipped to Canada. In hindsight, I'd have been much better off ordering the RAM from a local supplier.&lt;/p&gt;

&lt;p&gt;Thankfully, I was able to run the laptop with only a single stick of RAM while waiting for the replacement. Once that arrived, the repair itself was very easy, just a few minutes of work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screen
&lt;/h3&gt;

&lt;p&gt;After a couple of months, the LCD screen stopped working. Text would end up ghosted and there were other graphical problems, too.&lt;/p&gt;

&lt;p&gt;Framework, after reviewing photos and video, shipped out a replacement display kit under warranty. The repair was a little fiddly but far easier than I expected, considering the screen is such a significant part of the laptop.&lt;/p&gt;

&lt;p&gt;Still, this put my laptop out of action for a few days, waiting on the replacement display kit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Battery
&lt;/h3&gt;

&lt;p&gt;There was a bug in the laptop BIOS related to charging. This was &lt;a href="https://knowledgebase.frame.work/en_us/framework-laptop-bios-releases-S1dMQt6F"&gt;fixed in BIOS 3.10&lt;/a&gt; but that came too late for me. My laptop stopped booting in the summer.&lt;/p&gt;

&lt;p&gt;Thankfully, &lt;a href="https://knowledgebase.frame.work/my-laptop-is-not-powering-on-ryQLXvQkt"&gt;framework published a guide&lt;/a&gt; for exactly this situation. I actually had to &lt;a href="https://guides.frame.work/Guide/Fully+Resetting+the+Mainboard+State/113"&gt;fully reset the mainboard state&lt;/a&gt;, meaning opening up the laptop and removing the coin battery.&lt;/p&gt;

&lt;p&gt;Although annoying, I was able to entirely self-serve this one, not even needing to contact framework to discuss my problem. I took the opportunity to upgrade to the latest BIOS version so shouldn't run into this again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expansion cards
&lt;/h3&gt;

&lt;p&gt;I really like the swappable expansion cards. I can run a mix of USB-A and USB-C ports along with a hookup for an external monitor.&lt;/p&gt;

&lt;p&gt;In hindsight, I wish I had ordered 3x USB-C and 3x USB-A. As the laptop charges via a USB-C port, I sometimes wish I had one more.&lt;/p&gt;

&lt;p&gt;So I ordered an extra USB-A and USB-C expansion card. Also, the newly-released ethernet port as I figure that may come in useful from time to time. Really handy to change my ports so many months after buying the laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  OS
&lt;/h3&gt;

&lt;p&gt;I dual-boot Windows 10 and Linux Mint. I also boot other Linux distributions off of USB sticks, including &lt;a href="https://www.kali.org/"&gt;Kali Linux&lt;/a&gt; and &lt;a href="https://cemaxecuter.com/"&gt;DragonOS&lt;/a&gt;. I wanted a laptop that would properly support Linux running natively, instead of in a VM. I do most of my programming in Linux and need it to just work. I'd have been okay running Kali or DragonOS in a VM but I'm happy they work natively, too. Still, this was a deciding factor in ordering more USB expansion cards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Concluding thoughts
&lt;/h3&gt;

&lt;p&gt;I'm not thrilled with the hardware failures. The RAM was surprisingly hard to get replaced and in hindsight, I wish I had ordered that separately from the laptop.&lt;/p&gt;

&lt;p&gt;Still, only one of the three issues (the display issue) took the laptop offline for any significant amount of time, and then only for a few days. The laptop itself is an absolute joy to physically work on. Plenty of other manufacturers would have dealt with the issues by demanding I ship the laptop back to them.&lt;/p&gt;

&lt;p&gt;The framework laptop isn't the right choice for everyone. But if you've ever assembled a desktop computer from components, you'll find yourself right at home with this laptop.&lt;/p&gt;

</description>
      <category>laptop</category>
    </item>
    <item>
      <title>Hashcat cracking pwnagotchi pcap files</title>
      <dc:creator>Chris Thompson</dc:creator>
      <pubDate>Wed, 02 Nov 2022 14:53:43 +0000</pubDate>
      <link>https://dev.to/yegct/hashcat-cracking-pwnagotchi-pcap-files-4fh2</link>
      <guid>https://dev.to/yegct/hashcat-cracking-pwnagotchi-pcap-files-4fh2</guid>
      <description>&lt;p&gt;Once you've collected enough crackable WPA material with your &lt;a href="https://pwnagotchi.ai/"&gt;pwnagotchi&lt;/a&gt;, it's time to attack it with hashcat.&lt;/p&gt;

&lt;p&gt;Pwnagotchi stores the handshakes as &lt;code&gt;.pcap&lt;/code&gt; files, while modern versions of hashcat use hash mode 22000. No problem, it's easy to convert between the two. On Kali or Ubuntu or Mint, install the &lt;code&gt;hcxtools&lt;/code&gt; as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install hcxtools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, in the directory with all the &lt;code&gt;.pcap&lt;/code&gt; files you have permission to attack, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hcxpcapngtool *.pcap -o candidates.hc22000 -E essid.wordlist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This converts all the &lt;code&gt;.pcap&lt;/code&gt; files into a single output file, &lt;code&gt;candidates.hc22000&lt;/code&gt;. We also extract the list of essids (network name), as these might be useful in your cracking attempt.&lt;/p&gt;

&lt;p&gt;Now we need hashcat. If you are running Kali, hashcat is probably already installed. If not, or if you are running Ubuntu or Mint, you can install it with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install hashcat hashcat-data
# If you have an nvidia graphics card:
sudo apt-get install hashcat-nvidia
# Check if the install worked, run a benchmark
hashcat -m 22000 --benchmark
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Right. Let's attack the handshakes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hashcat -m 22000 candidates.hc22000 /usr/share/doc/hashcat-data/examples/example.dict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells hashcat to run in &lt;a href="https://hashcat.net/wiki/doku.php?id=cracking_wpawpa2"&gt;hash mode 22000&lt;/a&gt;, for cracking the WPA pre-shared key. We attack &lt;code&gt;candidates.hc22000&lt;/code&gt; and we use the example wordlist in &lt;code&gt;/usr/share/doc/hashcat-data/examples/example.dict&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can see if hashcat was successful with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hashcat -m 22000 candidates.hc22000 --show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No successes? Don't worry, here are some other attacks to try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Try all telephone numbers in your area code:
hashcat -m 22000 candidates.hc22000 -a 3 780?d?d?d?d?d?d?d
# Try the essids:
hashcat -m 22000 candidates.hc22000 essid.wordlist
# Permutate the example wordlist and the essids with a ruleset
hashcat -m 22000 candidates.hc22000 /usr/share/doc/hashcat-data/examples/example.dict essid.wordlist -r /usr/share/hashcat/rules/best64.rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that was not successful, you may want to try other wordlists. In Kali, there are a few in &lt;code&gt;/usr/share/wordlists&lt;/code&gt;. Alternatively, there are plenty available online. A good list to start with is the rockyou wordlist, though it is rather large.&lt;/p&gt;

&lt;p&gt;Remember, hashcat runs much faster if you throw a GPU (or three) at it. A modern nVidia Geforce RTX 4090 may crack 2500 kH/sec. A 3080 might get 900 kH/sec. Running just on the CPU without any GPU may only net you 25 kH/sec, though. That's fine for quick checks and small wordlists but much too slow for anything more significant.&lt;/p&gt;

&lt;p&gt;What's next? Hashcat is a powerful tool, allowing significant control over the attacks. The &lt;a href="https://hashcat.net/wiki/"&gt;hashcat wiki&lt;/a&gt; has lots of helpful information.&lt;/p&gt;

&lt;p&gt;Happy cracking!&lt;/p&gt;

</description>
      <category>pwnagotchi</category>
      <category>hashcat</category>
      <category>security</category>
      <category>linux</category>
    </item>
    <item>
      <title>Reduce disk writes for Ubuntu, save your USB stick</title>
      <dc:creator>Chris Thompson</dc:creator>
      <pubDate>Mon, 31 Oct 2022 15:28:33 +0000</pubDate>
      <link>https://dev.to/yegct/reduce-disk-writes-for-ubuntu-save-your-usb-stick-44jb</link>
      <guid>https://dev.to/yegct/reduce-disk-writes-for-ubuntu-save-your-usb-stick-44jb</guid>
      <description>&lt;p&gt;I run a few Ubuntu/Mint distributions off of USB sticks (for example, &lt;a href="https://dev.to/yegct/dragonos-lubuntu-on-usb-with-persistent-storage-6jc"&gt;DragonOS&lt;/a&gt;) and want to reduce the number of writes to the USB stick. My laptop has plenty of RAM so I'll make use of that.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/tmp&lt;/code&gt; to ramdisk
&lt;/h3&gt;

&lt;p&gt;No need to keep temporary files around between reboots. Storing this in RAM instead of on disk is really easy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable /usr/share/systemd/tmp.mount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, this uses half my RAM. I can edit that file if I want to use less; 50% is probably overkill. Reboot your machine once you've made your changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/var/log&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Log files are a bit trickier. I want these to stick around between reboots, so just storing them on a ramdisk wouldn't really work. Thankfully, &lt;a href="https://github.com/azlux/log2ram/"&gt;&lt;code&gt;log2ram&lt;/code&gt;&lt;/a&gt; solves this problem. Written primarily for Raspberry Pi machines, it works fine on x86-64 laptops. This stores &lt;code&gt;/var/log&lt;/code&gt; in RAM but will sync the contents to disk from time to time, ideal for our needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg  https://azlux.fr/repo.gpg
sudo apt update
sudo apt install log2ram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reboot your machine once log2ram is installed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Firefox
&lt;/h3&gt;

&lt;p&gt;The Firefox browser caches data to disk. I'm happy setting aside a bit of RAM for this instead. In the URL bar, type &lt;code&gt;about:config&lt;/code&gt;. Acknowledge the warning, then in the filter bar, enter &lt;code&gt;browser.cache&lt;/code&gt;. You want to change the &lt;code&gt;browser.cache.disk.enable&lt;/code&gt; setting from &lt;code&gt;true&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; (double-click on the setting to change it), ensure &lt;code&gt;browser.cache.memory.enable&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt; (the default value), and then modify &lt;code&gt;browser.cache.memory.capacity&lt;/code&gt; from the default value of &lt;code&gt;-1&lt;/code&gt; to &lt;code&gt;1048576&lt;/code&gt;, allocating 1GB of RAM to the cache.&lt;/p&gt;

&lt;p&gt;Close down and restart Firefox for the settings to take effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  More reading
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://easylinuxtipsproject.blogspot.com/p/ssd.html"&gt;Easy Linux Tips&lt;/a&gt; has some other suggestions based around SSDs rather than USB sticks. Limiting swappiness may be worth considering if your computer regularly hits swap. Setting &lt;code&gt;noatime&lt;/code&gt; may be helpful, too.&lt;/p&gt;

&lt;p&gt;What settings have you found useful?&lt;/p&gt;

</description>
      <category>usb</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Pwnagotchi, waveshare 2.13v3, pisugar 3</title>
      <dc:creator>Chris Thompson</dc:creator>
      <pubDate>Sun, 30 Oct 2022 12:21:19 +0000</pubDate>
      <link>https://dev.to/yegct/pwnagotchi-waveshare-213v3-pisugar-3-52cn</link>
      <guid>https://dev.to/yegct/pwnagotchi-waveshare-213v3-pisugar-3-52cn</guid>
      <description>&lt;p&gt;I recently built a couple of &lt;a href="https://pwnagotchi.ai/"&gt;pwnagotchi&lt;/a&gt; devices. These devices grab wifi handshakes for later cracking, so should only be used on wifi networks you have permission to attack.&lt;/p&gt;

&lt;p&gt;The latest version of pwnagotchi is v1.5.5, but this lead to some problems. This supports the Waveshare 2.13" v2 eInk display, but I could only find the v3 for sale. I also wanted to use the PiSugar 3 battery/UPS which is not natively supported. Finally, the 1.5.5 version can not switch from &lt;code&gt;AUTO&lt;/code&gt; to &lt;code&gt;AI&lt;/code&gt; mode. Here's how I solved all these issues.&lt;/p&gt;

&lt;p&gt;The Waveshare 2.13" v3 eInk display support was the easiest fix. Instead of using the official pwnagotchi image, I used the alternate image referenced in &lt;a href="https://github.com/evilsocket/pwnagotchi/pull/1069#issuecomment-1161385537"&gt;this comment&lt;/a&gt;, &lt;a href="https://archive.org/details/pwnagotchi_1.5.5_WSV3Patched"&gt;the pwnagotchi_1.5.5_WSV3Patched image&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Supporting the PiSugar 3 battery pack is a bit more work. Sign in to the pwnagotchi via ssh, then follow the instructions at &lt;a href="https://github.com/taiyonemo/pwnagotchi-plugin-pisugar3"&gt;taiyonemo/pwnagotchi-plugin-pisugar3&lt;/a&gt;. In my case, I did this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Become root
sudo -i
# Copy the pisugar 3 file into the right location
cd /usr/local/lib/python3.7/dist-packages/pwnagotchi/plugins/default
wget https://raw.githubusercontent.com/taiyonemo/pwnagotchi-plugin-pisugar3/main/pisugar3.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, I wanted to run the PiSugar power management software so I followed &lt;a href="https://github.com/PiSugar/PiSugar/wiki/PiSugar-3-Series"&gt;the official instructions&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl http://cdn.pisugar.com/release/pisugar-power-manager.sh | sudo bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should then be able to load the settings page in your browser by going to &lt;a href="http://10.0.0.2:8421"&gt;http://10.0.0.2:8421&lt;/a&gt;. I turned on &lt;code&gt;Safe Shutdown&lt;/code&gt; with a &lt;code&gt;Battery Level &amp;lt;= 20%&lt;/code&gt;, then went in to &lt;code&gt;Settings&lt;/code&gt; and enabled &lt;code&gt;Battery Input Protection&lt;/code&gt;, ensured &lt;code&gt;Soft Shutdown&lt;/code&gt; was enabled, and set &lt;code&gt;Soft Shutdown Shell&lt;/code&gt; to &lt;code&gt;Shutdown&lt;/code&gt;. Now's a good time to update the firmware, too.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl https://cdn.pisugar.com/release/PiSugarUpdate.sh | sudo bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I modified &lt;code&gt;/boot/config.txt&lt;/code&gt; by adding the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# If running Pi 4, downclock for more battery.
# No point on the Pi 0.
arm_freq=800

# Enable real-time clock
dtoverlay=i2c-rtc,ds3231
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's take a look at my &lt;code&gt;/etc/pwnagotchi/config.toml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# General config
main.name = "pwnagotchi4"
main.lang = "en"

main.plugins.grid.enabled = true
main.plugins.grid.report = false

# PiSugar 3 UPS
main.plugins.pisugar3.enabled = true
main.plugins.pisugar3.shutdown = 15

# eInk display
ui.display.enabled = true
ui.display.type = "waveshare_3"
ui.display.color = "black"

# Reduce writes to SD card
fs.memory.mounts.log.enabled = true     # switch
fs.memory.mounts.log.mount = "/var/log" # which directory to map into memory
fs.memory.mounts.log.size = "50M"       # max size to put into memory
fs.memory.mounts.log.sync = 600         # interval in seconds to sync back onto disk
fs.memory.mounts.log.zram = true        # use zram for compression (recommended)
fs.memory.mounts.log.rsync = true       # use rsync to copy only the difference (recommended)

# ignore networks
main.whitelist = [
  "your network here",
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This leaves one remaining problem. The pwnagotchi won't switch into &lt;code&gt;AI&lt;/code&gt; mode. Running &lt;a href="https://github.com/evilsocket/pwnagotchi/blob/master/scripts/linux_connection_share.sh"&gt;&lt;code&gt;linux_connection_share.sh&lt;/code&gt;&lt;/a&gt; on my laptop to ensure the pwnagotchi has Internet access, I ssh in to the pwnagotchi and update &lt;code&gt;numpy&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pip3 install --upgrade numpy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the Raspberry Pi 0, this takes several hours. It's a bit faster on the Pi 4 but still takes a while. Once the update is complete, reboot and give it about twenty minute and you should see the pwnagotchi switch into AI mode.&lt;/p&gt;

&lt;p&gt;Phew, we are done!&lt;/p&gt;

</description>
      <category>security</category>
      <category>pwnagotchi</category>
    </item>
    <item>
      <title>DragonOS (lubuntu) on USB with persistent storage</title>
      <dc:creator>Chris Thompson</dc:creator>
      <pubDate>Sat, 29 Oct 2022 19:49:45 +0000</pubDate>
      <link>https://dev.to/yegct/dragonos-lubuntu-on-usb-with-persistent-storage-6jc</link>
      <guid>https://dev.to/yegct/dragonos-lubuntu-on-usb-with-persistent-storage-6jc</guid>
      <description>&lt;p&gt;&lt;a href="https://cemaxecuter.com/"&gt;DragonOS&lt;/a&gt; is a &lt;a href="https://lubuntu.net/"&gt;Lubuntu&lt;/a&gt;-based Linux distribution for software-defined radio. The x86-64 version runs well from a USB stick. However, I wanted persistent storage. That is, I wanted to be able to save files and change configuration settings and have these stick around when I next booted DragonOS.&lt;/p&gt;

&lt;p&gt;I couldn't get this to happen with Rufus or Balena Etcher. I had a preexisting install of Linux and found mkusb worked perfectly. I tested these steps with both Ubuntu (22.04.1 LTS) and Mint (21, Cinnamon). The instructions for mkusb are &lt;a href="https://help.ubuntu.com/community/mkusb"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Enable the universe repository
sudo add-apt-repository universe
# Add the mkusb PPA
sudo add-apt-repository ppa:mkusb/ppa
sudo apt update
# Install mkusb
sudo apt install mkusb
sudo apt install usb-pack-efi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that mkusb is installed, the process is fairly straight-forward. When you start it up, you have the choice of user interface. I picked &lt;code&gt;p, Plug&lt;/code&gt; for the new UI. Now, &lt;code&gt;p, Persistent live drive&lt;/code&gt; because that's the whole point. mkusb can't quite figure out that DragonOS is based on Lubuntu, so I tell it &lt;code&gt;u, Ubuntu&lt;/code&gt;. The rest of the process takes a few minutes.&lt;/p&gt;

&lt;p&gt;Reboot to test the results. The process should work the same as booting the non-persistent version. The first boot takes a little time to rearrange the file system. Once DragonOS is up, test the persistence by creating a small file in the home directory, then reboot and see if the file is still there.&lt;/p&gt;

&lt;p&gt;That's it. Enjoy your persistent live USB install!&lt;/p&gt;

</description>
      <category>dragonos</category>
      <category>linux</category>
      <category>usb</category>
    </item>
  </channel>
</rss>
