<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Debian-Blog on RESEARCHUT</title><link>https://researchut.com/categories/debian-blog/</link><description>Recent content in Debian-Blog on RESEARCHUT</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>rrs@researchut.com (Ritesh Raj Sarraf)</managingEditor><webMaster>rrs@researchut.com (Ritesh Raj Sarraf)</webMaster><lastBuildDate>Sat, 20 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://researchut.com/categories/debian-blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Immutable Debian</title><link>https://researchut.com/blog/Immutable_Atomic_Debian/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Immutable_Atomic_Debian/</guid><description>&lt;h2 id="immutable-atomic-linux-distirbutions">Immutable Atomic Linux Distirbutions&lt;/h2>
&lt;p>Of late, I&amp;rsquo;ve been hearing a lot of (good) things about Immutable Linux
Distributions, from friends, colleagues and mentors. It has been
something on my plate for some time, to explore. But given the nature of
the subject, it has been delayed for a while. Reasons are simple; I can
only really judge this product if I use it for some time; and it has to
be on my primary daily driver machine.&lt;/p>
&lt;p>Personal life, this year, has been quite challenging as well. Thus it got pushed to until now.&lt;/p>
&lt;h3 id="chrome-os">Chrome OS&lt;/h3>
&lt;p>I&amp;rsquo;ve realized that I&amp;rsquo;ve been quite late to a lot of Linux parties.
Containers, Docker, Kubernetes, Golang, Rust, Immutable Linux and many
many more.&lt;/p>
&lt;p>Late to the extent that I&amp;rsquo;ve had a Chrome Book lying at home for many
months but never got to tinker with it at all.&lt;/p>
&lt;p>Having used it for just around 2 weeks now, I can see what a great
product Google built with it. In short, this is exactly how a Linux
desktop integration should be. The GUI integration is just top notch.
There&amp;rsquo;s consistency across all applications rendered on the Chrome OS&lt;/p>
&lt;p>The integration of [X]Wayland and friends is equally good. Maybe Google
should consider opensourcing all those components. IIRC, exo,
sommelier, xwayland, ash and many more.&lt;/p>
&lt;p>I was equally happy to see their &lt;code>Linux Development Environment&lt;/code>
offering on supported hardware. While tightly integrated, it still
allows power users to tinker things around. I was quite impressed to see
nested containers in &lt;code>crostini&lt;/code>. Job well done.&lt;/p>
&lt;p>All of this explains why there&amp;rsquo;s much buzz about &lt;code>Immutable Atomic Linux Distributions&lt;/code> these days.&lt;/p>
&lt;p>Then, there&amp;rsquo;s the Android integration, which is just awesome in case you
care of it. Both &lt;code>libndk&lt;/code> and &lt;code>libhoudini&lt;/code> are well integrated and
nicely usable.&lt;/p>
&lt;h3 id="immutable-linux-distributions">Immutable Linux Distributions&lt;/h3>
&lt;p>This holiday season I wanted to find and spend some time catching up on
stuff I had been prolonging.&lt;/p>
&lt;p>I chose to explore this subject while trying to remain in familiar
Debian land. So my first look was to see if there was any product
derived out of the Debian base.&lt;/p>
&lt;p>That brought me to &lt;code>Vanilla OS Orchid&lt;/code>. This is a fresh out of oven
project, recently switched to being based on Debian Sid. Previous
iteration used Ubuntu as the base.&lt;/p>
&lt;p>Vanilla OS turned out to be quite good an experience. The stock
offering is created well enough to serve the general audience. And the
framework is such wonderfully structured that seasoned users can tinker
around with it, without much fuss.&lt;/p>
&lt;p>Vanilla OS uses an A/B Partition model for how system updates are
rolled. At any point, when a new OTA update is pushed, it gets applied
to the inactive A/B partition. And it gets activated at next boot. If things
break, user has the option to switch to the previous state. Just the
usual set of expectations one would have with an immutable distribution.&lt;/p>
&lt;p>What they&amp;rsquo;ve done beautifully is:&lt;/p>
&lt;ul>
&lt;li>Integration Device Mapper LVM for A/B Partition&lt;/li>
&lt;li>Linux Container OCI images to provison/flash A/B Paritions&lt;/li>
&lt;li>Developed &lt;code>abroot&lt;/code> utility for A/B Partition management&lt;/li>
&lt;li>APX (Distrobox) integration for container workflows, with multiple Linux flavors&lt;/li>
&lt;li>No &lt;code>sudo&lt;/code>. Everything done via &lt;code>pkexec&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>But the most awesome thing I liked in Vanilla OS is &lt;a href="https://github.com/rickysarraf/custom-image">custom images&lt;/a>. This allows power users to easily tinker with the developer workflow and generate new images, tailored for their specific use cases. All of this done levraging the GitHub/GitLab CI/CD workflows, which I think is just plain awesome. Given that payload is of the OCI format, the CICD workflow just generates new OCI images and publishes to a registry. And then the same is pulled to the client as an OTA.&lt;/p>
&lt;p>Hats off to this small team/community for doing such nice integration
work, ultimately producing a superb Immutable Atomic Linux Distribution
based on the Debian base.&lt;/p>
&lt;h3 id="immutable-linux">Immutable Linux&lt;/h3>
&lt;p>My primary work machine has grown over the years, being on the rolling
Debian Testing/Unstable channel. And I don&amp;rsquo;t much feel the itch ever to
format my (primary) machine so quick, no matter how great the counter
offer is.&lt;/p>
&lt;p>So that got me wondering how to have some of bling of the immutable
world that I&amp;rsquo;ve tasted (Thanks Chrome OS and Vanilla OS). With a fair
idea of what they offer in features, I drew a line to what I&amp;rsquo;d want on
my primary machine.&lt;/p>
&lt;ul>
&lt;li>read-only rootfs&lt;/li>
&lt;li>read-only /etc/&lt;/li>
&lt;/ul>
&lt;p>This also kinda hardens my systems to an extent that I can&amp;rsquo;t
accidentally cause catastrophic damage to it.&lt;/p>
&lt;p>The feature I&amp;rsquo;m letting go of is the A/B Partition (rpm-ostree for Fedora
land). While a good feature, having to integrate it into my current
machine is going to be very very challenging.&lt;/p>
&lt;p>I actually feel that, the core assumption the Immutable Distros make,
that all hardware is going to &lt;code>Just Work&lt;/code>, is flawed. While Linux has
substantially improved over the past years, there&amp;rsquo;s still a hit/miss
when introducing very recent hardware.&lt;/p>
&lt;p>Immutable Linux is targeted for the novice user, who won&amp;rsquo;t accidentally
mess with the system. But what would the novice user do in case they
have issues with their recently purchased hardware, that they are
attempting to run (Immutable) Linux on.&lt;/p>
&lt;h3 id="riteshs-immutable-debian">Ritesh&amp;rsquo;s Immutable Debian&lt;/h3>
&lt;p>With the premise set, on to sailing in immutable land.&lt;/p>
&lt;p>There&amp;rsquo;s another ground breaking innovation that has been happening;
which I think everyone is aware of. And may be using it as well, direct
or indirect.&lt;/p>
&lt;p>&lt;em>Artificial Intelligence&lt;/em>&lt;/p>
&lt;p>While I&amp;rsquo;ve only been a user for a couple of months as I draft this post,
I&amp;rsquo;m now very much impressed with all this innovation. Being at the
consumer end has me appreciating it for what it has offered thus far.
And I haven&amp;rsquo;t even scratched the surface. I&amp;rsquo;m making attempts at
developing understanding of &lt;em>Machine Learning&lt;/em> and &lt;em>Artificial
Intelligence&lt;/em> but there&amp;rsquo;s a looonnngg way to go still.&lt;/p>
&lt;p>What I&amp;rsquo;m appreciating the most is the availability of the AI Technology.
It has helped me be more efficient. And thus I get to use the gain
(time) with family.&lt;/p>
&lt;p>To wrap, what I tailored my primary OS to, wouldn&amp;rsquo;t have been possible
without assistance from AI.&lt;/p>
&lt;p>With that, I disclaim that the rest of this article is primarily drafted
by my AI Companion. This is going to serve me as a reference for future,
when I forget about how all of this was structured.&lt;/p>
&lt;h1 id="-system-architecture-immutable-debian-btrfs--mergerfs">🏗️ System Architecture: Immutable Debian (Btrfs + MergerFS)&lt;/h1>
&lt;p>This system is a custom-hardened &lt;strong>Immutable Workstation&lt;/strong> based on Debian Testing/Unstable. It utilizes native Btrfs properties and surgical VFS mounting to isolate the Operating System from persistent data.&lt;/p>
&lt;h2 id="1-storage-strategy-subvolume-isolation">1. Storage Strategy: Subvolume Isolation&lt;/h2>
&lt;p>The system resides on a LUKS-encrypted NVMe partition, using a flattened subvolume layout to separate the &amp;ldquo;Gold Master&amp;rdquo; OS from volatile and persistent data.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Mount Point&lt;/th>
&lt;th style="text-align:left">Subvolume Path&lt;/th>
&lt;th style="text-align:left">State&lt;/th>
&lt;th style="text-align:left">Purpose&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RO&lt;/strong>&lt;/td>
&lt;td style="text-align:left">The core OS image.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/etc&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/etc&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RO&lt;/strong>&lt;/td>
&lt;td style="text-align:left">System configuration (Snapshot-capable).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/home/rrs&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/home/rrs&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RW&lt;/strong>&lt;/td>
&lt;td style="text-align:left">User data and Kitty terminal configs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/var/lib&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/var/lib&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RW&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Docker, Apt state, and system DBs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/var/spool&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/var/spool&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RW&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Mail queues and service state.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/swap&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/swap&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RW&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Isolated path for No_COW Swapfile.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>/disk-tmp&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>/ROOTVOL/disk-tmp&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;strong>RW&lt;/strong>&lt;/td>
&lt;td style="text-align:left">MergerFS overflow tier.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="11-etcfstab">1.1 /etc/fstab&lt;/h3>
&lt;pre tabindex="0">&lt;code>❯ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use &amp;#39;blkid&amp;#39; to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;
# --- ROOT &amp;amp; BOOT ---
/dev/mapper/nvme0n1p3_crypt / btrfs autodefrag,compress=zstd,discard=async,noatime,defaults,ro 0 0
/dev/nvme0n1p2 /boot ext4 defaults 0 2
/dev/nvme0n1p1 /boot/efi vfat umask=0077 0 1
# --- SWAP ---
# Mount the &amp;#34;Portal&amp;#34; to the swap subvolume using UUID (Robust)
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /swap btrfs subvol=/ROOTVOL/swap,defaults,noatime 0 0
# Activate the swap file by path (Correct for files)
/swap/swapfile none swap defaults 0 0
# --- DATA / MEDIA ---
UUID=439e297a-96a5-4f81-8b3a-24559839539d /media/rrs/TOSHIBA btrfs noauto,compress=zstd,space_cache=v2,subvolid=5,subvol=/,user
# --- MERGERFS ---
# --- DISK-TMP (MergerFS Overflow Tier) ---
# Ensure this ID matches your actual disk-tmp subvolume
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /disk-tmp btrfs subvolid=417,discard=async,defaults,noatime,compress=zstd 0 0
tmpfs /ram-tmp tmpfs defaults 0 0
/ram-tmp:/disk-tmp /tmp fuse.mergerfs x-systemd.requires=/ram-tmp,x-systemd.requires=/disk-tmp,defaults,allow_other,use_ino,nonempty,minfreespace=1G,category.create=all,moveonenospc=true 0 0
# --- IMMUTABILITY PERSISTENCE LAYERS ---
# We explicitly mount these subvolumes so they remain Writable later.
# UUID is the same as your /var/lib entry (your main Btrfs volume).
# 1. /var/lib (Docker, Apt state) - ID 50659
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /var/lib btrfs subvolid=50659,discard=async,defaults,noatime,compress=zstd 0 0
# 2. /home/rrs (User Data) - ID 13032
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /home/rrs btrfs subvolid=13032,discard=async,defaults,noatime,compress=zstd 0 0
# 3. /etc (System Config) - ID 13030
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /etc btrfs subvolid=13030,discard=async,defaults,noatime,compress=zstd,ro 0 0
# 4. /var/log (Logs) - ID 406
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /var/log btrfs subvolid=406,discard=async,defaults,noatime,compress=zstd 0 0
# 5. /var/cache (Apt Cache) - ID 409
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /var/cache btrfs subvolid=409,discard=async,defaults,noatime,compress=zstd 0 0
# 6. /var/tmp (Temp files) - ID 401
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /var/tmp btrfs subvolid=401,discard=async,defaults,noatime,compress=zstd 0 0
# /var/spool
UUID=4473b40b-bb46-43d6-b69c-ef17bfcac41c /var/spool btrfs subvolid=50689,discard=async,defaults,noatime,compress=zstd 0 0
&lt;/code>&lt;/pre>&lt;h2 id="2-tiered-memory-model-tmp">2. Tiered Memory Model (/tmp)&lt;/h2>
&lt;p>To balance performance and capacity, &lt;code>/tmp&lt;/code> is managed via &lt;strong>MergerFS&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Tier 1 (RAM):&lt;/strong> &lt;code>tmpfs&lt;/code> mounted at &lt;code>/ram-tmp&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Tier 2 (Disk):&lt;/strong> Btrfs subvolume mounted at &lt;code>/disk-tmp&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Logic:&lt;/strong> Files are written to RAM first. If RAM falls below 1GB available, files spill over to the Btrfs disk tier.&lt;/li>
&lt;/ul>
&lt;h2 id="3-hibernation--swap-logic">3. Hibernation &amp;amp; Swap Logic&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Size:&lt;/strong> 33 GiB (Configured for Suspend-to-Disk with 24GB RAM).&lt;/li>
&lt;li>&lt;strong>Attribute:&lt;/strong> The &lt;code>/swap&lt;/code> subvolume is marked &lt;strong>No_COW (+C)&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Kernel Integration:&lt;/strong>
&lt;ul>
&lt;li>&lt;code>resume=UUID=...&lt;/code> (Points to the unlocked LUKS container).&lt;/li>
&lt;li>&lt;code>resume_offset=...&lt;/code> (Physical extent mapping for Btrfs).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="31-systemd-sleephibernation">3.1 systemd sleep/Hibernation&lt;/h3>
&lt;pre tabindex="0">&lt;code>❯ cat /etc/systemd/sleep.conf.d/sleep.conf
[Sleep]
HibernateDelaySec=12min
&lt;/code>&lt;/pre>&lt;p>and&lt;/p>
&lt;pre tabindex="0">&lt;code>❯ cat /etc/systemd/logind.conf.d/logind.conf
[Login]
HandleLidSwitch=suspend-then-hibernate
HandlePowerKey=suspend-then-hibernate
HandleSuspendKey=suspend-then-hibernate
SleepOperation==suspend-then-hibernate
&lt;/code>&lt;/pre>&lt;h2 id="4-immutability--safety-mechanisms">4. Immutability &amp;amp; Safety Mechanisms&lt;/h2>
&lt;p>The system state is governed by two key components:&lt;/p>
&lt;h3 id="a-the-control-script-immutectl">A. The Control Script (&lt;code>immutectl&lt;/code>)&lt;/h3>
&lt;p>Handles the state transition by flipping Btrfs properties and VFS mount flags in the correct order.&lt;/p>
&lt;ul>
&lt;li>&lt;code>sudo immutectl unlock&lt;/code>: Sets &lt;code>ro=false&lt;/code> and remounts &lt;code>rw&lt;/code>.&lt;/li>
&lt;li>&lt;code>sudo immutectl lock&lt;/code>: Sets &lt;code>ro=true&lt;/code> and remounts &lt;code>ro&lt;/code>.&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>❯ cat /usr/local/bin/immutectl
#!/bin/bash
# Ensure script is run as root
if [[ $EUID -ne 0 ]]; then
echo &amp;#34;This script must be run as root (sudo).&amp;#34;
exit 1
fi
ACTION=$1
case $ACTION in
unlock)
echo &amp;#34;🔓 Unlocking / and /etc for maintenance...&amp;#34;
# 1. First, tell the Kernel to allow writes to the mount point
mount -o remount,rw /
mount -o remount,rw /etc
# 2. Now that the VFS is RW, Btrfs will allow you to change the property
btrfs property set / ro false
btrfs property set /etc ro false
echo &amp;#34;Status: System is now READ-WRITE.&amp;#34;
;;
lock)
echo &amp;#34;🔒 Locking / and /etc (Immutable Mode)...&amp;#34;
sync
btrfs property set / ro true
btrfs property set /etc ro true
# We still attempt remount, but we ignore failure since Property is the Hard Lock
mount -o remount,ro / 2&amp;gt;/dev/null
mount -o remount,ro /etc 2&amp;gt;/dev/null
echo &amp;#34;Status: System is now READ-ONLY (Btrfs Property Set).&amp;#34;
;;
status)
echo &amp;#34;--- System Immutability Status ---&amp;#34;
for dir in &amp;#34;/&amp;#34; &amp;#34;/etc&amp;#34;; do
# Get VFS state
VFS_STATE=$(grep &amp;#34; $dir &amp;#34; /proc/mounts | awk &amp;#39;{print $4}&amp;#39; | cut -d, -f1)
# Get Btrfs Property state
BTRFS_PROP=$(btrfs property get &amp;#34;$dir&amp;#34; ro | cut -d= -f2)
# Determine overall health
if [[ &amp;#34;$BTRFS_PROP&amp;#34; == &amp;#34;true&amp;#34; ]]; then
FINAL_STATUS=&amp;#34;LOCKED (RO)&amp;#34;
else
FINAL_STATUS=&amp;#34;UNLOCKED (RW)&amp;#34;
fi
echo &amp;#34;Path: $dir&amp;#34;
echo &amp;#34; - VFS Layer (Mount): $VFS_STATE&amp;#34;
echo &amp;#34; - Btrfs Property: ro=$BTRFS_PROP&amp;#34;
echo &amp;#34; - Effective State: $FINAL_STATUS&amp;#34;
# Check for mismatch (The &amp;#34;Busy&amp;#34; scenario)
if [[ &amp;#34;$VFS_STATE&amp;#34; == &amp;#34;rw&amp;#34; &amp;amp;&amp;amp; &amp;#34;$BTRFS_PROP&amp;#34; == &amp;#34;true&amp;#34; ]]; then
echo &amp;#34; ⚠️ NOTICE: VFS is RW but Btrfs is RO. System is effectively Immutable.&amp;#34;
fi
echo &amp;#34;&amp;#34;
done
;;
*)
echo &amp;#34;Usage: $0 {lock|unlock|status}&amp;#34;
exit 1
;;
esac
&lt;/code>&lt;/pre>&lt;h3 id="b-the-smart-seal-immutability-sealservice">B. The Smart Seal (&lt;code>immutability-seal.service&lt;/code>)&lt;/h3>
&lt;p>A systemd one-shot service that ensures the system is locked on boot.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Fail-safe:&lt;/strong> The service checks &lt;code>/proc/cmdline&lt;/code> for the standalone word &lt;code>rw&lt;/code>. If found (via GRUB manual override), the seal is aborted to allow emergency maintenance.&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>❯ cat /etc/systemd/system/immutability-seal.service
[Unit]
Description=Ensure Btrfs Immutable Properties are set on Boot (unless rw requested)
DefaultDependencies=no
After=systemd-remount-fs.service
Before=local-fs.target
# Don&amp;#39;t run in emergency/rescue modes
#ConditionPathExists=!/run/systemd/seats/seat0
[Service]
Type=oneshot
# The robust check: exit if &amp;#39;rw&amp;#39; exists as a standalone word
ExecStartPre=/bin/sh -c &amp;#39;! grep -qE &amp;#34;\brw\b&amp;#34; /proc/cmdline&amp;#39;
ExecStartPre=mount -o remount,rw /
ExecStart=/usr/bin/btrfs property set / ro true
ExecStart=/usr/bin/btrfs property set /etc ro true
ExecStartPost=mount -o remount,ro /
RemainAfterExit=yes
[Install]
WantedBy=local-fs.target
&lt;/code>&lt;/pre>&lt;h2 id="5-monitoring--maintenance">5. Monitoring &amp;amp; Maintenance&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Nagging:&lt;/strong> A systemd user-timer runs &lt;code>immutability-nag&lt;/code> every 15 minutes to notify the desktop session if the system is currently in an &amp;ldquo;Unlocked&amp;rdquo; state.&lt;/li>
&lt;li>&lt;strong>Verification:&lt;/strong> Use &lt;code>sudo immutectl status&lt;/code> to verify that both the VFS Layer and Btrfs Properties are in sync.&lt;/li>
&lt;/ul>
&lt;h3 id="51-nagging">5.1 Nagging&lt;/h3>
&lt;pre tabindex="0">&lt;code>❯ cat ~/bin/immutability-nag
#!/bin/bash
# Check Btrfs property
BTRFS_STATUS=$(btrfs property get / ro | cut -d= -f2)
if [[ &amp;#34;$BTRFS_STATUS&amp;#34; == &amp;#34;false&amp;#34; ]]; then
# Use notify-send (Standard, fast, non-intrusive)
notify-send -u critical -i security-low \
&amp;#34;🔓 System Unlocked&amp;#34; \
&amp;#34;Root is currently WRITABLE. Run &amp;#39;immutectl lock&amp;#39; when finished.&amp;#34;
fi
&lt;/code>&lt;/pre>&lt;p>and&lt;/p>
&lt;pre tabindex="0">&lt;code>❯ usystemctl cat immutability-nag.service
# /home/rrs/.config/systemd/user/immutability-nag.service
[Unit]
Description=Check Btrfs immutability and notify user
# Ensure it doesn&amp;#39;t run before the graphical session is ready
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=%h/bin/immutability-nag
# Standard environment for notify-send to find the DBus session
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%U/bus
[Install]
WantedBy=default.target
   ~   20:35:15
❯ usystemctl cat immutability-nag.timer
# /home/rrs/.config/systemd/user/immutability-nag.timer
[Unit]
Description=Check immutability every 15 mins
[Timer]
OnStartupSec=5min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
&lt;/code>&lt;/pre>&lt;p>And the resultant nag in action.
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/immutable-seal.jpeg" alt="Immutable Debian Nag"/>
&lt;/div>
&lt;a href="https://researchut.com/images/immutable-seal.jpeg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Immutable Debian Nag&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;h3 id="52-verification">5.2 Verification&lt;/h3>
&lt;pre tabindex="0">&lt;code>❯ sudo immutectl status
[sudo] password for rrs:
--- System Immutability Status ---
Path: /
- VFS Layer (Mount): rw
- Btrfs Property: ro=false
- Effective State: UNLOCKED (RW)
Path: /etc
- VFS Layer (Mount): rw
- Btrfs Property: ro=false
- Effective State: UNLOCKED (RW)
   ~   21:14:08
❯ sudo immutectl lock
🔒 Locking / and /etc (Immutable Mode)...
Status: System is now READ-ONLY (Btrfs Property Set).
   ~   21:14:15
❯ sudo immutectl status
--- System Immutability Status ---
Path: /
- VFS Layer (Mount): rw
- Btrfs Property: ro=true
- Effective State: LOCKED (RO)
⚠️ NOTICE: VFS is RW but Btrfs is RO. System is effectively Immutable.
Path: /etc
- VFS Layer (Mount): rw
- Btrfs Property: ro=true
- Effective State: LOCKED (RO)
⚠️ NOTICE: VFS is RW but Btrfs is RO. System is effectively Immutable.
&lt;/code>&lt;/pre>&lt;hr>
&lt;p>&lt;strong>Date Configured:&lt;/strong> December 2025&lt;br>
&lt;strong>Philosophy:&lt;/strong> The OS is a diagnostic tool. If an application fails to write to a locked path, the application is the variable, not the system.&lt;/p>
&lt;h2 id="wrap">Wrap&lt;/h2>
&lt;p>Overall, I&amp;rsquo;m very very happy with, the result of a day of working
together with AI. I wouldn&amp;rsquo;t have gotten things done so quick in such
time if it wasn&amp;rsquo;t around. Such great is this age of AI.&lt;/p></description></item><item><title>KDE PowerDevil Systemd Inhibit</title><link>https://researchut.com/blog/KDE_PowerDevil_systemd_inhibitors/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/KDE_PowerDevil_systemd_inhibitors/</guid><description>&lt;p>With KDE 6.5.0, PowerDevil has &lt;del>broken&lt;/del> forced its own set of
suspend/hibernate inhibitors onto logind. And to my knowledge, there&amp;rsquo;s no way to disable them.&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;!-- raw HTML omitted -->
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/powerdevil-logind-inhibitors.jpeg" alt="KDE PowerDevil Settings Window"/>
&lt;/div>
&lt;a href="https://researchut.com/images/powerdevil-logind-inhibitors.jpeg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;p>As a user, I&amp;rsquo;d prefer to set lid action as &lt;code>Do nothing&lt;/code> and really
expect KDE/PowerDevil to do nothing in that regard.
But with KDE 6.5.0 PowerDevil forces those inhibitors whatsoever.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>❯ systemd-inhibit --list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WHO UID USER PID COMM WHAT WHY &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ModemManager &lt;span style="color:#ae81ff">0&lt;/span> root &lt;span style="color:#ae81ff">3541&lt;/span> ModemManager sleep ModemManager needs to reset devices &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NetworkManager &lt;span style="color:#ae81ff">0&lt;/span> root &lt;span style="color:#ae81ff">3453&lt;/span> NetworkManager sleep NetworkManager needs to turn off networks &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>UPower &lt;span style="color:#ae81ff">0&lt;/span> root &lt;span style="color:#ae81ff">4342&lt;/span> upowerd sleep Pause device polling &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>PowerDevil &lt;span style="color:#ae81ff">1000&lt;/span> rrs &lt;span style="color:#ae81ff">82735&lt;/span> org_kde_powerde handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch KDE handles power events &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Screen Locker &lt;span style="color:#ae81ff">1000&lt;/span> rrs &lt;span style="color:#ae81ff">4844&lt;/span> kwin_wayland sleep Ensuring that the screen gets locked before going to sleep &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">5&lt;/span> inhibitors listed.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This essentially prohibits logind to act on the lid actions. And instead forces the user to depend on nothing else and other than PowerDevil. This assumes the wishful thought that PowerDevil is Solid.&lt;/p>
&lt;p>I&amp;rsquo;d love to continue using my suspend workflow via systemd&amp;rsquo;s
&lt;code>suspend-then-hibernate&lt;/code> target as it has been working reliably for years. And
it also allows me to customize the behavior as I see fit.&lt;/p>
&lt;p>Of course, I do have the option to trigger &lt;code>systemd suspend-then-hibernate&lt;/code> manually, every time, before closing the lid. But
computers and automation has spoilt things.&lt;/p>
&lt;p>The quick workaround/fix is to delegate it to ACPI, on platforms that
support it. Thankfully all of x86 to my knowledge.&lt;/p>
&lt;p>So, in ACPI actions I&amp;rsquo;ve a new config set to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>❯ cat /etc/acpi/actions/lm_lid.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#! /bin/sh&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep close /proc/acpi/button/lid/LID/state &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> systemctl suspend-then-hibernate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And with that I can be back to reliably (and carelessly)
&lt;code>suspend-then-hibernate&lt;/code> my laptop.&lt;/p></description></item><item><title>apt-offline 1.8.6</title><link>https://researchut.com/blog/apt_offline_186/</link><pubDate>Wed, 26 Feb 2025 18:56:04 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt_offline_186/</guid><description>&lt;h2 id="apt-offline-186">apt-offline 1.8.6&lt;/h2>
&lt;p>&lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> version 1.8.6 was released almost 3 weeks ago on 08/February/2025&lt;/p>
&lt;p>This release includes many bug fixes from community users.&lt;/p>
&lt;ul>
&lt;li>Error out if we cannot initialize the APT lock.
Thanks to Matthew Maslak&lt;/li>
&lt;li>check for checksum and handle appropriately (#217)
Thanks to Dan Whitman (Github:kyp44)&lt;/li>
&lt;li>Honor the &amp;ndash;allow-unauthenticated option.
Thanks to João A (Github: Jonybat)&lt;/li>
&lt;li>Retry when server reports 429 Too Many Requests occurs.
Thanks to Zoltan Kelemen (Github: misterzed88)&lt;/li>
&lt;li>Also support file:/// url types.
Thanks to c4bhuf@github&lt;/li>
&lt;li>Honor user specified extra gpg keyrings&lt;/li>
&lt;/ul>
&lt;h3 id="changelog">Changelog&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>apt-offline (1.8.6-1) unstable; urgency=medium
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Error out if we cannot initialize the APT lock.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to Matthew Maslak
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * check for checksum and handle appropriately (#217)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to Dan Whitman (Github:kyp44)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Honor the --allow-unauthenticated option.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to João A (Github: Jonybat)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Retry when server reports 429 Too Many Requests occurs.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to Zoltan Kelemen (Github: misterzed88)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Also support file:/// url types.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to c4bhuf@github
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Honor user specified extra gpg keyrings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -- Ritesh Raj Sarraf &amp;lt;rrs@debian.org&amp;gt; Sat, 08 Feb 2025 20:46:24 +0530
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="resources">Resources&lt;/h3>
&lt;ul>
&lt;li>Tarball and Zip archive for &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> are available &lt;a href="https://github.com/rickysarraf/apt-offline/releases/tag/v1.8.6">here&lt;/a>&lt;/li>
&lt;li>Packages should be &lt;a href="https://packages.debian.org/apt-offline">available&lt;/a> in Debian.&lt;/li>
&lt;li>Development for &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> is currently hosted &lt;a href="https://github.com/rickysarraf/apt-offline">here&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Nepenthes</title><link>https://researchut.com/blog/Nepenthes/</link><pubDate>Thu, 21 Jul 2022 08:46:56 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Nepenthes/</guid><description>&lt;p>Of the many things we care for in our garden, having some &lt;em>Carnivorous plants&lt;/em> was also one to have.&lt;/p>
&lt;p>Plants are tricky. A lot of information they pass. And depending on where you are and what plants you are with, the results can vary. The &lt;strong>Nepenthes&lt;/strong> family isn&amp;rsquo;t native to where I live but I still wanted to have them. While not impossible, though a difficult task to bring up such species.&lt;/p>
&lt;p>So plants are tricky; tricky because they are saying things all the time; but all you need to decode those signals is &lt;em>time and patience&lt;/em>, to closely observe to what they exhibit and then try to relate.&lt;/p>
&lt;p>Thankfully the Nepenthes have pitchered well.&lt;/p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Nepenthes/IMG_2022-01-08-12-39-36-109-thumb.jpg" alt="/images/Nepenthes/IMG_2022-01-08-12-39-36-109-thumb.jpg"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Nepenthes/IMG_2022-01-08-12-39-36-109.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>First Nepenthes&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>My very first attempt resulted in a failure. Now that I&amp;rsquo;ve been able to grow a young plant to have it fruit many pitchers, I conclude that the first plant I got was an unhealthy one. The same does reflect in the picture that I took.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Nepenthes/IMG_2022-01-22-11-06-55-479-thumb.jpg" alt="/images/Nepenthes/IMG_2022-01-22-11-06-55-479-thumb.jpg"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Nepenthes/IMG_2022-01-22-11-06-55-479.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Second Nepenthes&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>This was the second attempt with a different one. Thankfully, this one has prospered. The pitchers that follow are all from this plant.&lt;/p>
&lt;h2 id="nepenthes">Nepenthes&lt;/h2>
&lt;p>It is a tropical pitcher plant found in the rain forests. Caring for them can be very very tricky.&lt;/p>
&lt;p>The below pictures/videos are in order, as and when they developed.&lt;/p>
&lt;div class="gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition" itemscope itemtype="http://schema.org/ImageGallery">
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_2022-01-08-12-39-36-109-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_2022-01-08-12-39-36-109-thumb.jpg" alt="Img 2022 01 08 12 39 36 109" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 2022 01 08 12 39 36 109&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_2022-01-08-12-39-36-109.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_2022-01-22-11-06-55-479-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_2022-01-22-11-06-55-479-thumb.jpg" alt="Img 2022 01 22 11 06 55 479" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 2022 01 22 11 06 55 479&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_2022-01-22-11-06-55-479.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220301_163415-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220301_163415-thumb.jpg" alt="Img 20220301 163415" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220301 163415&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220301_163415.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220331_141742-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220331_141742-thumb.jpg" alt="Img 20220331 141742" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220331 141742&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220331_141742.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220331_141756-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220331_141756-thumb.jpg" alt="Img 20220331 141756" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220331 141756&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220331_141756.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220506_130907-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220506_130907-thumb.jpg" alt="Img 20220506 130907" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220506 130907&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220506_130907.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220508_095237-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220508_095237-thumb.jpg" alt="Img 20220508 095237" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220508 095237&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220508_095237.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220514_101246-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220514_101246-thumb.jpg" alt="Img 20220514 101246" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220514 101246&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220514_101246.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//IMG_20220517_105302-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//IMG_20220517_105302-thumb.jpg" alt="Img 20220517 105302" />
&lt;/div>
&lt;figcaption>
&lt;p>Img 20220517 105302&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//IMG_20220517_105302.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220523_112608-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220523_112608-thumb.jpg" alt="Mvimg 20220523 112608" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220523 112608&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220523_112608.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220529_102407-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220529_102407-thumb.jpg" alt="Mvimg 20220529 102407" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220529 102407&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220529_102407.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220530_095758-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220530_095758-thumb.jpg" alt="Mvimg 20220530 095758" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220530 095758&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220530_095758.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220531_100202-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220531_100202-thumb.jpg" alt="Mvimg 20220531 100202" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220531 100202&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220531_100202.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220603_114627-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220603_114627-thumb.jpg" alt="Mvimg 20220603 114627" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220603 114627&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220603_114627.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220607_123033-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220607_123033-thumb.jpg" alt="Mvimg 20220607 123033" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220607 123033&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220607_123033.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220611_090629-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220611_090629-thumb.jpg" alt="Mvimg 20220611 090629" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220611 090629&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220611_090629.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220614_101959-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220614_101959-thumb.jpg" alt="Mvimg 20220614 101959" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220614 101959&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220614_101959.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220701_095004-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220701_095004-thumb.jpg" alt="Mvimg 20220701 095004" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220701 095004&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220701_095004.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220701_095023-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220701_095023-thumb.jpg" alt="Mvimg 20220701 095023" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220701 095023&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220701_095023.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//MVIMG_20220717_093153-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//MVIMG_20220717_093153-thumb.jpg" alt="Mvimg 20220717 093153" />
&lt;/div>
&lt;figcaption>
&lt;p>Mvimg 20220717 093153&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//MVIMG_20220717_093153.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220302_133509734-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220302_133509734-thumb.jpg" alt="Pxl 20220302 133509734" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220302 133509734&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220302_133509734.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220313_094230263-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220313_094230263-thumb.jpg" alt="Pxl 20220313 094230263" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220313 094230263&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220313_094230263.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220320_092722961-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220320_092722961-thumb.jpg" alt="Pxl 20220320 092722961" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220320 092722961&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220320_092722961.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220320_102332731.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220320_102332731.MP.jpg" alt="Pxl 20220320 102332731" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220320 102332731&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220320_102332731.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220321_111144250.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220321_111144250.MP.jpg" alt="Pxl 20220321 111144250" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220321 111144250&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220321_111144250.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220326_101006318-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220326_101006318-thumb.jpg" alt="Pxl 20220326 101006318" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220326 101006318&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220326_101006318.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220326_101017255-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220326_101017255-thumb.jpg" alt="Pxl 20220326 101017255" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220326 101017255&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220326_101017255.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220405_131648280-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220405_131648280-thumb.jpg" alt="Pxl 20220405 131648280" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220405 131648280&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220405_131648280.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220407_110213685-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220407_110213685-thumb.jpg" alt="Pxl 20220407 110213685" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220407 110213685&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220407_110213685.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220410_100455858.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220410_100455858.MP.jpg" alt="Pxl 20220410 100455858" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220410 100455858&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220410_100455858.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220411_130518098-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220411_130518098-thumb.jpg" alt="Pxl 20220411 130518098" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220411 130518098&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220411_130518098.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220412_101435088.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220412_101435088.MP.jpg" alt="Pxl 20220412 101435088" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220412 101435088&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220412_101435088.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220415_100546316-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220415_100546316-thumb.jpg" alt="Pxl 20220415 100546316" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220415 100546316&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220415_100546316.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220416_104426132-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220416_104426132-thumb.jpg" alt="Pxl 20220416 104426132" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220416 104426132&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220416_104426132.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220416_104539152-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220416_104539152-thumb.jpg" alt="Pxl 20220416 104539152" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220416 104539152&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220416_104539152.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220419_095927933-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220419_095927933-thumb.jpg" alt="Pxl 20220419 095927933" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220419 095927933&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220419_095927933.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220519_110740604.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220519_110740604.MP.jpg" alt="Pxl 20220519 110740604" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220519 110740604&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220519_110740604.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220520_112411873.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220520_112411873.MP.jpg" alt="Pxl 20220520 112411873" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220520 112411873&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220520_112411873.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220527_174948354-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220527_174948354-thumb.jpg" alt="Pxl 20220527 174948354" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220527 174948354&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220527_174948354.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220528_114902977-thumb.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220528_114902977-thumb.jpg" alt="Pxl 20220528 114902977" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220528 114902977&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220528_114902977.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220615_095929327.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220615_095929327.MP.jpg" alt="Pxl 20220615 095929327" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220615 095929327&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220615_095929327.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220615_095936325.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220615_095936325.MP.jpg" alt="Pxl 20220615 095936325" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220615 095936325&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220615_095936325.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220622_110204818.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220622_110204818.MP.jpg" alt="Pxl 20220622 110204818" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220622 110204818&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220622_110204818.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220704_100826627.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220704_100826627.MP.jpg" alt="Pxl 20220704 100826627" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220704 100826627&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220704_100826627.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220711_115044138.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220711_115044138.MP.jpg" alt="Pxl 20220711 115044138" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220711 115044138&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220711_115044138.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="box">
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img" style="background-image: url('https://researchut.com//images/Nepenthes//PXL_20220711_115055352.MP.jpg');" >
&lt;img itemprop="thumbnail" src="https://researchut.com//images/Nepenthes//PXL_20220711_115055352.MP.jpg" alt="Pxl 20220711 115055352" />
&lt;/div>
&lt;figcaption>
&lt;p>Pxl 20220711 115055352&lt;/p>
&lt;/figcaption>
&lt;a href="https://researchut.com//images/Nepenthes//PXL_20220711_115055352.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;/div>
&lt;h2 id="march-2022">March 2022&lt;/h2>
&lt;p>The very first pitcher blooms&lt;/p>
&lt;video width=50% height=auto controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/Nepenthes/PXL_20220320_092726895.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;h2 id="april-2022">April 2022&lt;/h2>
&lt;p>The second pitcher&lt;/p>
&lt;video width=50% height=auto controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/Nepenthes/PXL_20220410_100505919.LS.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;video width=50% height=auto controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/Nepenthes/PXL_20220423_104419042.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;h2 id="may-2022">May 2022&lt;/h2>
&lt;p>Moar pitchers&lt;/p>
&lt;video width=50% height=auto controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/Nepenthes/VID_20220521_131917.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;h2 id="june-2022">June 2022&lt;/h2>
&lt;p>Pitchers, Pitchers&amp;hellip;.&lt;/p>
&lt;video width=50% height=auto controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/Nepenthes/VID_20220611_090647.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;h2 id="july-2022">July 2022&lt;/h2>
&lt;p>Many more to follow&amp;hellip;.&lt;/p>
&lt;p>More on YouTube Playlist: &lt;a href="https://youtube.com/playlist?list=PLWWn3IBEvP7GSMfseh5_jyUzoO9vAjELK">Nepenthes&lt;/a>&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ExEdwC53K60?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;h2 id="pests">Pests&lt;/h2>
&lt;p>Thankfully, so far, no pest problems have occurred. Possibly, because the usual pests are part of the diet.&lt;/p>
&lt;h2 id="care-tips">Care Tips&lt;/h2>
&lt;p>Bottom line is that you need to ensure your Nepenthes has the &lt;em>Tropical Rain Forest&lt;/em> type habitat. Whatever it takes, build that.&lt;/p></description></item><item><title>Systemd Service Hang</title><link>https://researchut.com/blog/Systemd_Service_Hang/</link><pubDate>Fri, 22 Apr 2022 00:00:00 +0000</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Systemd_Service_Hang/</guid><description>&lt;p>Finally, TIL, what can all be the reason for systemd services to hang indefinitely. The internet is flooded with numerous reports on this topic but no clear answers. So no more uselessly marked workarounds like: &lt;code>systemctl daemon-reload&lt;/code> and &lt;code>systemctl-daemon-reexec&lt;/code> for this scenario.&lt;/p>
&lt;p>The scene would be something along the lines of:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>rrs &lt;span style="color:#ae81ff">6467&lt;/span> 0.0 0.0 &lt;span style="color:#ae81ff">23088&lt;/span> &lt;span style="color:#ae81ff">15852&lt;/span> pts/1 Ss 12:53 0:00 | | &lt;span style="color:#ae81ff">\_&lt;/span> /bin/bash
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs &lt;span style="color:#ae81ff">11512&lt;/span> 0.0 0.0 &lt;span style="color:#ae81ff">14876&lt;/span> &lt;span style="color:#ae81ff">4608&lt;/span> pts/1 S+ 13:18 0:00 | | | &lt;span style="color:#ae81ff">\_&lt;/span> systemctl restart snapper-timeline.timer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs &lt;span style="color:#ae81ff">11513&lt;/span> 0.0 0.0 &lt;span style="color:#ae81ff">14984&lt;/span> &lt;span style="color:#ae81ff">3076&lt;/span> pts/1 S+ 13:18 0:00 | | | &lt;span style="color:#ae81ff">\_&lt;/span> /bin/systemd-tty-ask-password-agent --watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs &lt;span style="color:#ae81ff">11514&lt;/span> 0.0 0.0 &lt;span style="color:#ae81ff">234756&lt;/span> &lt;span style="color:#ae81ff">6752&lt;/span> pts/1 Sl+ 13:18 0:00 | | | &lt;span style="color:#ae81ff">\_&lt;/span> /usr/bin/pkttyagent --notify-fd &lt;span style="color:#ae81ff">5&lt;/span> --fallback
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>snapper-timeline&lt;/code> service is important to me and it not running for months is a complete failure. Disappointingly, commands like &lt;code>systemctl --failed&lt;/code> do not report of this oddity. The overall system status is reported to be fine, which is completely incorrect.&lt;/p>
&lt;p>Thankfully, a kind soul&amp;rsquo;s &lt;a href="https://github.com/NixOS/nixpkgs/issues/2584#issuecomment-42616675">comment&lt;/a> gave the hint. The problem is that you could be having certain services in &lt;code>Activating&lt;/code> status, which thus blocks all other services; quietly. So much for the unnecessary fun.&lt;/p>
&lt;p>Looking further, in my case, it was:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>rrs@priyasi:~$ systemctl list-jobs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>JOB UNIT TYPE STATE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">81&lt;/span> timers.target start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">85&lt;/span> man-db.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">88&lt;/span> fstrim.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">3832&lt;/span> snapper-timeline.service start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">83&lt;/span> snapper-timeline.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">39&lt;/span> systemd-time-wait-sync.service start running
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">87&lt;/span> logrotate.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">84&lt;/span> debspawn-clear-caches.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">89&lt;/span> plocate-updatedb.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">91&lt;/span> dpkg-db-backup.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">93&lt;/span> e2scrub_all.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">40&lt;/span> time-sync.target start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">86&lt;/span> apt-listbugs.timer start waiting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">13&lt;/span> jobs listed.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>13:12 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That was it. I knew the &lt;code>systemd-timesyncd&lt;/code> service, in the past, had given me enough headaches. And so was it this time, just quietly doing it all again.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>rrs@priyasi:~$ systemctl status systemd-time-wait-sync.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>● systemd-time-wait-sync.service - Wait Until Kernel Time Synchronized
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Loaded: loaded &lt;span style="color:#f92672">(&lt;/span>/lib/systemd/system/systemd-time-wait-sync.service; enabled; vendor preset&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: activating &lt;span style="color:#f92672">(&lt;/span>start&lt;span style="color:#f92672">)&lt;/span> since Fri 2022-04-22 13:14:25 IST; 1min 38s ago
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Docs: man:systemd-time-wait-sync.service&lt;span style="color:#f92672">(&lt;/span>8&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Main PID: &lt;span style="color:#ae81ff">11090&lt;/span> &lt;span style="color:#f92672">(&lt;/span>systemd-time-wa&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Tasks: &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">(&lt;/span>limit: 37051&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Memory: 836.0K
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CPU: 7ms
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CGroup: /system.slice/systemd-time-wait-sync.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └─11090 /lib/systemd/systemd-time-wait-sync
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apr &lt;span style="color:#ae81ff">22&lt;/span> 13:14:25 priyasi systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: Starting Wait Until Kernel Time Synchronized...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apr &lt;span style="color:#ae81ff">22&lt;/span> 13:14:25 priyasi systemd-time-wait-sync&lt;span style="color:#f92672">[&lt;/span>11090&lt;span style="color:#f92672">]&lt;/span>: adjtime state &lt;span style="color:#ae81ff">5&lt;/span> status &lt;span style="color:#ae81ff">40&lt;/span> time Fri 2022-&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>13:16 ♒ ॐ ♅ ♄ ⛢ ☹ 😟&lt;span style="color:#f92672">=&lt;/span>&amp;gt; &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dear LazyWeb, anybody knows of why the &lt;code>systemd-time-wait-sync&lt;/code> service would hang indefinitely? I&amp;rsquo;ve had identical setups on many machines, in the same network, where others don&amp;rsquo;t exhibit this problem.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>rrs@priyasi:~$ systemctl cat systemd-time-wait-sync.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...snipped...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>Service&lt;span style="color:#f92672">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Type&lt;span style="color:#f92672">=&lt;/span>oneshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ExecStart&lt;span style="color:#f92672">=&lt;/span>/lib/systemd/systemd-time-wait-sync
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>TimeoutStartSec&lt;span style="color:#f92672">=&lt;/span>infinity
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RemainAfterExit&lt;span style="color:#f92672">=&lt;/span>yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>Install&lt;span style="color:#f92672">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WantedBy&lt;span style="color:#f92672">=&lt;/span>sysinit.target
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>TimeoutStartSec=infinity&lt;/code> is definitely an attribute that shouldn&amp;rsquo;t be shipped in any system services. There are use cases for it but that should be left for local admins to explicitly decide. Hanging for &lt;code>infinity&lt;/code> is not a desired behavior for a system service.&lt;/p>
&lt;p>In figuring all this out, today I learnt the handy &lt;code>systemctl list-jobs&lt;/code> command, which will give the list of active &lt;code>running/blocked/waiting&lt;/code> jobs.&lt;/p>
&lt;h2 id="update-2024-08-15">Update: 2024-08-15&lt;/h2>
&lt;p>This week I finally found the cause of the issue. I have a bunch of bridge interfaces defined on my machine. And all of them, most of their time, would be &lt;code>DOWN&lt;/code>&lt;/p>
&lt;pre tabindex="0">&lt;code>
@ ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: withnet: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether XXXXXXXXXXXXXXXXX brd ff:ff:ff:ff:ff:ff
3: nonet: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether XXXXXXXXXXXXXXXXX brd ff:ff:ff:ff:ff:ff
4: tap0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether XXXXXXXXXXXXXXXXX brd ff:ff:ff:ff:ff:ff
6: wlan0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether XXXXXXXXXXXXXXXXX brd ff:ff:ff:ff:ff:ff
inet 10.42.1.66/24 brd 10.42.1.255 scope global dynamic noprefixroute wlan0
valid_lft 5325sec preferred_lft 5325sec
inet6 fe80::9bc0:e362:7c9d:be7c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
7: email-laptop: &amp;lt;POINTOPOINT,NOARP,UP,LOWER_UP&amp;gt; mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet XXXXXXXXXXXXXXXXX scope global noprefixroute email-laptop
valid_lft forever preferred_lft forever
inet6 XXXXXXXXXXXXXXXXX scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 XXXXXXXXXXXXXXXXXXXXXXXX/64 scope link noprefixroute
valid_lft forever preferred_lft forever
⛢ 13:55:21 rrs@priyasi ~/pu/researchut-hugo researchut|+1…2
&lt;/code>&lt;/pre>&lt;p>And as it stands, that is the cause of the problem.&lt;/p>
&lt;p>&lt;code>systemd-timesyncd&lt;/code> would invoke an attempt to sync time for all the interfaces defined under &lt;code>systemd-networkd&lt;/code>. And given the setup, that is bound to &lt;del>fail&lt;/del> timeout; which is why I had added the override against:&lt;/p>
&lt;pre tabindex="0">&lt;code>TimeoutStartSec=infinity
&lt;/code>&lt;/pre>&lt;p>So, apparently, for every interface in &lt;code>networkd&lt;/code>, it&amp;rsquo;d attempt the ntp sync. It reports along the lines of:&lt;/p>
&lt;pre tabindex="0">&lt;code>Aug 15 13:24:06 priyasi systemd-timesyncd[1987]: Network configuration changed, trying to establish connection.
&lt;/code>&lt;/pre>&lt;p>So I learnt this week, of the attribute to handle this:&lt;/p>
&lt;pre tabindex="0">&lt;code>@ cat sysbr0.network
[Match]
Name=withnet
[Network]
DHCPServer=yes
IPv4Forwarding=yes
IPv6Forwarding=yes
IPMasquerade=both
Address=192.168.1.1/24
LLMNR=yes
[Link]
RequiredForOnline=no
#[DHCPServer]
#DNS=192.168.1.1
&lt;/code>&lt;/pre>&lt;p>With that, NTP time synchronization is back to what it should be. Precision synchronization of the system time.&lt;/p>
&lt;pre tabindex="0">&lt;code>ॐ 14:11:35 rrs@priyasi /etc/systemd/network
@ timedatectl show
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Thu 2024-08-15 14:12:45 IST
RTCTimeUSec=Thu 2024-08-15 14:12:45 IST
&lt;/code>&lt;/pre></description></item><item><title>Btrfs Subvol Fix</title><link>https://researchut.com/blog/BTRFS_Subvol_Fix/</link><pubDate>Wed, 20 Apr 2022 22:41:53 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/BTRFS_Subvol_Fix/</guid><description>&lt;p>There surely is need for better tooling on the BTRFS File System side.&lt;/p>
&lt;p>While &lt;a href="https://researchut.com/blog/Thinkpad_AMD_Debian/">migrating&lt;/a> my setup from one machine to another, this is one issue I came to be aware of, only today, when my backup tool (&lt;code>btrbk&lt;/code>) complained about it. Following the pointers, I see the below snippet in &lt;code>btrfs-subvolume&lt;/code> manual page.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> A snapshot that was created by send/receive will be read-only, with different last change generation, read-only and with set received_uuid which identifies the subvolume on the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> filesystem that produced the stream. The usecase relies on matching data on both sides. Changing the subvolume to read-write after it has been received requires to reset the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> received_uuid. As this is a notable change and could potentially break the incremental send use &lt;span style="color:#66d9ef">case&lt;/span>, performing it by btrfs property set requires force &lt;span style="color:#66d9ef">if&lt;/span> that is really desired by
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> user.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Note
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> The safety checks have been implemented in 5.14.2, any subvolumes previously received &lt;span style="color:#f92672">(&lt;/span>with a valid received_uuid&lt;span style="color:#f92672">)&lt;/span> and read-write status may exist and could still lead to
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> problems with send/receive. You can use btrfs subvolume show to identify them. Flipping the flags to read-only and back to read-write will reset the received_uuid manually. There
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> may exist a convenience tool in the future.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Fixing the &lt;code>Received UUID: &lt;/code> flag meant running the below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>rrs@priyasi:.../spool$ sudo btrfs sub show /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: the subvolume is read-write and has received_uuid set,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> don&amp;#39;t use it for incremental send. Please see section
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#39;SUBVOLUME FLAGS&amp;#39; in manual page btrfs-subvolume for
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> further information.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ROOTVOL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name: ROOTVOL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> UUID: 122b0de1-e6f2-6845-aba0-6bf766c16526
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Parent UUID: -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Received UUID: 34772967-c709-5146-bf20-898f7dbc2c1f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Creation time: 2021-12-02 19:59:29 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Subvolume ID: 256
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Generation: 138473
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Gen at creation: 7
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Parent ID: 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Top level ID: 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Flags: -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Send transid: 35245
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Send time: 2021-12-02 19:59:29 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Receive transid: 34
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Receive time: 2021-12-02 20:13:11 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Snapshot(s):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ROOTVOL/.snapshots/1/snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ROOTVOL/.snapshots/2/snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>22:40 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:.../spool$ sudo btrfs property set / ro true
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: read-write subvolume with received_uuid, this is bad
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>22:40 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:.../spool$ sudo btrfs property set -f / ro false
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>22:40 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:.../spool$ sudo btrfs sub show /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ROOTVOL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name: ROOTVOL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> UUID: 122b0de1-e6f2-6845-aba0-6bf766c16526
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Parent UUID: -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Received UUID: -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Creation time: 2021-12-02 19:59:29 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Subvolume ID: 256
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Generation: 138473
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Gen at creation: 7
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Parent ID: 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Top level ID: 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Flags: -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Send transid: 0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Send time: 2021-12-02 19:59:29 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Receive transid: 138480
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Receive time: 2022-04-20 22:40:43 +0530
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Snapshot(s):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ROOTVOL/.snapshots/1/snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ROOTVOL/.snapshots/2/snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>22:40 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hoping there won&amp;rsquo;t be surprises in the coming months. 🤞&lt;/p></description></item><item><title>apt-offline 1.8.4</title><link>https://researchut.com/blog/apt_offline_184/</link><pubDate>Sat, 12 Feb 2022 20:47:04 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt_offline_184/</guid><description>&lt;h2 id="apt-offline-184">apt-offline 1.8.4&lt;/h2>
&lt;p>&lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> version 1.8.4 has been released.&lt;/p>
&lt;p>This release includes many bug fixes but the important ones are:&lt;/p>
&lt;ul>
&lt;li>Better GPG signature handling&lt;/li>
&lt;li>Support for verifying InRelease files&lt;/li>
&lt;/ul>
&lt;h3 id="changelog">Changelog&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>apt-offline (1.8.4-1) unstable; urgency=medium
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [ Debian Janitor ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Update standards version to 4.5.0, no changes needed.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [ Paul Wise ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Clarify file type in unknown file message
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix typos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Remove trailing whitespace
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Update LICENSE file to match official GNU version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Complain when there are no valid keyrings instead of missing keyrings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Make all syncrhronised files world readable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix usage of indefinite articles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Only show the APT Offline GUI once in the menu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Update out of date URLs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix date and whitespace issues in the manual page
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Replace stereotyping with an appropriate word
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Switch more Python shebangs to Python 3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Correct usage of the /tmp/ directory
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix YAML files
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix usage of the log API
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Make the copying of changelog lines less brittle
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Do not split keyring paths on whitespace
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [ Ritesh Raj Sarraf ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Drop the redundant import of the apt module.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to github/dandelionred
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Fix deprecation of get_bugs() in debianbts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Drop the unused IgnoredBugTypes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Set encoding for files when opening
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Better error logging when apt fails
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Don&amp;#39;t mandate a default option
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Demote metadata errors to verbose
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Also log an error message for every failed .deb url
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Check hard for the url type
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Check for ascii armored signature files.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Thanks to David Klnischkies
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Add MIME type for InRelease files
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Drop patch 0001-Drop-the-redundant-import-of-the-apt-module.patch.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Now part of the 1.8.4 release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Prepare release 1.8.3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * Prepare release 1.8.4
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * debian packaging
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + Bump debhelper compatibility to 13
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + Update install files
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [ Dean Anderson ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> * [#143] Added support for verifying InRelease files
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -- Ritesh Raj Sarraf &amp;lt;rrs@debian.org&amp;gt; Sat, 12 Feb 2022 18:52:58 +0530
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="resources">Resources&lt;/h3>
&lt;ul>
&lt;li>Tarball and Zip archive for &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> are available &lt;a href="https://github.com/rickysarraf/apt-offline/releases/tag/v1.8.4">here&lt;/a>&lt;/li>
&lt;li>Packages should be &lt;a href="https://packages.debian.org/apt-offline">available&lt;/a> in Debian.&lt;/li>
&lt;li>Development for &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> is currently hosted &lt;a href="https://github.com/rickysarraf/apt-offline">here&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>ThinkPad AMD Debian</title><link>https://researchut.com/blog/Thinkpad_AMD_Debian/</link><pubDate>Tue, 11 Jan 2022 19:37:24 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Thinkpad_AMD_Debian/</guid><description>&lt;p>After a hiatus of 6 years, it was nice to be back with the ThinkPad. This blog post briefly touches upon my impressions with the current generation ThinkPad T14 Gen2 AMD variant.&lt;/p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/ThinkPad_T14_Gen2_AMD.jpg" alt="ThinkPad T14 Gen2 AMD"/>
&lt;/div>
&lt;a href="https://researchut.com/images/ThinkPad_T14_Gen2_AMD.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>ThinkPad T14 Gen2 AMD&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h3 id="lenovo">Lenovo&lt;/h3>
&lt;p>It took 8 weeks to get my hands on the machine. Given the pandemic, restrictions and uncertainities, not sure if I should call it an ontime delivery. This was a CTO - Customise-to-order; so was nice to get rid of things I really didn&amp;rsquo;t care/use much. On the other side, it also meant I could save on some power. It also came comparatively cheaper overall.&lt;/p>
&lt;ul>
&lt;li>No fingerprint reader&lt;/li>
&lt;li>No Touch screen&lt;/li>
&lt;/ul>
&lt;p>There&amp;rsquo;s still parts where Lenovo could improve. Or less frustate a customer. I don&amp;rsquo;t understand why a company would provide a full customization option on their portal, while at the same time, not provide an explicit option to choose the make/model of the hardware one wants. Lenovo deliberately chooses to not show/specify which WiFi adapter one could choose. So, as I suspected, I ended up with a &lt;code>MEDIATEK Corp. Device 7961&lt;/code> wifi adapter.&lt;/p>
&lt;h3 id="amd">AMD&lt;/h3>
&lt;p>For the first time in my computing life, I&amp;rsquo;m now using AMD at the core. I was pretty frustrated with annoying Intel Graphics bugs, so decided to take the plunge and give AMD/ATI a shot, knowing that the &lt;code>radeon&lt;/code> driver does have decent support. So far, on the graphics side of things, I&amp;rsquo;m glad that things look bright. The stock in-kernel radeon driver has been working perfect for my needs and I haven&amp;rsquo;t had to tinker even once so far, in my 30 days of use.&lt;/p>
&lt;p>On the overall system performance, I have not done any benchmarks nor do I want to do. But wholly, the system performance is smooth.&lt;/p>
&lt;h3 id="powerthermal">Power/Thermal&lt;/h3>
&lt;p>This is where things need more improvement on the AMD side. This AMD laptop terribly draws a lot of power in suspend mode. And it isn&amp;rsquo;t just this machine, but also the previous T14 Gen1 which has similar problems. I&amp;rsquo;m not sure if this is a generic ThinkPad problem, or an AMD specific problem. But coming from the Dell XPS 13 9370 Intel, this does draw a lot lot more power. So much, that I chose to use hibernation instead.&lt;/p>
&lt;p>Similarly, on the thermal side, this machine doesn&amp;rsquo;t cool down well as compared the the Dell XPS Intel one. On an idle machine, its temperature are comparatively higher. Looking at &lt;code>powertop&lt;/code> reports, it does show to consume an average of 10 watts power even while idle.&lt;/p>
&lt;p>I&amp;rsquo;m hoping these are Linux ingeration issues and that Lenovo/AMD will improve things in the coming months. But given the user feedback on the ThinkPad T14 Gen1 thread, it may just be wishful thinking.&lt;/p>
&lt;h3 id="linux">Linux&lt;/h3>
&lt;p>The overall hardware support has been surprisingly decent. The MediaTek WiFi driver had some glitches but with Linux 5.15+, things have considerably improved. And I hope the trend will continue with forthcoming Linux releases. My previous device driver experience with MediaTek wasn&amp;rsquo;t good but I took the plunge, considering that in the worst scenario I&amp;rsquo;d have the option to swap the card.&lt;/p>
&lt;p>There&amp;rsquo;s a lot of marketing about Linux + Intel. But I took a jibe with Linux + AMD. There are glitches but nothing so far that has been a dealbreaker. If anything, I wish Lenovo/AMD would seriously work on the power/thermal issues.&lt;/p>
&lt;h3 id="migration">Migration&lt;/h3>
&lt;p>Other than what&amp;rsquo;s mentioned above, I haven&amp;rsquo;t had any serious issues. I may have had some rare occassional hangs but they&amp;rsquo;ve been so infrequent that I haven&amp;rsquo;t spent time to investigate those.&lt;/p>
&lt;p>Upon receiving the machine, my biggest requirement was how to switch my current workstation from Dell XPS to Lenovo ThinkPad. I&amp;rsquo;ve been using btrfs for some time now. And over the years, built my own practise on how to structure it. Things like, provisioning [sub]volumes, based on use cases is one thing I see. Like keeping separate subvols for: cache/temporary data, copy-on-write data , swap etc. I wish these things could be simplified; either on the btrfs tooling side or some different tool on top of it.&lt;/p>
&lt;p>Below is filtered list of subvols created over years, that were worthy of moving to the new machine.&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@priyasi:~$ cat btrfs-volume-layout
ID 550 gen 19166 top level 5 path home/foo/.cache
ID 552 gen 1522688 top level 5 path home/rrs
ID 553 gen 1522688 top level 552 path home/rrs/.cache
ID 555 gen 1426323 top level 552 path home/rrs/rrs-home/Libvirt-Images
ID 618 gen 1522672 top level 5 path var/spool/news
ID 634 gen 1522670 top level 5 path var/tmp
ID 635 gen 1522688 top level 5 path var/log
ID 639 gen 1522226 top level 5 path var/cache
ID 992 gen 1522670 top level 5 path disk-tmp
ID 1018 gen 1522688 top level 552 path home/rrs/NoBackup
ID 1196 gen 1522671 top level 5 path etc
ID 23721 gen 775692 top level 5 path swap
18:54 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/code>&lt;/pre>&lt;h4 id="btrfs-sendreceive">btrfs send/receive&lt;/h4>
&lt;p>This did come in handy but I sorely missed some feature. Maybe they aren&amp;rsquo;t there, or are there and I didn&amp;rsquo;t look close enough. Over the years, different attributes were set to different subvols. Over time I forget what feature was added where. But from a migration point of view, it&amp;rsquo;d be nice to say, &amp;ldquo;Take this volume and take it with all its attributes&amp;rdquo;. I didn&amp;rsquo;t find that functionality in &lt;code>send/receive&lt;/code>.&lt;/p>
&lt;p>There&amp;rsquo;s &lt;code>get/set-property&lt;/code> which I noticed later but by then it was late. So some sort of tooling, ideally something like &lt;code>btrfs migrate&lt;/code> or somesuch would be nicer.&lt;/p>
&lt;p>In the file system world, we already have nice tools to take care of similar scenarios. Like with &lt;code>rsync&lt;/code>, I can request it to carry all file attributes.&lt;/p>
&lt;p>Also, iirc, &lt;code>send/receive&lt;/code> works only on &lt;code>ro&lt;/code> volumes. So there&amp;rsquo;s more work one needs to do in:&lt;/p>
&lt;ol>
&lt;li>create ro vol&lt;/li>
&lt;li>send&lt;/li>
&lt;li>receive&lt;/li>
&lt;li>don&amp;rsquo;t forget to set rw property&lt;/li>
&lt;li>And then somehow find out other properties set on each individual subvols and [re]apply the same on the destination&lt;/li>
&lt;/ol>
&lt;p>I wish this all be condensed into a sub-command.&lt;/p>
&lt;p>For my own sake, for this migration, the steps used were:&lt;/p>
&lt;pre tabindex="0">&lt;code>user@debian:~$ for volume in `sudo btrfs sub list /media/user/TOSHIBA/Migrate/ | cut -d &amp;#39; &amp;#39; -f9 | grep -v ROOTVOL | grep -v etc | grep -v btrbk`; do echo $volume; sud
o btrfs send /media/user/TOSHIBA/$volume | sudo btrfs receive /media/user/BTRFSROOT/ ; done
Migrate/snapshot_disk-tmp
At subvol /media/user/TOSHIBA/Migrate/snapshot_disk-tmp
At subvol snapshot_disk-tmp
Migrate/snapshot-home_foo_.cache
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_foo_.cache
At subvol snapshot-home_foo_.cache
Migrate/snapshot-home_rrs
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs
At subvol snapshot-home_rrs
Migrate/snapshot-home_rrs_.cache
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs_.cache
At subvol snapshot-home_rrs_.cache
ERROR: crc32 mismatch in command
Migrate/snapshot-home_rrs_rrs-home_Libvirt-Images
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs_rrs-home_Libvirt-Images
At subvol snapshot-home_rrs_rrs-home_Libvirt-Images
ERROR: crc32 mismatch in command
Migrate/snapshot-var_spool_news
At subvol /media/user/TOSHIBA/Migrate/snapshot-var_spool_news
At subvol snapshot-var_spool_news
Migrate/snapshot-var_lib_machines
At subvol /media/user/TOSHIBA/Migrate/snapshot-var_lib_machines
At subvol snapshot-var_lib_machines
Migrate/snapshot-var_lib_machines_DebianSidTemplate
..... snipped .....
&lt;/code>&lt;/pre>&lt;p>And then, follow-up with:&lt;/p>
&lt;pre tabindex="0">&lt;code>user@debian:~$ for volume in `sudo btrfs sub list /media/user/BTRFSROOT/ | cut -d &amp;#39; &amp;#39; -f9`; do echo $volume; sudo btrfs property set -ts /media/user/BTRFSROOT/$volume ro false; done
ROOTVOL
ERROR: Could not open: No such file or directory
etc
snapshot_disk-tmp
snapshot-home_foo_.cache
snapshot-home_rrs
snapshot-var_spool_news
snapshot-var_lib_machines
snapshot-var_lib_machines_DebianSidTemplate
snapshot-var_lib_machines_DebSidArmhf
snapshot-var_lib_machines_DebianJessieTemplate
snapshot-var_tmp
snapshot-var_log
snapshot-var_cache
snapshot-disk-tmp
&lt;/code>&lt;/pre>&lt;p>And then finally, renaming everything to match proper:&lt;/p>
&lt;pre tabindex="0">&lt;code>user@debian:/media/user/BTRFSROOT$ for x in snapshot*; do vol=$(echo $x | cut -d &amp;#39;-&amp;#39; -f2 | sed -e &amp;#34;s|_|/|g&amp;#34;); echo $x $vol; sudo mv $x $vol; done
snapshot-var_lib_machines var/lib/machines
snapshot-var_lib_machines_Apertisv2020ospackTargetARMHF var/lib/machines/Apertisv2020ospackTargetARMHF
snapshot-var_lib_machines_Apertisv2021ospackTargetARM64 var/lib/machines/Apertisv2021ospackTargetARM64
snapshot-var_lib_machines_Apertisv2022dev3ospackTargetARMHF var/lib/machines/Apertisv2022dev3ospackTargetARMHF
snapshot-var_lib_machines_BusterArm64 var/lib/machines/BusterArm64
snapshot-var_lib_machines_DebianBusterTemplate var/lib/machines/DebianBusterTemplate
snapshot-var_lib_machines_DebianJessieTemplate var/lib/machines/DebianJessieTemplate
snapshot-var_lib_machines_DebianSidTemplate var/lib/machines/DebianSidTemplate
snapshot-var_lib_machines_DebianSidTemplate_var_lib_portables var/lib/machines/DebianSidTemplate/var/lib/portables
snapshot-var_lib_machines_DebSidArm64 var/lib/machines/DebSidArm64
snapshot-var_lib_machines_DebSidArmhf var/lib/machines/DebSidArmhf
snapshot-var_lib_machines_DebSidMips var/lib/machines/DebSidMips
snapshot-var_lib_machines_JenkinsApertis var/lib/machines/JenkinsApertis
snapshot-var_lib_machines_v2019 var/lib/machines/v2019
snapshot-var_lib_machines_v2019LinuxSupport var/lib/machines/v2019LinuxSupport
snapshot-var_lib_machines_v2020 var/lib/machines/v2020
snapshot-var_lib_machines_v2021dev3Slim var/lib/machines/v2021dev3Slim
snapshot-var_lib_machines_v2021dev3SlimTarget var/lib/machines/v2021dev3SlimTarget
snapshot-var_lib_machines_v2022dev2OspackMinimal var/lib/machines/v2022dev2OspackMinimal
snapshot-var_lib_portables var/lib/portables
snapshot-var_log var/log
snapshot-var_spool_news var/spool/news
snapshot-var_tmp var/tmp
&lt;/code>&lt;/pre>&lt;h4 id="snapper">snapper&lt;/h4>
&lt;p>Entirely independent of this, but indirectly related. I use &lt;code>snapper&lt;/code> as my snapshotting tool. It worked perfect on my previous machine. While everything got migrated, the only thing that fell apart was &lt;code>snapper&lt;/code>. It just wouldn&amp;rsquo;t start/run proper. Funny thing is that I just removed the snapper configs and reinitialized with the exact same config again, and voila snapper was happy.&lt;/p>
&lt;h3 id="conclusion">Conclusion&lt;/h3>
&lt;p>That was pretty much it. With the above and then also migrating &lt;code>/boot&lt;/code> and then just chroot to install the boot loader. At some time, I&amp;rsquo;d like to explore other boot options but given that that is such a non-essential task, it is low on the list.&lt;/p>
&lt;p>The good part was that I booted into my new machine with my exact workstation setup as it was. All the way to the user cache and the desktop session. So it was nice on that part.&lt;/p>
&lt;p>But I surely think there&amp;rsquo;s room for a better migration experience here. If not directly as &lt;code>btrfs migrate&lt;/code>, then maybe as an independent tool. The problem is that such a tool is going to be used once in years, so I didn&amp;rsquo;t find the motivation to write one. But this surely would be a good use case for the distribution vendors.&lt;/p></description></item><item><title>Lotus to Lily</title><link>https://researchut.com/blog/Lotus_To_Lily/</link><pubDate>Sat, 09 Oct 2021 21:52:30 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Lotus_To_Lily/</guid><description>&lt;h2 id="the-lotus-story-so-far">The Lotus story so far&lt;/h2>
&lt;p>My &lt;a href="https://researchut.com/blog/Setting-Lotus-Pot/">very first experience&lt;/a> with &lt;em>water flowering plants&lt;/em> was pretty good. I learnt a good deal of things; &lt;em>from setting up the pond, germinating the lotus seeds, setting up the right soil, witnessing the growth of the lotus plant, fish eco-system to take care of the pond&lt;/em>. Overall, a lot of things learnt.&lt;/p>
&lt;p>But I couldn&amp;rsquo;t succeed in getting the Lotus flower. A lot many reasons. The granite container developed some leakage, which I had to fix by emptying it, which might have caused some shock to the lotus. But more than that, in my understanding, the reason for not being able to flower the lotus, was the amount of sunlight. From what I have learned, these plants need a minimum of 6-8 hrs of sunlight to really give you with the flowering result, whereas the setup of my pond was on the ground with hardly 3-4 hrs of sun. And that too, with all the plants growing, resulted in indirect sunlight.&lt;/p>
&lt;h3 id="lotus-to-lily">Lotus to Lily&lt;/h3>
&lt;p>For my new setup, I chose a large oval container. And this one, I placed on my terrace, carefully choosing a spot where it&amp;rsquo;d get 6-8 hrs of very bright sun on usual days. Other than that, the rest of the setup is pretty similar to my previous setup in the garden. Guppies, Solar Water Fountain etc.&lt;/p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20211002_112805.jpg" alt="Initial lily pond setup"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20211002_112805.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Initial lily pond setup&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>The good thing about the terrace is that the setup gets ample amount of sun. You can see that in the picture above, with the amount of algae that has been formed. Something that is vital for the plant&amp;rsquo;s ecosystem.&lt;/p>
&lt;p>I must thank my wonderful neighbor who kindly shared a sapling from their lily plant. They already had had success with flowering the lily. So I had high hopes to see the day come when I&amp;rsquo;d be happy to write down my experience in this blog post. Though, a lot of patience is needed. I got the lily some time in January this year. And it blossomed now, in October.&lt;/p>
&lt;p>So, here&amp;rsquo;s me sharing my happiness here, in particular order of how I documented the process.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20211004_091446.jpg" alt="Monday morning greeted with a blossomed lily"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20211004_091446.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Monday morning greeted with a blossomed lily&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20211004_091633824.jpg" alt="Lily Blossom Closeup"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20211004_091633824.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lily Blossom Closeup&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20211004_104702148.jpg" alt="Beautiful water reflection"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20211004_104702148.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Beautiful water reflection&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;video width=100% controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/PXL_20211004_091051622.mp4_stripped.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;h3 id="dawn-to-dusk">Dawn to Dusk&lt;/h3>
&lt;p>The other thing that I learned in this whole lily episode is that the flower goes back to sleeping at dusk. And back to flowering again at dawn. There&amp;rsquo;s so much to learn in the surrounding, only if you spare some time to the little things with mother nature.&lt;/p>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20211004_151712791.jpg" alt="Lily status at dusk"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20211004_151712791.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lily status at dusk&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20211005_100011914.MP.jpg" alt="Lily the next day"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20211005_100011914.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lily the next day&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>Not sure how long this phenomenon is to last, but overall witnessing this whole process has been mesmerizing.&lt;/p>
&lt;p>This past week has been great. 🙏🏼&lt;/p></description></item><item><title>Human Society</title><link>https://researchut.com/blog/Human_Society/</link><pubDate>Sun, 03 Oct 2021 16:24:21 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Human_Society/</guid><description>&lt;p>In my past, I&amp;rsquo;ve had experiences that have had me thinking. My experiences have been mostly in the South Asian Indian Sub-Continent, so may not be fair to generalize it.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Help with finding a job: I&amp;rsquo;ve learnt many times, that when people reach out asking for help, say, for helping them with finding a job; it isn&amp;rsquo;t about you making a recommendation/referral for them. It, instead, implies that you are indirectly being asked to find and arrange them a job.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Gifts for people: My impression of offering a gift to someone is usually presenting them with something I&amp;rsquo;ve found useful and dear to me. This is irrespective of whether the gift is a brand new unpacked item or a used (immaculate) one. On the contrary, many people define a gift as an item which is unpacked and one that comes with its sealed original packaging.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Insect Camouflage Plant</title><link>https://researchut.com/blog/Insect_Camouflage_Plant/</link><pubDate>Wed, 07 Jul 2021 19:57:12 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Insect_Camouflage_Plant/</guid><description>&lt;p>I was quite impressed by the ability of this insect; yet to be. The way it has camouflaged itself is mesmerizing. I&amp;rsquo;ll let the video do the talking as this one is going to be difficult to express in words.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/1YE_gYggKPA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div></description></item><item><title>Plant Territorial Behavior</title><link>https://researchut.com/blog/Plant_Territorial_Behavior/</link><pubDate>Tue, 29 Jun 2021 22:35:19 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Plant_Territorial_Behavior/</guid><description>&lt;p>This blog post is about my observations of some of the plants in my home garden.&lt;/p>
&lt;p>While still a n00b on the subject, these notes are my observations and experiences over days, weeks and months. Thankfully, with the capability to take frequent pictures, it has been easy to do an assessment and generate a report of some of these amazing behaviors of plants, in an easy timeline order; all thanks to the EXIF data embedded.
This has very helpfully allowed me to record my, otherwise minor observations, into great detail; and make some sense out of it by correlating the data over time.&lt;/p>
&lt;p>It is an emotional experience. You see, plants are amazing. When I sow a sapling, water it, feed it, watch it grow, prune it, medicate it, and what not; I build up affection towards it.&lt;/p>
&lt;p>Though, at the same time, to me it is a strict relationship, not too attached; as in it doesn&amp;rsquo;t hurt to uproot a plant if there is a good reason. But still, I find some sort of association to it.&lt;/p>
&lt;p>With plants around, it feels I have a lot of lives around me. All prospering, communicating, sharing. And communicate they do. What is needed is just the right language to observe and absorb their signals and decipher what they are trying to say.&lt;/p>
&lt;h2 id="devastation">Devastation&lt;/h2>
&lt;p>How in this world, when you are caring for your plants, can it transform:&lt;/p>
&lt;h3 id="from-this">From This&lt;/h3>
&lt;p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20200719_113627_tigr.jpg" alt="Healthy Mulberry Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20200719_113627_tigr.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Mulberry Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20201105_142219_tigr.jpg" alt="Healthy Mulberry Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20201105_142219_tigr.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Mulberry Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/MVIMG_20200621_080239.jpg" alt="Healthy Bael Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/MVIMG_20200621_080239.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;h3 id="to-this">To This&lt;/h3>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/MVIMG_20201205_140903.jpg" alt="Dead Mulberry Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/MVIMG_20201205_140903.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dead Mulberry Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210329_103803361.jpg" alt="Very Sick Bael Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210329_103803361.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Very Sick Bael Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>With emotions involved, this can be an unpleasant experience.&lt;/p>
&lt;p>Bael is a dear plant to me. The plant as a whole has religious values (Shiva). As well, its fruits have lots of health benefits, especially for the intestines. Its leaves have a lot of medicinal properties.&lt;/p>
&lt;p>When I planted the Bael, there were a lot of emotions that went along.&lt;/p>
&lt;p>On the other hand, the Mulberry is something I put in with a lot of enthusiasm. Mulberries are now rare to find, especially in urban locations. For one, they have a very short shelf life; But more than that, the way lifestyles are heading towards, I was always worried if my children would ever have a day to see and taste these fruits.&lt;/p>
&lt;p>The mulberry that I planted, yielded twice; once very soon when I had planted and second, before it died. Infact, it died while during its second yield phase.&lt;/p>
&lt;p>It was quite saddening to see that happen. It made me wonder why it happened. I had been caring for the plants fairly well. Watering them timely, feeding them the right amount of nutrients. They were getting a good amount of sun.&lt;/p>
&lt;p>But still their health was deteriorating. And then the demise of the Mulberry. Many thoughts hit my mind.&lt;/p>
&lt;p>I consulted the claimed experts in the domain, the &lt;em>maali&lt;/em>, the gardener. I got a very vague answer; there must be termites in the soil. It didn&amp;rsquo;t make much sense to me. I mean if there are termites they&amp;rsquo;d hit day one. They won&amp;rsquo;t sleep for months and just wake up one fine day and start attacking the roots of particular plants; not all.&lt;/p>
&lt;p>I wasn&amp;rsquo;t convinced with the termite theory; But still, give the &lt;em>expert&lt;/em> the blind hand, I went with his word.&lt;/p>
&lt;p>When my mulberry was dead, I dug its roots. Looking for proof, to see if there were any termites, I uprooted it. But I couldn&amp;rsquo;t find any trace of termites. And the plant next to it was perfectly healthy and blossoming. So I was convinced that it wasn&amp;rsquo;t the termite but something else.&lt;/p>
&lt;p>But else what ? I still didn&amp;rsquo;t have an answer to that.&lt;/p>
&lt;h2 id="thinking">Thinking&lt;/h2>
&lt;p>The Corona pandemic had embraced and there was a lot to worry, and worry not any, if you change the perspective. With plants around in my home, and our close engagement with them, and the helplessness that I felt after seeking help from the experts, it was time again; to build up some knowledge on the subject.&lt;/p>
&lt;p>But how ? How do you go about a subject you have not much clue about ? A subject which has always been around in the surrounding but very seldom have I dedicated &lt;em>focused thought&lt;/em> to it. To be honest, the initial thought of diving on the subject made me clueless. I had no idea where to begin with. But, so, as has been my past history, I chose to take it as a &lt;em>curiosity&lt;/em>.&lt;/p>
&lt;p>I gathered some books, skimmed through a couple of pages. Majority of the books I got hold of were about &lt;em>&lt;strong>DIYs and How to do Home Gardening&lt;/strong>&lt;/em> types. It was a decent introduction to a novice but my topic of curiosity was different.&lt;/p>
&lt;p>Thankfully, with the Internet, and YouTube®️ in particular, a lot of good stuff is available as documentary videos. While going through some, I came across a video which mentioned about &lt;strong>carnivore plants&lt;/strong>. Like, for example, this one.
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/carnivore_plant.jpeg" alt="Carnivore Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/carnivore_plant.jpeg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Carnivore Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Z08FhT3-cJc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;p>This got me thinking that there could be a possibility of something similar, that did the fate to my Mulberry plant. But who did it ? And how to dive further on this suspicion ? And most of all, if that &lt;em>thought of possibility&lt;/em> was actually the &lt;em>reality&lt;/em>. Or was I just hitting in the dark ?&lt;/p>
&lt;h2 id="beginning">Beginning&lt;/h2>
&lt;p>To put some perspective, here&amp;rsquo;s how it started. When we moved into our home, the gardener put in a couple of plants stock, as part of the property handover. Now, I don&amp;rsquo;t exactly recollect the name of the plants that came in stock, neither English nor Hindi; But at my neighbor&amp;rsquo;s place, the plant is still there.&lt;/p>
&lt;p>Here are some of the pictures of this beauty. But don&amp;rsquo;t just go by the looks as looks can be deceiving
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210427_095928.jpg" alt="Dominating Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210427_095928.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210427_095959.jpg" alt="Dominating Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210427_095959.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210427_100016.jpg" alt="Dominating Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210427_100016.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>We hadn&amp;rsquo;t put any serious thought about the plants we were offered by the gardener. After all, we never had ever thought of any mishap either.&lt;/p>
&lt;h2 id="plants-we-planted">Plants we planted&lt;/h2>
&lt;p>Apart from what was offered by the builder/gardener as part of the property handover, in over the next 6 months of we moving in, I planted 3 tree type plants.&lt;/p>
&lt;ol>
&lt;li>Mulberry&lt;/li>
&lt;li>Bael&lt;/li>
&lt;li>Rudraksha&lt;/li>
&lt;/ol>
&lt;p>The Mulberry, as I have described so far, died a tragic death.&lt;/p>
&lt;p>Bael, on the other hand, fought hard. But very little did we know that the plant was struggling the fight. Our impression was that we must have been given a bad breed of the plant. Or maybe the termite theory had some truth.&lt;/p>
&lt;p>For the Rudraksha plant, the growth was slow. This was the very first time I had seen a Rudraksha plant, so I had no clue of what its growth rate could be, and what to expect out of it. I wasn&amp;rsquo;t sure if the local climate suited the plant. A quick search showed no objections to the plant in the local climate, but that was it. So my theory has been to put in the plant, and observe.&lt;/p>
&lt;p>Here&amp;rsquo;s what my Rudraksha plant looked like during the initial days/weeks of its settlement&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20200621_080227.jpg" alt="Rudraksha Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20200621_080227.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rudraksha Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h2 id="the-hint">The Hint&lt;/h2>
&lt;p>Days passed and so on. Not much had progressed in gathering information. The plant&amp;rsquo;s health was usual; deteriorating at a slow pace.&lt;/p>
&lt;p>On day, thinking of the documentaries I had been watching, it hit my mind about the plant behavior.&lt;/p>
&lt;ul>
&lt;li>Plants can be &lt;strong>Carnivores&lt;/strong>.&lt;/li>
&lt;li>Plants can be &lt;strong>Aggressive&lt;/strong>.&lt;/li>
&lt;li>Plants can be &lt;strong>Invaders&lt;/strong>.&lt;/li>
&lt;li>Plants can be &lt;strong>Territorial&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;p>There are many plants where their aggression can be witnessed with bare human eyes. Like creepers. Some of them are good at spreading tentacles, grabbing onto other plants&amp;rsquo; stems and branches and spread above it. This was my hint from the documentaries. That&amp;rsquo;s one of the many ways plants set their dominance. That is what hit my mind that if plants are aggressive on the out, underneath the soil, they should be having similar behavior.&lt;/p>
&lt;p>I mean, what we see as humans is just a part of the actual plant. More than half of the actual plant is usually underneath the soil, in most plants.&lt;/p>
&lt;p>So there&amp;rsquo;s a high chance to get more information out, if you dig the soil and look the roots.&lt;/p>
&lt;h2 id="the-digging">The Digging&lt;/h2>
&lt;p>As I mentioned earlier, I do establish &lt;em>bindings, emotions and attachments&lt;/em>. But not much usually comes in the way to &lt;em>curiosity&lt;/em>.&lt;/p>
&lt;p>To dig further on the theory that the problem was elsewhere, with within the plants ecosystem, we needed to pick on another subject - &lt;em>the plant&lt;/em>.&lt;/p>
&lt;p>And the plant we chose was the plant which was planted in the initial offering to us, when we moved into our home. It was the same plant breed which was neighboring all our newly planted trees: &lt;strong>Rudraksha, Mulberry and Bael&lt;/strong>.&lt;/p>
&lt;p>If you look closely into the pictures above of these plants, you&amp;rsquo;ll notice the stem of another plant, the Territorial Dominator, is close-by to these 3 plants. That&amp;rsquo;s because the gardener put in a good number of them to get his action item complete.&lt;/p>
&lt;p>So we chose to dig and uproot one of &lt;em>those plant&lt;/em> to start with. Now, while they may look gentle on the outside, with nice red colored tiny flowers, these plants were giants underneath. Their roots were huge. It took some sweat shredding to single-handedly remove them.&lt;/p>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210212_110858.jpg" alt="Dominating Plant Uprooted"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210212_110858.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant Uprooted&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210212_110902.jpg" alt="Dominating Plant Uprooted"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210212_110902.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant Uprooted&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210212_110958.jpg" alt="Dominating Plant Uprooted"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210212_110958.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant Uprooted&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20210212_111002.jpg" alt="Dominating Plant Uprooted"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20210212_111002.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dominating Plant Uprooted&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;h2 id="today-is-brighter">Today is brighter&lt;/h2>
&lt;h3 id="bael">Bael&lt;/h3>
&lt;p>I&amp;rsquo;ll let the pictures do the initial talking today.&lt;/p>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210423_102119635.jpg" alt="Healthy Bael"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210423_102119635.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210606_101730160.jpg" alt="Healthy Bael"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210606_101730160.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/vlcsnap-2021-06-27-21h34m28s092.png" alt="Healthy Bael"/>
&lt;/div>
&lt;a href="https://researchut.com/images/vlcsnap-2021-06-27-21h34m28s092.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/vlcsnap-2021-06-27-21h34m42s221.png" alt="Healthy Bael"/>
&lt;/div>
&lt;a href="https://researchut.com/images/vlcsnap-2021-06-27-21h34m42s221.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/vlcsnap-2021-06-27-21h35m03s004.png" alt="Healthy Bael"/>
&lt;/div>
&lt;a href="https://researchut.com/images/vlcsnap-2021-06-27-21h35m03s004.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Healthy Bael&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>The above ones are pictures of the same Bael plant, which had struggled to live, for almost 14 months. Back then, this plant was starved of its resources. It was dying a slow death out of starvation. After we uprooted the other dominant species, the Bael has recovered and has regained its charm.&lt;/p>
&lt;p>In the pictures above of the Bael plant, you can clearly mark out the difference in its stem. The dark colored one is from its months of struggle, while the bright green is from now where it is well nourished and regained its health.&lt;/p>
&lt;h3 id="mulberry">Mulberry&lt;/h3>
&lt;p>As for the Mulberry, I couldn&amp;rsquo;t save it. But I later managed to get another one. But it turns out I didn&amp;rsquo;t take good, full length pictures of the new mulberry when I planted. The only picture I have is this:
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/MVIMG_20210303_120806.jpg" alt="Second Mulberry Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/MVIMG_20210303_120806.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Second Mulberry Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
I recollect when I brought it home, it was around 1 - 1.5 feet in length.&lt;/p>
&lt;p>This is where I have it today: &lt;em>Majestically standing, 12 feet and counting&lt;/em>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/vlcsnap-2021-06-27-21h35m41s529.png" alt="Second Mulberry Plant 7 feet tall"/>
&lt;/div>
&lt;a href="https://researchut.com/images/vlcsnap-2021-06-27-21h35m41s529.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Second Mulberry Plant 7 feet tall&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;h3 id="rudraksha">Rudraksha&lt;/h3>
&lt;p>Then:
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/IMG_20200621_080227.jpg" alt="Rudraksha Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/IMG_20200621_080227.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rudraksha Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>And now:&lt;/p>
&lt;p>I feel quite happy about
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210407_124113300.MP.jpg" alt="Rudraksha Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210407_124113300.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rudraksha Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210605_101755879.MP.jpg" alt="Rudraksha Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210605_101755879.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rudraksha Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PXL_20210606_101648641.MP.jpg" alt="Rudraksha Plant"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PXL_20210606_101648641.MP.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rudraksha Plant&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;video width=100% controls> //autoplay off
&lt;!-- &lt;video width=100% controls autoplay> //autoplay on -->
&lt;source src="https://researchut.com/images/VID_20210629_085641.mp4.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;video width=100% controls> //autoplay off
&lt;source src="https://researchut.com/images/VID_20210629_085704.mp4.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;video width=100% controls> //autoplay off
&lt;source src="https://researchut.com/images/VID_20210629_085803.mp4.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;p>All these plants are on the very same soil with the very same care taker. What has changed is my experience and learning.&lt;/p>
&lt;h2 id="plant-co-existence">Plant Co-Existence&lt;/h2>
&lt;p>Plant co-existence is a difficult topic. My knowledge on plants is very limited in general, and co-existence is something tricky, unexplored, at times invisible (when underneath the soil). So it is a difficult topic. So far, what I&amp;rsquo;ve learnt is purely observations, experiences and hints from the documentaries.&lt;/p>
&lt;p>There surely are many many plants that co-exist very well. A good example is my Bael plant itself, which is healthily co-sharing its space with 2 other Croton plants. Same goes for the Rudraksha, which has a close-by neighbor in an Adenium and an Allamanda.&lt;/p>
&lt;p>The plant world is mesmerizing. How they &lt;em>behave, communicate and many many more signs&lt;/em>. There&amp;rsquo;s so much to observe, learn, explore and document. I hope to have more such observations and experiences to share 🙏&lt;/p></description></item><item><title>Kget Goodness</title><link>https://researchut.com/blog/Kget_Goodness/</link><pubDate>Mon, 24 May 2021 18:37:02 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Kget_Goodness/</guid><description>&lt;p>Why is it so hard to have a proper download manager in today&amp;rsquo;s day ? We had it in the previous decade. Or do tech giants self-proclaim that the world lives only in their cloud.&lt;/p>
&lt;p>At one point, there used to be great download managers for all major web browsers, either in-built, or external. Then came the latest trend with Chrome and Firefox, where they make it difficult to have an external download manager work proper. On either one&amp;rsquo;s extension store, I find it difficult to see a proper download manager.&lt;/p>
&lt;p>And I wonder what Google was consuming when making Google Takeout. They provide you with a specially crafted link for the downloads, and if for any reason your network gets lost, you are forced to redownload your takeout again. And with the pathetic download manager in Chrome and Firefox, an average Joe user would run in loops. THANK YOU GOOG.&lt;/p>
&lt;p>While I can understand the reason behind making the links &lt;em>time bound&lt;/em> and invalidating them as soon as the &lt;em>time expires&lt;/em>. But, enlighten your PMs that the world is not even. Not everyone has the same internet bandwidth. And admit that the download manager in your browser is crap. And then devise a better workflow and a product.&lt;/p>
&lt;h2 id="kget">KGET&lt;/h2>
&lt;p>Thankfully, there&amp;rsquo;s Kget in the KDE Suite. While there&amp;rsquo;s &lt;a href="https://bugs.kde.org/show_bug.cgi?id=426293#c29">insanity elsewhere&lt;/a>, luckily the &lt;code>kget&lt;/code> tool still can do nice things. &lt;em>nuff said&lt;/em>.
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/google-devs-takeout-1.png" alt="KGET to the rescue"/>
&lt;/div>
&lt;a href="https://researchut.com/images/google-devs-takeout-1.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>KGET to the rescue&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p></description></item><item><title>Setting Up a Secure Webapp</title><link>https://researchut.com/blog/Setting_Up_a_Secure_Webapp/</link><pubDate>Sat, 22 May 2021 15:44:48 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Setting_Up_a_Secure_Webapp/</guid><description>&lt;p>As a person who prefers full access to data in the simplest format, while at the same time having it useful with latest technologies, my quest for trying things out is an ongoing activity.&lt;/p>
&lt;p>Earlier, I &lt;a href="https://researchut.com/blog/Catching_Up_Your_Sources/">blogged&lt;/a> about my needs of collating news feeds in a simple format, readily accessible offline, while still being useful and aligned with the modern paradigm.&lt;/p>
&lt;p>In today&amp;rsquo;s age, the other common aspect of our life, is digitization of moments. With the advent of great technology and affordable economics, the world now has access to great devices to capture moments in digital form. Most people, these days, are equipped with smart devices, like mobile phones, that come with pretty good image capturing devices. Our lives, our societies, how we interact; a lot of it is now built around the assumption of smart devices and digital services.&lt;/p>
&lt;p>A lot of good things have happened of it. We are now able to send messages to people, securely, in a matter of seconds. We are now able to capture moments, which otherwise we&amp;rsquo;d often miss; all thanks to devices like smart mobile phones that most of all carry almost all along with us.&lt;/p>
&lt;p>In this regard, we are quite indebted to the technology revolution that has improved life styles all over. Of course, like every coin has a flip side, thus too, too much of obsession with digital life, also has its drawbacks. A simple reminder to self should always be about what a human life is designed for and try to live by its rules.&lt;/p>
&lt;h3 id="moments">Moments&lt;/h3>
&lt;p>Given the tools general availability, we are all more used to capturing moments. Once upon a time, taking a photo meant going to a photo studio.&lt;/p>
&lt;p>Then came a generation where we&amp;rsquo;d have personal devices with roll films, to which we captured the moments. And then get it processed from a photo developing service provider. And that is when we&amp;rsquo;d know which all moments came out correct and which ones were spoilt. In such cases, there&amp;rsquo;s always the &lt;em>wish I could have that moment again&lt;/em>.&lt;/p>
&lt;p>Thankfully, now, in our current generation, we have the liberty to take pictures and validate them almost immediately. We also have the flexibility to take multiple shots of the moment and do the filtering later. There&amp;rsquo;s also many intelligent and invasive services, all mostly provided free, to help you organize these moments; at a small cost of keeping an eye on your life activity.&lt;/p>
&lt;p>In a summary, mankind, now, generates lots and lots of data. So much lot that now even mammoths like Google are forced to make a call whether it is more profitable to sniff user activity while providing them a service for free, or ask people to pay otherwise too.&lt;/p>
&lt;h3 id="privacy">Privacy&lt;/h3>
&lt;p>Many of us are wary of the amount of personal data we generate, which is our asset; and how the big tech giants want a piece of it in the name of free services. And in such quest, free aside, there&amp;rsquo;s always a lookout for privacy savvy tools that can help us draw a bold line in between &lt;em>Public&lt;/em> and &lt;em>Private&lt;/em>&lt;/p>
&lt;h3 id="google-photos">Google Photos&lt;/h3>
&lt;p>Google Photos has been a great tool. The way it organizes, siphons and present your data is simply amazing. No good would have been the photos taken, if they weren&amp;rsquo;t easily searchable, organized, annotated, and presented.&lt;/p>
&lt;p>But Google Photos is proprietary and invasive. The amount of information they have access to should be a concern to all people. For services that invade so much, the world needs &lt;strong>Free Services&lt;/strong>.&lt;/p>
&lt;h3 id="photoprism">PhotoPrism&lt;/h3>
&lt;p>I only came across this project around a month ago, while the project has been around since 2019. So far, in my exploration, this is one of the best Free Software tools to manage and organize my digital photos. The other favorite tool that I regularly depend on is &lt;strong>Digikam&lt;/strong> and it still is a gem.&lt;/p>
&lt;p>In a gist, PhotoPrism aims to be the equivalent of Google Photos, for the privacy savvy people.&lt;/p>
&lt;p>As of date, it has a decent list of features available. And for some of the missing ones, I&amp;rsquo;ve come up with a fairly okay workflow with other tools, which is one of the reasons of this blog post.&lt;/p>
&lt;p>PhotoPrism is a web app, written in the Go Programming Language. Its layout and workflow as a Photo Management application is similar to Google Photos. It is very performant compared to other applications. Since it is a Progressive Web App, access through a Laptop, Tablet or Mobile is almost the same. It uses &lt;em>Google TensorFlow&lt;/em> for some of its features and thus you feel like using Google Photos in some regard.&lt;/p>
&lt;p>Some shortcomings and workarounds&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Facial Recognition: To date, facial recognition is a planned feature. But this was easy to tackle given that Digikam has pretty solid facial recognition. So I use Digikam to detect, recognize and annotate faces. And then PhotoPrism is happy enough to use those annotations and present relevant data.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>HTTP Web App: The upstream project has done a good job of making use of Docker container technology in presenting this web app solution. A software solution, the equivalent of a Google Photos, does need a heavyweight config. In free software, it is all about reusing available tools. PhotoPrism makes use of tools like &lt;em>MySQL, Vue.js, TensorFlow, GoLang, GoLibs&lt;/em> and strives to provide a single package solution, all thanks to Docker containers.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In its current offering, PhotoPrism is run as a HTTP Web App. I wanted to have an added layer of security on top of it. And thus run an nginx reverse proxy on top of it. Along with it, I run the proxy service on HTTPS, thus making all traffic from clients to the proxy encrypted. I also wanted an added layer of HTTP AUTH on top, so I explored some options and finally settled down with &lt;a href="https://github.com/atomx/nginx-http-auth-digest">http-auth-digest&lt;/a>&lt;/p>
&lt;p>Also, in the current implementation, PhotoPrism doesn&amp;rsquo;t have a strong notion of normal and private photos in its data organization. I wanted normal photos available under a standard auth realm and private photos under a different realm. And along with a different realm, I also wanted some added security directives for it. So far, it looks like I&amp;rsquo;ve put together a decent solution with the help of &lt;em>nginx&lt;/em>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>First of all, since the port from the host is forwarded to the docker instance, that needed to be controlled. Instead of the default of listening on all interfaces, I changed it to loopback only. Because my primary and only interface is going to be the &lt;em>nginx reverse proxy&lt;/em>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Setup nginx with a self-signed certificate to have all communication encrypted.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Setup nginx as a reverse proxy to talk to PhotoPrism.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>server &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 80;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#f92672">[&lt;/span>::&lt;span style="color:#f92672">]&lt;/span>:80;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server_name lenovo;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#ae81ff">302&lt;/span> https://$host$request_uri;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rewrite ^ https://$http_host$request_uri? permanent; &lt;span style="color:#75715e"># force redirect http to https&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server_tokens off;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>listen &lt;span style="color:#ae81ff">443&lt;/span> ssl http2 default_server;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>listen &lt;span style="color:#f92672">[&lt;/span>::&lt;span style="color:#f92672">]&lt;/span>:443 ssl http2 default_server;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server_tokens off;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server_name lenovo;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client_max_body_size 500M;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_expires 900s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_evasion_time 5s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_replays 500;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>location /private &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest &lt;span style="color:#e6db74">&amp;#39;abc&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_user_file /etc/nginx/htdigest;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_expires 900s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_evasion_time 5s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_replays 500;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass http://localhost:2342/private;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>location /discover &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest &lt;span style="color:#e6db74">&amp;#39;abc&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_user_file /etc/nginx/htdigest;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_expires 900s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_evasion_time 5s;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_replays 500;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass http://localhost:2342/discover;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>location / &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Host $host;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffering off;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_http_version 1.1;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Upgrade $http_upgrade;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Connection &lt;span style="color:#e6db74">&amp;#34;upgrade&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass http://localhost:2342;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_basic &lt;span style="color:#e6db74">&amp;#34;Priv&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_basic_user_file /etc/nginx/htpasswd;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>nginx packaging: I was so happy to see the simplicity of the nginx packaging in Debian. Becuase &lt;code>http-auth-digest&lt;/code> is not upstream, it needs to be pulled in separately and compiled. I was happy to see how simple the packaging structure of nginx in Debian is. It was just a matter of putting in the module in the right modules location, which as structured such in the packaging falls under the debian/ packaging sub-folder, that any future upgrades will be quite easy to manage.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>http-auth-digest: I&amp;rsquo;d love to see &lt;code>http-auth-digest&lt;/code> module be part of the upstream package. While I&amp;rsquo;m a web n00b, I felt this module perfect for my use case. From what I&amp;rsquo;ve understood, set up and tested so far, this module fills in all my requirements; which is more of like a session management.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>With the combined setup in place, &lt;code>https://host&lt;/code> is authenticated with a different set of credentials. On the other hand, &lt;code>https://host/discover and /private&lt;/code> get covered with a different set of credentials and policies. While, this will continue to be an ongoing effort and audit of the services that I build, so far now, I feel this is in decent shape that I can use it as my daily driver.&lt;/p>
&lt;p>The end result is:
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PhotoPrism_auth.jpg" alt="nginx auth prompt"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PhotoPrism_auth.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>nginx auth prompt&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PhotoPrism_list.jpg" alt="PhotoPrism Photo List"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PhotoPrism_list.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>PhotoPrism Photo List&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/PhotoPrism_Menu.jpg" alt="PhotoPrism Menu"/>
&lt;/div>
&lt;a href="https://researchut.com/images/PhotoPrism_Menu.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>PhotoPrism Menu&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;h2 id="updates">Updates&lt;/h2>
&lt;ul>
&lt;li>Things can really get frustrating at times. These days, it is Google that contributes to it. &lt;a href="https://bugs.chromium.org/p/chromium/issues/detail?id=544244">https://bugs.chromium.org/p/chromium/issues/detail?id=544244&lt;/a>
&lt;ul>
&lt;li>It is is now fair to say that Google is big enough to rewrite all the standards. Or at least break them. Or best, their arrogance of it. This bug report is a fine example of what other ways it could have been dealt.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Catching Up Your Sources</title><link>https://researchut.com/blog/Catching_Up_Your_Sources/</link><pubDate>Mon, 19 Apr 2021 13:20:58 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Catching_Up_Your_Sources/</guid><description>&lt;p>I&amp;rsquo;ve mostly had the preference of controlling my data rather than depend on someone else. That&amp;rsquo;s one reason why I still believe email to be my most reliable medium for data storage, one that is not plagued/locked by a single entity. If I had the resources, I&amp;rsquo;d prefer all digital data to be broken down to its simplest form for storage, like email format, and empower the user with it i.e. &lt;strong>their data&lt;/strong>.&lt;/p>
&lt;p>Yes, there are free services that are indirectly forced upon common users, and many of us get attracted to it. Many of us do not think that the information, which is shared for the free service in return, is of much importance. Which may be fair, depending on the individual, given that they get certain services without paying any direct dime.&lt;/p>
&lt;h3 id="new-age-communication">New age communication&lt;/h3>
&lt;p>So first, we had email and usenet. As I mentioned above, email was designed with fine intentions. Intentions that make it stand even today, independently.&lt;/p>
&lt;p>But not everything, back then, was that great either. For example, instant messaging was very closed and centralised then too. Things like: ICQ, MSN, Yahoo Messenger; all were centralized. I wonder if people still have access to their ICQ logs.&lt;/p>
&lt;p>Not much has chagned in the current day either. We now have domination by: Facebook Messenger, Google &lt;em>Whatever the new marketing term they introdcue&lt;/em>, WhatsApp, Telegram, Signal etc. To my knowledge, they are all centralized.&lt;/p>
&lt;p>Over all this time, I&amp;rsquo;m yet to see a product come up with good (business) intentions, to really empower the end user. In this information age, the most invaluable data is &lt;strong>user activity&lt;/strong>. That&amp;rsquo;s one data everyone is after. If you decline to share that bit of &lt;em>free&lt;/em> data in exchange for the free services, mind you, that that &lt;strong>free service&lt;/strong> like Facebook, Google, Instagram, WhatsApp, Truecaller, Twitter; none of it would come to you at all. Try it out.&lt;/p>
&lt;p>So the reality is that while you may not be valuating the data you offer in exchange correctly, there&amp;rsquo;s a lot that is reaped from it. But still, I think each user has (and should have) the freedom to opt in for these tech giants and give them their personal bit, for free services in return. That is a decent barter deal. And it is a choice that one if free to choose&lt;/p>
&lt;h3 id="retaining-my-data">Retaining my data&lt;/h3>
&lt;p>I&amp;rsquo;m fond of keeping an archive folder in my mailbox. A folder that holds significant events in the form of an email usually, if documented. Over the years, I chose to resort to the email format because I felt it was more reliable in the longer term than any other formats.&lt;/p>
&lt;p>The next best would be plain text.&lt;/p>
&lt;p>In my lifetime, I have learnt a lot from the internet; so it is natural that my preference has been with it. Mailing Lists, IRCs, HOWTOs, Guides, Blog posts; all have helped. And over the years, I&amp;rsquo;ve come across hundreds of such content that I&amp;rsquo;d always like to preserve.&lt;/p>
&lt;p>Now there are multiple ways to preserving data. Like, for example, big tech giants. In most usual cases, your data for your lifetime, should be fine with a tech giant. In some odd scenarios, you may be unlucky if you relied on a service provider that went bankrupt. But seriously, I think users should be fine if they host their data with Microsoft, Google etc; as long as they abide by their policies.&lt;/p>
&lt;p>There&amp;rsquo;s also the catch of alignment. As the user, you should ensure to align (and transition) with the product offerings of your service provider. Otherwise, what may look constant and always reliable, will vanish in the blink of an eye. I guess Google Plus would be a good example. There was some Google Feed service too. Maybe Google Photos in the near &lt;del>decade&lt;/del> future, just like Google Picasa in the previous (or current) decade.&lt;/p>
&lt;h3 id="history-what-is">History what is&lt;/h3>
&lt;p>On the topic of retaining information, lets take a small drift. I still admire our ancestors. I don&amp;rsquo;t know what went in their mind when they were documenting events in the form of scriptures, carvings, temples, churches, mosques etc; but one things for sure, they were able to leave a fine means of communication. They are all gone but a large number of those events are evident through the creations that they left. Some of those events have been strong enough that further rulers/invaders have had tough times trying to wipe it out from history. Remember, history is usually not the truth, but the statement to be believed by the teller. And the teller is usually the survivor, or the winner you may call.&lt;/p>
&lt;p>But still, the information retention techniques were better.&lt;/p>
&lt;p>I haven&amp;rsquo;t visited, but admire whosoever built the &lt;a href="https://en.wikipedia.org/wiki/Kailasa_Temple,_Ellora">Kailasa Temple, Ellora&lt;/a>, without which, we&amp;rsquo;d be made to believe what not by all invaders and rulers of the region. But the majestic standing of the temple, is a fine example of the history and the events that have occured in the past.
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Ellora_Temple_1.jpg" alt="Ellora Temple - The majectic carving believed to be carved out of a single stone"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Ellora_Temple_1.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Ellora Temple - The majectic carving believed to be carved out of a single stone&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>Dominance has the power to rewrite history and unfortunately that&amp;rsquo;s true and it has done its part. It is just that in a mere human&amp;rsquo;s defined lifetime, it is not possible to witness the transtion from &lt;em>current&lt;/em> to &lt;em>history&lt;/em>, and say that I was there then and I&amp;rsquo;m here now, and this is not the &lt;em>reality&lt;/em>.&lt;/p>
&lt;p>And if not &lt;em>dominance&lt;/em>, there&amp;rsquo;s always the other bit, &lt;em>hearsay&lt;/em>. With it, you can always put anything up for dispute. Because there&amp;rsquo;s no way one can go back in time and produce a fine evidence.&lt;/p>
&lt;p>There&amp;rsquo;s also a part about &lt;em>religion&lt;/em>. Religion can be highly sentimental. And religion can be a solid way to get an agenda going. For example, in India - a country which today consitutionally is a secular country, there have been multiple attempts to discard the belief, that never ever did the thing called &lt;a href="https://en.wikipedia.org/wiki/Ramayana">Ramayana&lt;/a> exist. That the &lt;a href="https://en.wikipedia.org/wiki/Adam%27s_Bridge">Rama Setu&lt;/a>, nicely reworded as &lt;strong>Adam&amp;rsquo;s Bridge&lt;/strong> by who so ever, is a mere result of science. Now Rama, or Hanumana, or Ravana, or Valmiki, aren&amp;rsquo;t going to come over and prove that that is true or false. So such subjects serve as a solid base to get an agenda going. And probably we&amp;rsquo;ve even succeeded in proving and believing that there was never an event like &lt;strong>Ramayana or the Mahabharata&lt;/strong>. Nor was there ever any empire other than the Moghul or the British Empire.&lt;/p>
&lt;p>But yes, whosoever made the &lt;em>&lt;strong>Ellora Temple&lt;/strong>&lt;/em> or the &lt;a href="https://en.wikipedia.org/wiki/Nasik_Caves">many&lt;/a> &lt;a href="https://en.wikipedia.org/wiki/Khajuraho_Group_of_Monuments">many&lt;/a> &lt;a href="https://en.wikipedia.org/wiki/Ajanta_Caves">more&lt;/a> of such creations, did a fine job of making a dent for the future, to know of what the history possibly could also be.&lt;/p>
&lt;h3 id="enough-of-the-drift">Enough of the drift&lt;/h3>
&lt;p>So, in my opinion, having events documented is important. It&amp;rsquo;d be nice to have skills documented too so that it can be passed over generations but that&amp;rsquo;s a debatable topic. But events, I believe should be documented. And documented in the best possible ways so that its existence is not diminished.&lt;/p>
&lt;p>A documentation in the form of certain carvings on a rock is far more better than links and posts shared on Facebook, Twitter, Reddit etc. For one, these are all corporate entities with vested interests and can pretext excuse in the name of compliance and conformance.&lt;/p>
&lt;p>So, for the helpless state and generation I am in, I felt email was the best possible independent form of data retention in today&amp;rsquo;s age. If I really had the resources, I&amp;rsquo;d not rely on digital age. This age has no guarantee of retaining and recording information in any reliable manner. Instead, it is just mostly junk, which is manipulative and changeable, conditionally.&lt;/p>
&lt;h3 id="email-and-rss">Email and RSS&lt;/h3>
&lt;p>So for my communication, I like to prefer emails over any other means. That doesn&amp;rsquo;t mean I don&amp;rsquo;t use the current trends. I do. But this blog is mostly about penning my desires. And desire be to have communication over email format.&lt;/p>
&lt;p>Such is the case that for information useful over the internet, I crave to have it formatted in email for archival.&lt;/p>
&lt;p>RSS feeds is my most common mode of keeping track of information I care about. Not all that I care for is available in RSS feeds but hey such is life. And adaptability is okay.&lt;/p>
&lt;p>But my preference is still RSS.&lt;/p>
&lt;p>So I use RSS feeds through a fine software called &lt;a href="https://github.com/feed2imap/feed2imap">feed2imap&lt;/a>. A software that fits my bill fairly well.&lt;/p>
&lt;p>feed2imap is:&lt;/p>
&lt;ul>
&lt;li>An rss feed news aggregator&lt;/li>
&lt;li>Pulls and extracts news feeds in the form of an email&lt;/li>
&lt;li>Can push the converted email over pop/imap&lt;/li>
&lt;li>Can convert all image content to email mime attachment&lt;/li>
&lt;/ul>
&lt;p>In a gist, it makes the online content available to me offline in the most admired &lt;strong>email format&lt;/strong>&lt;/p>
&lt;p>In my mail box, in today&amp;rsquo;s day, my preferred email client is Evolution. It does a good job of dealing with such emails (rss feed items). An image example of accessing the rrs feed item through it is below
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Evoltution-GNOME-flex.png" alt="RSS News Item through Evolution"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Evoltution-GNOME-flex.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>RSS News Item through Evolution&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
The good part is that my actual data is always independent of such MUAs. Tomorrow, as technology - trends - economics evolve, something new would come as a replacement but my data would still be mine.&lt;/p>
&lt;h3 id="mobile-trends">Mobile trends&lt;/h3>
&lt;p>Trends have shown. Data mobility is a commodity expectation now. As such, I wanted to have something fill in that gap for me. So that I could access my information - which I&amp;rsquo;ve preferred in a format - easily in today&amp;rsquo;s trendy options.&lt;/p>
&lt;p>I tried multiple options on my current preferred platform of choice for mobiles, i.e. Android. Finally I came across Aqua Mail, which fits in most of my requirements.&lt;/p>
&lt;p>Aqua Mail does&lt;/p>
&lt;ul>
&lt;li>Connect to my laptop over imap&lt;/li>
&lt;li>Can sync the requested folders&lt;/li>
&lt;li>Can sync requested data for offlince accessibility&lt;/li>
&lt;li>Can present the synchronized data in a quite flexible and customizable manner, to match my taste&lt;/li>
&lt;li>Has a very extensible User Interface, allowing me to customize it to my taste&lt;/li>
&lt;/ul>
&lt;p>Pictures can do a better job of describing my english words.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Aqua_Mail_Message_List.jpg" alt="Aqua Mail Message List Interface"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Aqua_Mail_Message_List.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Aqua Mail Message List Interface&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Aqua_Mail_Normail.jpg" alt="Aqua Mail Message View Normal"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Aqua_Mail_Normail.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Aqua Mail Message View Normal&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Aqua_Mail_Zoomed.jpg" alt="Aqua Mail Message View Zoomed - Fit to Screen"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Aqua_Mail_Zoomed.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Aqua Mail Message View Zoomed - Fit to Screen&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>All of this done with no dependence on network connectivity, post the sync. And all information is stored is best possible simple format.&lt;/p></description></item><item><title>Wayland KDE X11</title><link>https://researchut.com/blog/Wayland_KDE_X11/</link><pubDate>Fri, 26 Feb 2021 17:08:26 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Wayland_KDE_X11/</guid><description>&lt;h2 id="kde-impressions">KDE Impressions&lt;/h2>
&lt;p>These days, I often hear a lot about Wayland. And how much of effort is being put into it; not just by the Embedded world but also the usual Desktop systems, namely KDE and GNOME.&lt;/p>
&lt;p>In recent past, I switched back to KDE and have been (very) happy about the switch. Even though the KDE 4 (and initial KDE 5) debacle had burnt many, coming back to a usable KDE desktop is always a delight. It makes me feel home with the elegance, while at the same time the flexibility, it provides. It feels so nice to draft this blog article from Kwrite + VI Input Mode&lt;/p>
&lt;p>Thanks to the great work of the &lt;em>Debian KDE Team&lt;/em>, but &lt;a href="https://www.preining.info/">Norbert Preining&lt;/a> in particular, who has helped bring very up-to-date KDE packages into Debian. Right now, I&amp;rsquo;m on a &lt;strong>Plamsa 5.21.1&lt;/strong> desktop, which is recent by all standards.&lt;/p>
&lt;h2 id="wayland">Wayland&lt;/h2>
&lt;p>Almost all the places in the Linux world these days are busy with integrating Wayland as the primary display service. Not sure what the current status on the GNOME side is but I definitely keep trying &lt;strong>KDE + Wayland&lt;/strong> with every release.&lt;/p>
&lt;p>I keep &lt;em>trying&lt;/em> with &lt;em>every release&lt;/em> because it still is not prime for daily use. And it makes me get back to X11, no matter how dated some may call. Fact is, X11 still shines to me as an end-user.&lt;/p>
&lt;p>Glitches with Wayland still are (Based on this week&amp;rsquo;s test on Plasma 5.21.1):&lt;/p>
&lt;ul>
&lt;li>Horrible performance compared to X11&lt;/li>
&lt;li>Very crashy, especially when hotplugging secondary display. Plasma would just crash. X11 is very resilient to such things, part of the reason I can think is the age of the codebase.&lt;/li>
&lt;li>Many many applications still need to be fixed for Wayland. Or Wayland needs to accomodate them in some way. XWayland does not really feel like the answer.&lt;/li>
&lt;/ul>
&lt;p>And while KDE keeps insisting users to switch to &lt;strong>Wayland&lt;/strong>, as that&amp;rsquo;s where all the &lt;a href="https://bugs.kde.org/show_bug.cgi?id=422552">new enhancements and fixes&lt;/a> are put in, someone like me still needs to stick to X11 for the time being. So to get my shiny new &lt;code>LG 27&amp;quot; 4K Monitor (3840x2160 60.00*+)&lt;/code> to work without too much glitch, I had to live with an alias:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ alias | grep xrandr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alias rrs_xrandr_lg&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#39;xrandr --output DP-1 --mode 3840x2160 --scale .75x.75&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>18:31 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="plasma-521">Plasma 5.21&lt;/h2>
&lt;p>On the brighter side, the Plasma 5.21.1 release brings some nice enhancements in other areas.&lt;/p>
&lt;ul>
&lt;li>I&amp;rsquo;m now able to make use of &lt;a href="https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/">tighter integration with systemd/cgroups&lt;/a>, with better organization and management of processes overall.&lt;/li>
&lt;li>The new Plasma theme, &lt;strong>Breeze Twilight&lt;/strong>, is a good blend of Light + Dark.&lt;/li>
&lt;/ul>
&lt;p>I also appreciate the work put in by &lt;a href="https://github.com/psifidotos/">Michail Vourlakos&lt;/a>. The KDE project is lucky to have a developer/designer like him. His vision and work into the KDE desktop is well beyond a writing by me.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ usystemctl status plasma-plasmashell.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>● plasma-plasmashell.service - KDE Plasma Workspace
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Loaded: loaded &lt;span style="color:#f92672">(&lt;/span>/usr/lib/systemd/user/plasma-plasmashell.service; enabled; vendor preset: enabled&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: active &lt;span style="color:#f92672">(&lt;/span>running&lt;span style="color:#f92672">)&lt;/span> since Fri 2021-02-26 18:34:23 IST; 13s ago
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Main PID: &lt;span style="color:#ae81ff">501806&lt;/span> &lt;span style="color:#f92672">(&lt;/span>plasmashell&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Tasks: &lt;span style="color:#ae81ff">21&lt;/span> &lt;span style="color:#f92672">(&lt;/span>limit: 18821&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Memory: 759.8M
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CPU: 13.706s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/plasma-plasmashell.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └─501806 /usr/bin/plasmashell --no-respawn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Feb &lt;span style="color:#ae81ff">26&lt;/span> 18:35:00 priyasi plasmashell&lt;span style="color:#f92672">[&lt;/span>501806&lt;span style="color:#f92672">]&lt;/span>: qml: recreating buttons
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Feb &lt;span style="color:#ae81ff">26&lt;/span> 18:35:21 priyasi plasmashell&lt;span style="color:#f92672">[&lt;/span>501806&lt;span style="color:#f92672">]&lt;/span>: qml: recreating buttons
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Feb &lt;span style="color:#ae81ff">26&lt;/span> 18:35:49 priyasi plasmashell&lt;span style="color:#f92672">[&lt;/span>501806&lt;span style="color:#f92672">]&lt;/span>: qml: recreating buttons
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Feb &lt;span style="color:#ae81ff">26&lt;/span> 18:35:57 priyasi plasmashell&lt;span style="color:#f92672">[&lt;/span>501806&lt;span style="color:#f92672">]&lt;/span>: qml: recreating buttons
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>18:36 ♒ ॐ ♅ ♄ ⛢ ☺ 😄
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="obs---open-build-service">OBS - Open Build Service&lt;/h2>
&lt;p>I should also thank the OpenSUSE folks for the &lt;a href="https://github.com/openSUSE/open-build-service">OBS work&lt;/a>. It has enabled the close equivalent (or better, in my experience) of &lt;em>PPAs for Debian&lt;/em>. And that is what has enabled developers like Norbert to easily and quickly be able to deliver the entire KDE suite.&lt;/p>
&lt;h3 id="obs---some-detail">OBS - Some detail&lt;/h3>
&lt;p>Christian asked for some more details on the OBS side of things, of my view. I&amp;rsquo;m updating this article with it because the comment system may not always be reliable and I hate losing content.&lt;/p>
&lt;p>Having been using OBS myself, and also others in the Debian community who are making use of it, I surely think we as project should consider making use of OBS.&lt;/p>
&lt;p>Given that OBS is &lt;strong>Free Software&lt;/strong>, it is a perfect fit for Debian. Gitlab is another example of what we&amp;rsquo;ve made available in Debian.&lt;/p>
&lt;p>OBS is divided into multiple parts&lt;/p>
&lt;ul>
&lt;li>OBS Server&lt;/li>
&lt;li>OBS DoD service&lt;/li>
&lt;li>OBS Publisher&lt;/li>
&lt;li>OBS Workers&lt;/li>
&lt;li>OBS Warden&lt;/li>
&lt;li>OBS Rep Server&lt;/li>
&lt;/ul>
&lt;p>For every Debian release I care about, I add an OBS project per release. So I have OBS projects for: Sid, Bullseye, Buster, Jessie.&lt;/p>
&lt;p>Now, say you have a package, &lt;code>foo&lt;/code> . You prep your package and enable all the releases that you want to build the package for. So the same package gets built, in separate clean environments, for every release I mentioned as an example above. You don&amp;rsquo;t have to manually trigger the build for every release/every architcture. You should add the release (as projects) in OBS, set their supported architectures, and then add those &lt;em>enabled release projets&lt;/em> as bits to your package.&lt;/p>
&lt;p>Every build involves:&lt;/p>
&lt;ul>
&lt;li>Creating a new chroot for each build&lt;/li>
&lt;li>Building the package&lt;/li>
&lt;/ul>
&lt;p>Builds can be scattered across multiple hosts, known as &lt;strong>workers&lt;/strong> in OBS terminology. Your workers are independent machine entities, supporting different architectures. The machines can be Bare-Metal ones, VMs, even containers. So this allows for very nice scale-in and scale-out. There may be auto-scaling too but that is something worth investigating.&lt;/p>
&lt;p>Think of things like cross architecture builds. Let&amp;rsquo;s assume the cloud vendors decide to donate resources to the Debian project. We could enable OBS worker instances on the respective clouds (different architectures) and plug them into the master OBS instance that Debian hosts. Fully distributed. Similarly, big hardware vendors willing to donate compute resources could house them in their premises and Debian could just easily establish a connection to them. All of this just a TCP connection away.&lt;/p>
&lt;p>So when I look at the features of OBS, from the point of view of Debian, I like it more. Extensibility won&amp;rsquo;t be an issue. Supporting a new Debian release would just be a matter of bootstrapping the Debian release as a project in OBS, and then all done. The single effort of setting of the target release project is a one time job, and then all can leverage it.&lt;/p>
&lt;p>The PPA was a long craved feature missing in Debian, in my opinion. OBS allows to not just fulfil that gap but also extend it in a very easy way.&lt;/p>
&lt;p>Andrew Lee had put in a &lt;a href="https://debconf20.debconf.org/talks/62-open-build-service-and-debian-packaging/">nice video presentation&lt;/a> about the same @ Debconf 20&lt;/p>
&lt;video width=100% controls>
&lt;source src="https://meetings-archive.debian.net/pub/debian-meetings/2020/DebConf20/62-open-build-service-and-debian-packaging.webm" type="video/webm">
Your browser does not support the video tag.
&lt;/video></description></item><item><title>First Telescope</title><link>https://researchut.com/blog/First_Telescope/</link><pubDate>Sat, 03 Oct 2020 13:57:17 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/First_Telescope/</guid><description>&lt;h2 id="curiosity">Curiosity&lt;/h2>
&lt;p>I guess this would be common to most of us.&lt;/p>
&lt;p>While I grew up, right from the childhood itself, the sky was always an intriguing view. The Stars, the Moon, the Eclipses; were all fascinating.&lt;/p>
&lt;p>As a child, in my region, religion and culture; the mythology also built up stories around it. Lunar Eclipses have a story of its own. During Solar Eclipses, parents still insist that we do not go out. And to be done with the food eating before/after the eclipse.&lt;/p>
&lt;p>Then there&amp;rsquo;s the &lt;strong>Hindu Astrology&lt;/strong> part, which claims its own theories and drags in mythology along. For example, you&amp;rsquo;ll still find the Hindu Astrology making recommendations to follow certain practices with the planets, to get auspicious personal results. As far as I know, other religions too have similar beliefs about the planets.&lt;/p>
&lt;p>As a child, we are told the Moon to be addressed as an Uncle (चंदा मामा). There&amp;rsquo;s also a &lt;a href="https://www.youtube.com/results?search_query=chanda+mama+door+ke">rhyme&lt;/a> around it, that many of us must have heard.&lt;/p>
&lt;p>And if you look at our god, &lt;em>&lt;strong>Lord Mahadev&lt;/strong>&lt;/em>, he&amp;rsquo;s got a &lt;a href="https://www.google.com/search?q=Why+Lord+Shiva+has+crescent&amp;amp;oq=Why+Lord+Shiva+has+crescent">crescent on his head&lt;/a>&lt;/p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/0.jpg" alt="Lord Mahadev"/>
&lt;/div>
&lt;a href="https://researchut.com/images/0.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lord Mahadev&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h3 id="reality">Reality&lt;/h3>
&lt;p>Fast-forward to today, as I grew, so did some of my understanding. It is fascinating how mankind has achieved so much understanding of our surrounding. You could go through the documentaries on Mars Exploration, for example; to see how the rovers are providing invaluable data.&lt;/p>
&lt;p>As a mere individual, there&amp;rsquo;s a limit to what one can achieve. But the questions flow in free.&lt;/p>
&lt;ul>
&lt;li>Is there life beyond us&lt;/li>
&lt;li>What&amp;rsquo;s out there in the sky&lt;/li>
&lt;li>Why is all this the way it is&lt;/li>
&lt;/ul>
&lt;h3 id="hobby">Hobby&lt;/h3>
&lt;p>The very first step, for me, for every such curiosity, has been to do the ground work, with the resources I have. To study on the subject. I have done this all my life. For example, I started into the Software domain as: &lt;code>A curiosity =&amp;gt; A Hobby =&amp;gt; A profession&lt;/code>&lt;/p>
&lt;p>Same was the case with some of the other hobbies, equally difficult as Astronomy, that I developed a liking for. Just did the ground work, studied on those topics and then applied the knowledge to further improve it and build up some experience.&lt;/p>
&lt;p>And star gazing came in no different. As a complete noob, had to start with the &lt;code>A B C&lt;/code> on the subject of Astronomy. Familiarize myself with the usual terms. As so on&amp;hellip;&lt;/p>
&lt;p>PS: Do keep in mind that not all hobbies have a successful end. For example, I always craved to be good with graphic designing, image processing and the likes, where I&amp;rsquo;ve always failed. Never was able to keep myself motivated enough. Similar was my experience when trying to learn playing a musical instrument. Just didn&amp;rsquo;t work out for me, then.&lt;/p>
&lt;p>There&amp;rsquo;s also a phase in it, where you fail and then learn from the failures and proceed further, and then eventually succeed. But we all like to talk about the successes. :-)&lt;/p>
&lt;h4 id="astronomy">Astronomy&lt;/h4>
&lt;p>So far, my impression has been that this topic/domain will not suit most of the people. While the initial attraction may be strong, given the complexity and perseverance that Astronomy requires, most people would lose interest in it very soon.&lt;/p>
&lt;p>Then there&amp;rsquo;s the &lt;em>realization&lt;/em> factor. If one goes with an expectation to get quick results, they may get disappointed. It isn&amp;rsquo;t like a &lt;em>point and shoot&lt;/em> device that&amp;rsquo;d give you results on the spot.&lt;/p>
&lt;p>There&amp;rsquo;s also the &lt;em>expectation&lt;/em> side of things. If you are a person more accustomed to taking pretty selfies, which always come right because the phone manufacturer does heavy processing on the images to ensure that you get to see the pretty fake self, for the most of the times; then star gazing with telescopes could be a frustrating experience altogether. What you get to see in the images on the internet will be very different than what you&amp;rsquo;d be able to see with your eyes and your basic telescope.&lt;/p>
&lt;p>There&amp;rsquo;s also the &lt;em>cost&lt;/em> aspect. The more powerful (and expensive) your telescope, the better your view.&lt;/p>
&lt;p>And all things aside, it still may get you lose interest, after you&amp;rsquo;ve done all the ground work and spent a good chunk of money on it. Simply because the object you are gazing at is more a &lt;em>still image&lt;/em>, which can quickly get boring for many.&lt;/p>
&lt;p>On the other hand, if none of the things obstruct, then the domain of Astronomy can be quite fascinating. It is a &lt;em>continuous learning&lt;/em> domain (reminds me of &lt;code>CI&lt;/code> in our software field these days). It is just the beginning for us here, and we hope to have a lasting experience in it.&lt;/p>
&lt;h4 id="the-internet">The Internet&lt;/h4>
&lt;p>I have been indebted to the internet right from the beginning. The internet is what helped me be able to achieve all I wanted. It is one field with no boundaries. If there is a will, there is a way; and often times, the internet is the way.&lt;/p>
&lt;ul>
&lt;li>I learnt computers over the internet.&lt;/li>
&lt;li>Learnt more about gardening and plants over the internet&lt;/li>
&lt;li>Learnt more about fish care-taking over the internet&lt;/li>
&lt;/ul>
&lt;p>And many many more things.&lt;/p>
&lt;p>Some of the communities over the internet are a great way to participation. They bridge the age gap, the regional gap and many more.&lt;/p>
&lt;p>For my Astronomy need, I was glad to see so many active communities, with great participants, on the internet.&lt;/p>
&lt;h3 id="telescope">Telescope&lt;/h3>
&lt;p>While there are multiple options to start star gazing, I chose to start with a telescope. But as someone completely new to this domain, there was a long way to go. And to add to that, the real life: &lt;em>&lt;strong>work + family&lt;/strong>&lt;/em>&lt;/p>
&lt;p>I spent a good 12+ months reading up on the different types of telescopes, what they are, their differences, their costs, their practical availability etc.&lt;/p>
&lt;p>The good thing is that the market has offerings for everything. From a &lt;em>very basic binocular&lt;/em> to a &lt;em>fully automatic Maksutov-Cassegrain&lt;/em> scope. It all would depend on your budget.&lt;/p>
&lt;h4 id="automatic-vs-manual">Automatic vs Manual&lt;/h4>
&lt;p>To make it easy for the users, the market has multiple options in the offering. One could opt-in for a cheap, basic and manually operated telescope; which would require the user to do a lot of ground study. On the other hand, users also have the option of automatic telescopes which do the hard work of locating and tracking the planetary objects.&lt;/p>
&lt;p>Either option aside, the end result of how much you&amp;rsquo;ll be able to observe the sky, still depends on many many more factors: Enthusiasm over time, Light Pollution, Clear Skies, Timing etc.&lt;/p>
&lt;p>PS: The planetary objects move at a steady pace. Objects you lock into your view now will be gone out of the FOV in just a matter of minutes.&lt;/p>
&lt;h4 id="my-telescope">My Telescope&lt;/h4>
&lt;p>After spending so much of the time reading up on types of telescopes, my conclusion was that a scope with &lt;em>&lt;strong>high aperture&lt;/strong>&lt;/em> and &lt;em>&lt;strong>focal length&lt;/strong>&lt;/em> was the way to go forward. This made me shorten the list to Dobsonians. But the Dobsonians aren&amp;rsquo;t a very cheap telescope, whether manual or automatic.&lt;/p>
&lt;p>My final decision made me acquire a &lt;code>6&amp;quot; Dobsonian Telescope&lt;/code>. It is a Newtonian Reflecting Telescope with a &lt;code>1200mm&lt;/code> focal length and &lt;code>150mm&lt;/code> diameter.&lt;/p>
&lt;p>Another thing about this subject is that most of the stuff you do in Astronomy; right from the telescope selection, to installation, to star gazing; most of it is DIY, so your mileage may vary with the end result and experience.&lt;/p>
&lt;p>For me, installation wasn&amp;rsquo;t very difficult. I was able to assemble the base Dobsonian mount and the scope in around 2 hours. But the installation manual, I had been provided with, was very brief. I ended up with one module in the mount wrongly fit, which I was able to fix later, with the help of online forums.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/dobsonian_mount.jpg" alt="Dobsonian Mount"/>
&lt;/div>
&lt;a href="https://researchut.com/images/dobsonian_mount.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Dobsonian Mount&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>In this image you can see that the side facing out, where the handle will go, is wrong. If fit this way, the handle will not withstand any weight at all.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/correct_panel_side.jpg" alt="Correct Panel Side"/>
&lt;/div>
&lt;a href="https://researchut.com/images/correct_panel_side.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Correct Panel Side&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>The right fix of the handle base board. In this image, the handle is on the other side that I&amp;rsquo;m holding. Because the initial fit put in some damage to the engineered wood, I fixed it up by sealing with some adhesive.&lt;/p>
&lt;p>With that, this is what my final telescope looks like.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/final_telescope.jpg" alt="Final Telescope"/>
&lt;/div>
&lt;a href="https://researchut.com/images/final_telescope.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Final Telescope&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h3 id="clear-skies">Clear Skies&lt;/h3>
&lt;p>While the telescope was ready, the skies were not. For almost next 10 days, we had no clear skies at all. All I could do was wait. Wait so much that I had forgotten to check on the skies. Luckily, my wife noticed clear skies this week for a single day. Clear enough that we could try out our telescope for the very first time.&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/me-first-attempt.jpg" alt="Me posing for a shot"/>
&lt;/div>
&lt;a href="https://researchut.com/images/me-first-attempt.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Me posing for a shot&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h4 id="telescope-1">Telescope&lt;/h4>
&lt;p>As I said earlier, in my opinion, it takes a lot of patience and perseverance on this subject. And most of the things here are DIY.&lt;/p>
&lt;p>To start with, we targeted the Moon. Because it is &lt;em>easy&lt;/em>. I pointed the scope to the moon, then looked into the finder scope to center it, and then looked through the eyepiece. And blank. Nothing out there. Turns out, the finder scope and the viewer&amp;rsquo;s angle weren&amp;rsquo;t aligned. This is common and the first DIY step, when you plan to use your telescope for viewing.&lt;/p>
&lt;p>Since our first attempt was unplanned and just random because we luckily spotted that the skies were clear, we weren&amp;rsquo;t prepared for this. Lucky enough, mapping the difference in the alignment, in the head, is not very difficult.&lt;/p>
&lt;p>After a couple of minutes, I could make out the point in the finder scope, where the object if projected, would show proper in the viewer.&lt;/p>
&lt;p>With that done, it was just mesmerizing to see the Moon, in a bit more detail, than what I&amp;rsquo;ve seen all these years of my life.&lt;/p>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/moon_1.jpg" alt="Moon"/>
&lt;/div>
&lt;a href="https://researchut.com/images/moon_1.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Moon&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/moon_2.jpg" alt="Moon"/>
&lt;/div>
&lt;a href="https://researchut.com/images/moon_2.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Moon&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/moon_3.jpg" alt="Moon"/>
&lt;/div>
&lt;a href="https://researchut.com/images/moon_3.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Moon&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/moon_4.jpg" alt="Moon"/>
&lt;/div>
&lt;a href="https://researchut.com/images/moon_4.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Moon&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>The images are not exactly what we saw with our eyes. The view was much more vivid than these pictures. But as a first timer, I really wanted to capture this first moment of a closer view of the Moon.&lt;/p>
&lt;p>In the whole process; that of ground work studying about telescopes, installation of the telescope, astronomy basics and many other things; the most difficult part in this entire journey, was to point my phone to the viewing eyepiece, to get a shot of the object. This requirement just introduced me to astrophotography.&lt;/p>
&lt;p>And then, Dobsonians aren&amp;rsquo;t the best model for astrophotography, to what I&amp;rsquo;ve learnt so far. Hopefully, I&amp;rsquo;ll find my ways to do some DIY astrophotography with the tools I have. Or extend my arsenal over time.&lt;/p>
&lt;p>But overall, we&amp;rsquo;ve been very pleased with the subject of &lt;em>&lt;strong>Astronomy&lt;/strong>&lt;/em>. It is a different feel altogether and we&amp;rsquo;re glad to have forayed into it.&lt;/p></description></item><item><title>LUKS Headless Laptop</title><link>https://researchut.com/blog/Luks_Headless_Laptop/</link><pubDate>Thu, 20 Aug 2020 19:29:14 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Luks_Headless_Laptop/</guid><description>&lt;p>As we grow old, so do our computing machines. And just like we don&amp;rsquo;t decommission ourselves, so should be the case of the machines. They should be semi-retired, delegating major tasks to newer machines while they can still serve some less demaning work: &lt;em>File Servers, UPNP Servers&lt;/em> et cetera.&lt;/p>
&lt;p>It is common on a Debian installer based derivative, and otherwise too, to use block encryption on Linux. With machines from this decade, I think we&amp;rsquo;ve always had CPU extension for encryption.&lt;/p>
&lt;p>So, as would be the usual case, all my laptops are block encrypted. But as they reach the phase of their life to retire and serving as a headless boss, it becomes cumbersome to keep feeding it a password and all the logistics involved to feed it. As such, I wanted to get rid of feeding it the password.&lt;/p>
&lt;p>Then, there&amp;rsquo;s also the case of bad/faulty hardware, many of which mostly can temporarily fix their functionality when reset, which usually is to reboot the machine. I still recollect words of my Linux Guru - &lt;strong>Dhiren Raj Bhandari&lt;/strong> - that many of the unexplainable errors can be resolved by just rebooting the machine. This was more than 20 years ago in the prime era of &lt;em>Microsoft Windows OS&lt;/em> and the context back then was quite different, but yes, some bits of that saying still apply today.&lt;/p>
&lt;p>So I wanted my laptop, which had LUKS set up for 2 disks, to go password-less now. I stumbled across a &lt;a href="http://atterer.org/linux-remove-disable-luks-encryption-password-on-disk-partition-crypttab-initrd">slightly dated article&lt;/a> where the author achieved similar results with &lt;em>keyscript&lt;/em>. So the thing was doable.&lt;/p>
&lt;p>To my delight, Debian cryptsetup has the best setup and documentation in place to do it with just adding &lt;em>keyfiles&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ dd &lt;span style="color:#66d9ef">if&lt;/span>&lt;span style="color:#f92672">=&lt;/span>/dev/random of&lt;span style="color:#f92672">=&lt;/span>sda7.key bs&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> count&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">512&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>512+0 records in
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>512+0 records out
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">512&lt;/span> bytes copied, 0.00540209 s, 94.8 kB/s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:19 ♒♒♒ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ dd &lt;span style="color:#66d9ef">if&lt;/span>&lt;span style="color:#f92672">=&lt;/span>/dev/random of&lt;span style="color:#f92672">=&lt;/span>sdb1.key bs&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> count&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">512&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>512+0 records in
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>512+0 records out
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">512&lt;/span> bytes copied, 0.00536747 s, 95.4 kB/s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:20 ♒♒♒ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ sudo cryptsetup luksAddKey /dev/sda7 sda7.key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>sudo&lt;span style="color:#f92672">]&lt;/span> password &lt;span style="color:#66d9ef">for&lt;/span> rrs:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter any existing passphrase:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>No key available with this passphrase.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:20 ♒♒♒ ☹ 😟&lt;span style="color:#f92672">=&lt;/span>&amp;gt; &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ sudo cryptsetup luksAddKey /dev/sda7 sda7.key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter any existing passphrase:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:20 ♒♒♒ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ sudo cryptsetup luksAddKey /dev/sdb1 sdb1.key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter any existing passphrase:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:21 ♒♒♒ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>and the nice integration in &lt;em>crypttab&lt;/em> to ensure your keys propagate to &lt;em>initramfs&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rrs@lenovo:~$ cat /etc/cryptsetup-initramfs/conf-hook
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Configuration file for the cryptroot initramfs hook.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># KEYFILE_PATTERN: ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The value of this variable is interpreted as a shell pattern.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Matching key files from the crypttab(5) are included in the initramfs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># image. The associated devices can then be unlocked without manual&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># intervention. (For instance if /etc/crypttab lists two key files&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># /etc/keys/{root,swap}.key, you can set KEYFILE_PATTERN=&amp;#34;/etc/keys/*.key&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># to add them to the initrd.)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># If KEYFILE_PATTERN if null or unset (default) then no key file is&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># copied to the initramfs image.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Note that the glob(7) is not expanded for crypttab(5) entries with a&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># &amp;#39;keyscript=&amp;#39; option. In that case, the field is not treated as a file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># name but given as argument to the keyscript.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># WARNING: If the initramfs image is to include private key material,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># you&amp;#39;ll want to create it with a restrictive umask in order to keep&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># non-privileged users at bay. For instance, set UMASK=0077 in&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># /etc/initramfs-tools/initramfs.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>KEYFILE_PATTERN&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;/etc/luks/sd*.key&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>19:44 ♒♒♒ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>The whole thing took me around 20-25 minutes, including drafting this post. From &lt;em>&lt;strong>Retired Head and Password Prompt&lt;/strong>&lt;/em> to &lt;em>&lt;strong>Headless and Password-less&lt;/strong>&lt;/em>. The beauty of Debian and FOSS&lt;/p></description></item><item><title>Laptop Mode Tools 1.74</title><link>https://researchut.com/post/Laptop_Mode_Tools_1-74/</link><pubDate>Sat, 18 Jul 2020 21:15:04 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/Laptop_Mode_Tools_1-74/</guid><description>&lt;h2 id="laptop-mode-tools-174">Laptop Mode Tools 1.74&lt;/h2>
&lt;p>&lt;strong>Laptop Mode Tools&lt;/strong> version &lt;code>1.74&lt;/code> has been released. This release includes &lt;code>important bug fixes&lt;/code>, some &lt;code>defaults settings&lt;/code> updated to current driver support in Linux and support for devices with &lt;code>nouveau&lt;/code> based nVIDIA cards.&lt;/p>
&lt;p>A filtered list of changes is mentioned below. For the full log, please refer to the &lt;a href="https://github.com/rickysarraf/laptop-mode-tools">git repository&lt;/a>&lt;/p>
&lt;h3 id="174---sat-jul-18-191040-ist-2020">1.74 - Sat Jul 18 19:10:40 IST 2020&lt;/h3>
&lt;pre>&lt;code>* With 4.15+ kernels, Linux Intel SATA has a better link power
saving policy, med_power_with_dipm, which should be the recommended
one to use
* Disable defaults for syslog logging
* Initialize LM_VERBOSE with default to disabled
* Merge pull request #157 from rickysarraf/nouveau
* Add power saving module for nouveau cards
* Disable ethernet module by default
* Add board-specific folder and documentation
* Add execute bit on module radeon-dpm
* Drop unlock because there is no lock acquired
&lt;/code>&lt;/pre>
&lt;h2 id="resources">Resources&lt;/h2>
&lt;ul>
&lt;li>Source tarball, Feodra/SUSE RPM Packages available at project&amp;rsquo;s &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases">release page&lt;/a>&lt;/li>
&lt;li>Debian packages will be available soon in &lt;a href="https://packages.debian.org/sid/laptop-mode-tools">Unstable&lt;/a>.&lt;/li>
&lt;li>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;/li>
&lt;li>Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-laptop-mode-tools">What is Laptop Mode Tools&lt;/h2>
&lt;pre tabindex="0">&lt;code>Description: Tools for Power Savings based on battery/AC status
Laptop mode is a Linux kernel feature that allows your laptop to save
considerable power, by allowing the hard drive to spin down for longer
periods of time. This package contains the userland scripts that are
needed to enable laptop mode.
.
It includes support for automatically enabling laptop mode when the
computer is working on batteries. It also supports various other power
management features, such as starting and stopping daemons depending on
power mode, automatically hibernating if battery levels are too low, and
adjusting terminal blanking and X11 screen blanking
.
laptop-mode-tools uses the Linux kernel&amp;#39;s Laptop Mode feature and thus
is also used on Desktops and Servers to conserve power
&lt;/code>&lt;/pre></description></item><item><title>Kodi PS3 BD Remote</title><link>https://researchut.com/blog/Kodi_PS3_BD_Remote/</link><pubDate>Tue, 16 Jun 2020 11:08:13 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Kodi_PS3_BD_Remote/</guid><description>&lt;h2 id="setting-up-a-sony-ps3-blu-ray-disc-remote-controller-with-kodi">Setting up a Sony PS3 Blu-Ray Disc Remote Controller with Kodi&lt;/h2>
&lt;p>TLDR; Since most of the articles on the internet were either obsolete or broken, I&amp;rsquo;ve chosen to write these notes down in the form of a blog post so that it helps me now and in future, and hopefully others too.&lt;/p>
&lt;h3 id="raspberry-pi">Raspberry Pi&lt;/h3>
&lt;p>All this time, I have been using the &lt;em>Raspberry Pi&lt;/em> for my HTPC needs. The first RPi I acquired was in 2014 and I have been very very happy with the amount of support in the community and quality of the HTPC offering it has. I also appreciate the RPi&amp;rsquo;s form factor and the power consumption limits. And then, to add more sugar to it, it uses a derivative of Debian, &lt;strong>Raspbian&lt;/strong>, which was very familiar and feel good to me.&lt;/p>
&lt;h4 id="raspberry-pi-issues">Raspberry Pi Issues&lt;/h4>
&lt;p>So primarily, I use my RPi with Kodi. There are a bunch of other (daemon) services but the primary use case is &lt;em>HTPC&lt;/em> only. &lt;em>RPi + Kodi&lt;/em> has a very very annoying issue wherein it loses its audio pitch during video playback. The loss is so bad that the audio is barely audible. The workaround is to seek the video playback either way and then it comes back to its actual audio level, just to fade again in a while.&lt;/p>
&lt;p>My suspicion was that it may be a problem with Kodi. Or at least, Kodi would have a workaround in software. But unfortunately, I wasted a lot of time in dealing with my suspicion with no fruitful result.&lt;/p>
&lt;p>This started becoming a PITA over time.
And it seems the issue is with the hardware itself because after I moved my setup to a regular laptop, the audio loss is gone.&lt;/p>
&lt;h3 id="laptop-with-kodi">Laptop with Kodi&lt;/h3>
&lt;p>Since I had my old &lt;em>Lenovo Yoga 2 13&lt;/em> lying on all the time, it made sense to make some more use of it, using as the &lt;em>HTPC&lt;/em>. This machine comes with a &lt;em>Micro-HDMI Out&lt;/em> port, so it felt ideal for my High Definition video rendering needs.&lt;/p>
&lt;p>It comes stock with just Intel HD Video with good driver support in Linux, so it was quite quick and easy getting Kodi charged up and running on it. And as I mentioned above, the sound issues are not seen on this setup.&lt;/p>
&lt;p>Some added benefits are that I get to run stock Debian on this machine. And I must say a big &lt;strong>THANK YOU&lt;/strong> to the &lt;em>Debian Multimedia Maintainers&lt;/em>, who&amp;rsquo;ve done a pretty good job maintaining Kodi under Debian.&lt;/p>
&lt;h3 id="hdmi-cec">HDMI CEC&lt;/h3>
&lt;p>Only after I decommissioned my RPi, I came to notice how convenient the &lt;em>&lt;strong>HDMI CEC&lt;/strong>&lt;/em> functionality is. Turns out no standard laptops ship CEC functionality onto them. Even the case of my laptop, which has a Micro HDMI Out port, but still no CEC capabilities. As far as I know, the RPi came with the Pulse-Eight CEC module, so obvious first thought was to opt for a compatible &lt;a href="https://www.pulse-eight.com/p/104/usb-hdmi-cec-adapter">external module&lt;/a> of the same; but it comes with a nice price tag, me not willing to spend.&lt;/p>
&lt;h3 id="wifi-remotes">WiFi Remotes&lt;/h3>
&lt;p>Kodi has very well implemented network interface for almost all its features. One could take the &lt;a href="https://yatse.tv/">Yatse&lt;/a> or &lt;a href="http://kodiremote.berard.ch/">Music Pump Kodi Remote&lt;/a> Android applications that work very very well with Kodi.&lt;/p>
&lt;p>But wifi can be flaky some times. Especially, my experience with the &lt;em>Realtek&lt;/em> network devices hasn&amp;rsquo;t been very good. The driver support in Linux is okay but there are many firmware bugs to deal with. In my case, the machine will lose wifi signal/network every once in a while. And it turns out, for this machine, with this network device type, I&amp;rsquo;m not the only one running into such problems.&lt;/p>
&lt;p>And to add to that, this is an &lt;em>UltraBook&lt;/em>, which means it doesn&amp;rsquo;t have an Ethernet port. So I&amp;rsquo;ve had not much choice other than to live and &lt;del>suffer&lt;/del> deal with it.&lt;/p>
&lt;p>The WiFi chip also provides the Bluetooth module, which so far I had not used much. From my &lt;code>/etc/modprobe.d/blacklist-memstick.conf&lt;/code>, all relevant BT modules were added to the blacklist, all this time.&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@lenovo:~$ cat /etc/modprobe.d/blacklist-memstick.conf
blacklist memstick
blacklist rtsx_usb_ms
# And bluetooth too
#blacklist btusb
#blacklist btrtl
#blacklist btbcm
#blacklist btintel
#blacklist bluetooth
21:21 ♒♒♒ ☺ 😄
&lt;/code>&lt;/pre>&lt;p>Also to keep in mind is that the driver for my card gives a very misleading kernel message, which is one of the many reasons for this blog post, so that I don&amp;rsquo;t forget it a couple of months later. The missing firmware error message is okay to ignore, as per &lt;a href="https://github.com/lwfinger/rtl8723bu/issues/68">this&lt;/a> upstream comment.&lt;/p>
&lt;pre tabindex="0">&lt;code>Jun 14 17:17:08 lenovo kernel: usbcore: registered new interface driver btusb
Jun 14 17:17:08 lenovo systemd[1]: Mounted /boot/efi.
Jun 14 17:17:08 lenovo kernel: Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
Jun 14 17:17:08 lenovo kernel: Bluetooth: hci0: RTL: rom_version status=0 version=1
Jun 14 17:17:08 lenovo kernel: Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_fw.bin
Jun 14 17:17:08 lenovo kernel: bluetooth hci0: firmware: direct-loading firmware rtl_bt/rtl8723b_fw.bin
Jun 14 17:17:08 lenovo kernel: Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_config.bin
Jun 14 17:17:08 lenovo kernel: bluetooth hci0: firmware: failed to load rtl_bt/rtl8723b_config.bin (-2)
Jun 14 17:17:08 lenovo kernel: firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware
Jun 14 17:17:08 lenovo kernel: bluetooth hci0: Direct firmware load for rtl_bt/rtl8723b_config.bin failed with error -2
Jun 14 17:17:08 lenovo kernel: Bluetooth: hci0: RTL: cfg_sz -2, total sz 22496
&lt;/code>&lt;/pre>&lt;p>This device&amp;rsquo;s &lt;em>network + bt&lt;/em> are on the same chip.&lt;/p>
&lt;pre tabindex="0">&lt;code>01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter
&lt;/code>&lt;/pre>&lt;p>And then, when the &lt;code>btusb&lt;/code> module is initialed (along with the misleading driver message), you&amp;rsquo;ll get the following in your USB device listing&lt;/p>
&lt;pre tabindex="0">&lt;code>Bus 002 Device 005: ID 0bda:b728 Realtek Semiconductor Corp. Bluetooth Radio
&lt;/code>&lt;/pre>&lt;h3 id="sony-playstation-3-bd-remote">Sony PlayStation 3 BD Remote&lt;/h3>
&lt;p>Almost 10 years ago, I bought the PS3 and many of its accessories. The remote has just been rotting in the shelf. It had rusted so bad that it is better described with these pics.&lt;/p>
&lt;p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/ps3-remote-rust.jpg" alt="Rusted inside"/>
&lt;/div>
&lt;a href="https://researchut.com/images/ps3-remote-rust.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rusted inside&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/ps3-remote-rust-full.jpg" alt="Rusted inside and cover"/>
&lt;/div>
&lt;a href="https://researchut.com/images/ps3-remote-rust-full.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rusted inside and cover&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/ps3-rusted-spring.jpg" alt="Rusted spring"/>
&lt;/div>
&lt;a href="https://researchut.com/images/ps3-rusted-spring.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Rusted spring&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>The rust was so much that the battery holding spring gave up.&lt;/p>
&lt;p>A little bit scrubbing and cleaning has gotten it working. I hope it lasts for some time before I find time to open it up and give it a full clean-up.&lt;/p>
&lt;h3 id="pairing-the-bd-remote-to-laptop">Pairing the BD Remote to laptop&lt;/h3>
&lt;p>Honestly, with the condition of the hardware and software on both ends, I did not have much hopes of getting this to work. And in all the years on my computer usage, I hardly recollect much days when I&amp;rsquo;ve made use of BT. Probably, because the full BT stack wasn&amp;rsquo;t that well integrated in Linux, earlier. And I mostly used to disable them in hardware and software to save on battery.&lt;/p>
&lt;p>All yielded results from the internet talked about tools/scripts that were either not working, pointing to broken links etc.&lt;/p>
&lt;p>These days, &lt;em>bluez&lt;/em> comes with a nice utility, &lt;em>bluetoothctl&lt;/em>. It was a nice experience using it.&lt;/p>
&lt;p>First, start your bluetooth service and ensure that the device talks well with the kernel&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@lenovo:~$ systemctl status bluetooth
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-06-15 12:54:58 IST; 3s ago
Docs: man:bluetoothd(8)
Main PID: 310197 (bluetoothd)
Status: &amp;#34;Running&amp;#34;
Tasks: 1 (limit: 9424)
Memory: 1.3M
CGroup: /system.slice/bluetooth.service
└─310197 /usr/lib/bluetooth/bluetoothd
Jun 15 12:54:58 lenovo systemd[1]: Starting Bluetooth service...
Jun 15 12:54:58 lenovo bluetoothd[310197]: Bluetooth daemon 5.50
Jun 15 12:54:58 lenovo systemd[1]: Started Bluetooth service.
Jun 15 12:54:58 lenovo bluetoothd[310197]: Starting SDP server
Jun 15 12:54:58 lenovo bluetoothd[310197]: Bluetooth management interface 1.15 initialized
Jun 15 12:54:58 lenovo bluetoothd[310197]: Sap driver initialization failed.
Jun 15 12:54:58 lenovo bluetoothd[310197]: sap-server: Operation not permitted (1)
12:55 ♒♒♒ ☺ 😄
&lt;/code>&lt;/pre>&lt;p>Next, then is to discover and connect to your device&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@lenovo:~$ bluetoothctl
Agent registered
[bluetooth]# devices
Device E6:3A:32:A4:31:8F MI Band 2
Device D4:B8:FF:43:AB:47 MI RC
Device 00:1E:3D:10:29:0F BD Remote Control
[CHG] Device 00:1E:3D:10:29:0F Connected: yes
[BD Remote Control]# info 00:1E:3D:10:29:0F
Device 00:1E:3D:10:29:0F (public)
Name: BD Remote Control
Alias: BD Remote Control
Class: 0x0000250c
Paired: no
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
Modalias: usb:v054Cp0306d0100
[bluetooth]#
&lt;/code>&lt;/pre>&lt;p>In case of the &lt;em>Sony BD Remote&lt;/em>, there&amp;rsquo;s no need to pair. In fact, trying to pair fails. It prompts for the PIN code, but neither &lt;code>0000&lt;/code> or &lt;code>1234&lt;/code> are accepted.&lt;/p>
&lt;p>So, the working steps so far are to &lt;strong>Trust&lt;/strong> the device and then &lt;strong>Connect&lt;/strong> the device.&lt;/p>
&lt;p>For the sake of future use, I also populated &lt;code>/etc/bluetooth/input.conf&lt;/code> based on suggestions on the internet.
Note: The advertised keymappings in this config file do not work.
Note: I&amp;rsquo;m only using it for the power saving measures in instructing the BT connection to sleep after 3 minutes.&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@priyasi:/tmp$ cat input.conf
# Configuration file for the input service
# This section contains options which are not specific to any
# particular interface
[General]
# Set idle timeout (in minutes) before the connection will
# be disconnect (defaults to 0 for no timeout)
IdleTimeout=3
# Enable HID protocol handling in userspace input profile
# Defaults to false (HIDP handled in HIDP kernel module)
#UserspaceHID=true
# Limit HID connections to bonded devices
# The HID Profile does not specify that devices must be bonded, however some
# platforms may want to make sure that input connections only come from bonded
# device connections. Several older mice have been known for not supporting
# pairing/encryption.
# Defaults to false to maximize device compatibility.
#ClassicBondedOnly=true
# LE upgrade security
# Enables upgrades of security automatically if required.
# Defaults to true to maximize device compatibility.
#LEAutoSecurity=true
#
#[00:1E:3D:10:29:0F]
[2c:33:7a:8e:d6:30]
[PS3 Remote Map]
# When the &amp;#39;OverlayBuiltin&amp;#39; option is TRUE (the default), the keymap uses
# the built-in keymap as a starting point. When FALSE, an empty keymap is
# the starting point.
#OverlayBuiltin = TRUE
#buttoncode = keypress # Button label = action with default key mappings
#OverlayBuiltin = FALSE
0x16 = KEY_ESC # EJECT = exit
0x64 = KEY_MINUS # AUDIO = cycle audio tracks
0x65 = KEY_W # ANGLE = cycle zoom mode
0x63 = KEY_T # SUBTITLE = toggle subtitles
0x0f = KEY_DELETE # CLEAR = delete key
0x28 = KEY_F8 # /TIME = toggle through sleep
0x00 = KEY_1 # NUM-1
0x01 = KEY_2 # NUM-2
0x02 = KEY_3 # NUM-3
0x03 = KEY_4 # NUM-4
0x04 = KEY_5 # NUM-5
0x05 = KEY_6 # NUM-6
0x06 = KEY_7 # NUM-7
0x07 = KEY_8 # NUM-8
0x08 = KEY_9 # NUM-9
0x09 = KEY_0 # NUM-0
0x81 = KEY_F2 # RED = red
0x82 = KEY_F3 # GREEN = green
0x80 = KEY_F4 # BLUE = blue
0x83 = KEY_F5 # YELLOW = yellow
0x70 = KEY_I # DISPLAY = show information
0x1a = KEY_S # TOP MENU = show guide
0x40 = KEY_M # POP UP/MENU = menu
0x0e = KEY_ESC # RETURN = back/escape/cancel
0x5c = KEY_R # TRIANGLE/OPTIONS = cycle through recording options
0x5d = KEY_ESC # CIRCLE/BACK = back/escape/cancel
0x5f = KEY_A # SQUARE/VIEW = Adjust Playback timestretch
0x5e = KEY_ENTER # CROSS = select
0x54 = KEY_UP # UP = Up/Skip forward 10 minutes
0x56 = KEY_DOWN # DOWN = Down/Skip back 10 minutes
0x57 = KEY_LEFT # LEFT = Left/Skip back 5 seconds
0x55 = KEY_RIGHT # RIGHT = Right/Skip forward 30 seconds
0x0b = KEY_ENTER # ENTER = select
0x5a = KEY_F10 # L1 = volume down
0x58 = KEY_J # L2 = decrease the play speed
0x51 = KEY_HOME # L3 = commercial skip previous
0x5b = KEY_F11 # R1 = volume up
0x59 = KEY_U # R2 = increase the play speed
0x52 = KEY_END # R3 = commercial skip next
0x43 = KEY_F9 # PS button = mute
0x50 = KEY_M # SELECT = menu (as per PS convention)
0x53 = KEY_ENTER # START = select / Enter (matches terminology in mythwelcome)
0x30 = KEY_PAGEUP # PREV = jump back (default 10 minutes)
0x76 = KEY_J # INSTANT BACK (newer RCs only) = decrease the play speed
0x75 = KEY_U # INSTANT FORWARD (newer RCs only) = increase the play speed
0x31 = KEY_PAGEDOWN # NEXT = jump forward (default 10 minutes)
0x33 = KEY_COMMA # SCAN BACK = decrease scan forward speed / play
0x32 = KEY_P # PLAY = play/pause
0x34 = KEY_DOT # SCAN FORWARD decrease scan backard speed / increase playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
0x60 = KEY_LEFT # FRAMEBACK = Left/Skip back 5 seconds/rewind one frame
0x39 = KEY_P # PAUSE = play/pause
0x38 = KEY_P # STOP = play/pause
0x61 = KEY_RIGHT # FRAMEFORWARD = Right/Skip forward 30 seconds/advance one frame
0xff = KEY_MAX
21:48 ♒ ॐ ♅ ⛢ ☺ 😄
&lt;/code>&lt;/pre>&lt;p>I have not spent much time finding out why not all the key presses work. Especially, given that most places on the internet mention these mappings. For me, some of the key scan codes aren&amp;rsquo;t even reported. For keys like &lt;em>L1, L2, L3, R1, R2, R3, Next_Item, Prev_Item&lt;/em>, they generate no codes in the kernel.&lt;/p>
&lt;p>If anyone has suggestions, ideas or fixes, I&amp;rsquo;d appreciate if you can drop a comment or email me privately.&lt;/p>
&lt;p>But given my limited use to get a simple remote ready, to be usable with Kodi, I was apt with only some of the keys working.&lt;/p>
&lt;h3 id="mapping-the-keys-in-kodi">Mapping the keys in Kodi&lt;/h3>
&lt;p>With the limited number of keys detected, mapping those keys to what Kodi could use was the next step. Kodi has a very nice and easy to use module, &lt;a href="https://kodi.wiki/view/Add-on:Keymap_Editor">Keymap Editor&lt;/a>. It is very simple to use and map detected keys to functionalities you want. With it, I was able to get a functioning remote to use with my Kodi HTPC setup.&lt;/p>
&lt;h3 id="update-wed-jun-17-113820-2020">Update: Wed Jun 17 11:38:20 2020&lt;/h3>
&lt;p>One annoying problem that breaks the overall experience is the following bug on the driver side, that results in connections not being established instantly.&lt;/p>
&lt;p>Once the device goes into sleep mode, in random attempts, waking up and re-establishing a BT connection can be multi-poll affair. This can last from a couple of seconds to well over minute.&lt;/p>
&lt;p>Random suggestions on the internet mention disabling the &lt;em>autosuspend&lt;/em> functionality for the device in the driver with &lt;code>btusb.enable_autosuspend=n&lt;/code>, but that did not help in this case.&lt;/p>
&lt;p>Given that this device is enumberated over the USB Bus, it probably needs this feature applied to the whole USB tree of the device&amp;rsquo;s chain. Something to investigate over the weekend.&lt;/p>
&lt;pre tabindex="0">&lt;code>Jun 16 20:41:23 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 7
Jun 16 20:41:43 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 8
Jun 16 20:41:59 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 9
Jun 16 20:42:18 lenovo kernel: input: BD Remote Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:10/0005:054C:030&amp;gt;
Jun 16 20:42:18 lenovo kernel: sony 0005:054C:0306.0006: input,hidraw1: BLUETOOTH HID v1.00 Gamepad [BD Remote Control] on 2c:33:7a:8e:d6:30
Jun 16 20:51:59 lenovo kernel: input: BD Remote Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:11/0005:054C:030&amp;gt;
Jun 16 20:51:59 lenovo kernel: sony 0005:054C:0306.0007: input,hidraw1: BLUETOOTH HID v1.00 Gamepad [BD Remote Control] on 2c:33:7a:8e:d6:30
Jun 16 21:05:55 lenovo rtkit-daemon[1723]: Supervising 3 threads of 1 processes of 1 users.
Jun 16 21:05:55 lenovo rtkit-daemon[1723]: Successfully made thread 32747 of process 1646 owned by &amp;#39;1000&amp;#39; RT at priority 5.
Jun 16 21:05:55 lenovo rtkit-daemon[1723]: Supervising 4 threads of 1 processes of 1 users.
Jun 16 21:05:56 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 12
Jun 16 21:06:12 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 1
Jun 16 21:06:34 lenovo kernel: Bluetooth: hci0: ACL packet for unknown connection handle 2
Jun 16 21:06:59 lenovo kernel: input: BD Remote Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/bluetooth/hci0/hci0:3/0005:054C:0306&amp;gt;
Jun 16 21:06:59 lenovo kernel: sony 0005:054C:0306.0008: input,hidraw1: BLUETOOTH HID v1.00 Gamepad [BD Remote Control] on 2c:33:7a:8e:d6:30
&lt;/code>&lt;/pre>&lt;h3 id="others">Others&lt;/h3>
&lt;p>There&amp;rsquo;s a package, &lt;a href="https://packages.debian.org/unstable/kodi-eventclients-ps3">kodi-eventclients-ps3&lt;/a>, which can be used to talk to the &lt;em>BD Remote&lt;/em>. Unfortunately, it isn&amp;rsquo;t up-to-date. When trying to make use of it, I ran into a couple of problems.&lt;/p>
&lt;p>First, the easy one is:&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@lenovo:~/ps3pair$ kodi-ps3remote localhost 9777
usr/share/pixmaps/kodi//bluetooth.png
Traceback (most recent call last):
File &amp;#34;/usr/bin/kodi-ps3remote&amp;#34;, line 220, in &amp;lt;module&amp;gt;
File &amp;#34;/usr/bin/kodi-ps3remote&amp;#34;, line 208, in main
xbmc.connect(host, port)
packet = PacketHELO(self.name, self.icon_type, self.icon_file)
File &amp;#34;/usr/lib/python3/dist-packages/kodi/xbmcclient.py&amp;#34;, line 285, in __init__
with open(icon_file, &amp;#39;rb&amp;#39;) as f:
11:16 ♒♒♒ ☹ 😟=&amp;gt; 1
&lt;/code>&lt;/pre>&lt;p>This one was simple as it was just a broken path.&lt;/p>
&lt;p>The second issue with the tool is a leftover from python2 to python3 conversion.&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@lenovo:/etc/bluetooth$ kodi-ps3remote localhost
/usr/share/pixmaps/kodi//bluetooth.png
Searching for BD Remote Control
(Hold Start + Enter on remote to make it discoverable)
Redmi (E8:5A:8B:73:57:44) in range
Living Room TV (E4:DB:6D:24:23:E9) in range
Could not find BD Remote Control. Trying again...
Searching for BD Remote Control
(Hold Start + Enter on remote to make it discoverable)
Living Room TV (E4:DB:6D:24:23:E9) in range
Redmi (E8:5A:8B:73:57:44) in range
Could not find BD Remote Control. Trying again...
Searching for BD Remote Control
(Hold Start + Enter on remote to make it discoverable)
BD Remote Control (00:1E:3D:10:29:0F) in range
Found BD Remote Control with address 00:1E:3D:10:29:0F
Attempting to pair with remote
Remote Paired.
Traceback (most recent call last):
File &amp;#34;/usr/bin/kodi-ps3remote&amp;#34;, line 221, in &amp;lt;module&amp;gt;
main()
File &amp;#34;/usr/bin/kodi-ps3remote&amp;#34;, line 212, in main
if process_keys(remote, xbmc):
File &amp;#34;/usr/bin/kodi-ps3remote&amp;#34;, line 164, in process_keys
keycode = data.encode(&amp;#34;hex&amp;#34;)[10:12]
AttributeError: &amp;#39;bytes&amp;#39; object has no attribute &amp;#39;encode&amp;#39;
11:24 ♒♒♒ ☹ 😟=&amp;gt; 1
&lt;/code>&lt;/pre>&lt;p>Fixing that too did not give me the desired result on using the &lt;em>BD Remote&lt;/em> in the way I want. So eventually, I gave up and used Kodi&amp;rsquo;s &lt;em>Keymap Editor&lt;/em> instead.&lt;/p>
&lt;h3 id="next">Next&lt;/h3>
&lt;p>Next in line, when I can manage to get some free time, is to improve the &lt;strong>Kodi Video Scraper&lt;/strong> to have a fallback mode. Currently, for files where it cannot determine the content, it reject the file resulting in those files not showing up in your collection at all. A better approach would have been to have a fallback mode, that when the scraper cannot determine the content, it should fallback to using the &lt;a href="https://github.com/chaosgrid/kodi-filenameScraper">filename scraper&lt;/a>&lt;/p></description></item><item><title>Apt Offline 1.8.2</title><link>https://researchut.com/blog/apt-offline-1_8_2/</link><pubDate>Sun, 09 Feb 2020 19:52:51 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-1_8_2/</guid><description>&lt;h2 id="apt-offline-182">apt-offline 1.8.2&lt;/h2>
&lt;p>I am pleased to announce the release of &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> version 1.8.2&lt;/p>
&lt;p>This release has many bug fixes along with a long standing issue of &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=871656">signature validation&lt;/a>&lt;/p>
&lt;h3 id="2017---the-year-of-realization-and-change">2017 - The year of realization and change&lt;/h3>
&lt;p>Back in 2017, the bug was reported that &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> did not validate apt meta &lt;em>Packages&lt;/em> files. &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> was only doing a signature validation for the &lt;em>Release&lt;/em> files but did no validation of the apt meta &lt;em>Packages&lt;/em> files, which had their checksums listed in the &lt;em>Release&lt;/em> files. This validation was completely missing in &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> and gave the user the wrong impression that validation was in place.&lt;/p>
&lt;p>I had hoped to fix this issue soon when it was reported, to have it part of the next Debian Stable release. But that never happened. On the contrary, I think 2 stable releases happened in between. And now it is 2020.&lt;/p>
&lt;p>2017 was a year to spend a large chunk of my time on real life issues, for good. I realized that it is important to always give precedence to personal life, fix issues, set realistic priorities, spend time on realizing the happenings around, get life rolling smooth and then come back to work. This helps sustain in the longer run. Otherwise, with no self, everything can fall apart catastrophically.&lt;/p>
&lt;p>From that phase, I learned many things. I now have much more respect for people who really have been successful at committing a large amount of their time on a volunteer project like Debian. Having myself gone through the time crunch phase, I can only imagine how many of the fellow DDs manage their time, sustainably, over the years. There are many folks I have seen active for more than a decade and they still rock.&lt;/p>
&lt;h3 id="182-release">1.8.2 release&lt;/h3>
&lt;p>Because the apt meta validation was a major issue, I have decided to run through the workflow and explain how &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> reacts to invalid tampered data. Below are konsole captures, with snipped output, where not very relevant.&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/var/tmp/Debian-Build/Result$ sudo apt-offline set /tmp/set.uris
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Gathering details needed for &amp;#39;update&amp;#39; operation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Gathering details needed for &amp;#39;upgrade&amp;#39; operation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:33 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>One item to pay attention to, in this step, is some of the errors that are reported. Not all repository admins enable all the apt meta data available on their mirrors. This is commonly seen for localization related files. Similarly, not all compression types are available on all the repository servers. Some may only have &lt;code>.xz&lt;/code> based meta files hosted while others may have &lt;code>.gz&lt;/code> ones. So, for &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em>, which has to bridge the gap of the offline &amp;lt;=&amp;gt; online setup, there is more work.&lt;/p>
&lt;p>For compression types, &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> cycles through the known list of types. Only if, after cycling through all the known compression types, if the return is still a 404, then we error out.&lt;/p>
&lt;p>Similarly, for localization related meta, we do the same cycling. But in addition to that, there is the possibility that the repository admin may not have enabled the localization data to be served at all. In that case, &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> ultimately will report and error.&lt;/p>
&lt;p>And that is what is shown below. Because I see them not breaking the functionality, I treat them as non-fatal errors.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">61
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">62
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">63
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">64
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">65
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">66
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">67
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">68
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">69
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">70
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">71
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">72
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">73
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">74
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">75
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">76
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">77
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">78
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">79
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">80
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">81
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">82
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">83
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">84
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">85
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">86
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">87
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">88
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">89
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">90
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">91
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">92
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">93
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">94
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/var/tmp/Debian-Build/Result$ apt-offline get /tmp/set-trimmed.uris --bundle /tmp/set.zip --threads 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching APT Data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: If you are on a slow connection, it is good to
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: limit the number of threads to a low number like 2.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: Else higher number of threads executed could cause
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: network congestion and timeouts.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/unstable/Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/unstable/Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/unstable/Release.gpg done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/unstable/InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/Release.gpg done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/experimental/Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/unstable/Release done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/experimental/Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/InRelease done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/experimental/InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/Release done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/source/Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/unstable/InRelease done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/source/Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/experimental/Release.gpg done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/source/Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/experimental/InRelease done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/binary-amd64/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/experimental/Release done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/binary-i386/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/source/Sources.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/binary-all/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/source/Sources.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en_IN.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en_IN.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/binary-all/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en_US.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/source/Sources.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/Contents-amd64.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en.bz2 done
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/main/i18n/Translation-en_US.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/Contents-i386.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/main/Contents-all.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/main/Contents-all.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/binary-amd64/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/binary-amd64/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/binary-i386/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/binary-i386/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/binary-all/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/binary-all/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en_IN.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en_IN.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en.bz2 done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en_US.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/binary-i386/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/Contents-amd64.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/non-free/i18n/Translation-en_US.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/Contents-i386.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/Contents-i386.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/non-free/Contents-all.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/non-free/Contents-amd64.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/binary-amd64/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/binary-amd64/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/binary-i386/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/binary-amd64/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/binary-all/Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/binary-i386/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/binary-all/Packages.xz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en_IN.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/non-free/Contents-all.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en_US.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en.bz2 done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/Contents-amd64.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en_IN.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/Contents-i386.xz
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/contrib/i18n/Translation-en_US.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading http://deb.debian.org/debian/dists/testing/contrib/Contents-all.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/Contents-amd64.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/contrib/Contents-i386.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>ERROR: Giving up on URL http://deb.debian.org/debian/dists/testing/contrib/Contents-all.lzma
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/Contents-i386.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://deb.debian.org/debian/dists/testing/main/Contents-amd64.gz done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 81 / 81 items: [##############################] 100.0% of 101 MiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloaded data to /tmp/set.zip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ERROR: Some items failed to download. Downloaded data may be incomplete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ERROR: Please run in verbose mode to see details about failed items
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:38 ♒ ॐ ☹ 😟=&amp;gt; 100 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>First, lets unpack the archive file.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/var/tmp/Debian-Build/Result$ cd /tmp/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:39 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp$ mkdir set-folder
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:39 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp$ cd set-folder/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:39 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ unzip ../set.zip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Archive: ../set.zip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_unstable_Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_unstable_Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_unstable_InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_experimental_Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_experimental_InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_experimental_Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_binary-all_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_i18n_Translation-en.bz2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_binary-amd64_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_binary-i386_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_binary-all_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_i18n_Translation-en.bz2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_binary-i386_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_Contents-i386.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_non-free_Contents-amd64.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_binary-amd64_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_binary-all_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_i18n_Translation-en.bz2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_Contents-amd64.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_contrib_Contents-i386.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_Contents-i386.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inflating: deb.debian.org_debian_dists_testing_main_Contents-amd64.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:39 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ ls
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_experimental_InRelease deb.debian.org_debian_dists_testing_main_Contents-i386.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_experimental_Release deb.debian.org_debian_dists_testing_main_i18n_Translation-en.bz2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_experimental_Release.gpg deb.debian.org_debian_dists_testing_main_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-all_Packages.xz deb.debian.org_debian_dists_testing_non-free_binary-all_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages.xz deb.debian.org_debian_dists_testing_non-free_binary-amd64_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages.xz deb.debian.org_debian_dists_testing_non-free_binary-i386_Packages.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-amd64.gz deb.debian.org_debian_dists_testing_non-free_Contents-amd64.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-i386.gz deb.debian.org_debian_dists_testing_non-free_Contents-i386.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_i18n_Translation-en.bz2 deb.debian.org_debian_dists_testing_non-free_i18n_Translation-en.bz2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_source_Sources.xz deb.debian.org_debian_dists_testing_non-free_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_InRelease deb.debian.org_debian_dists_testing_Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-all_Packages.xz deb.debian.org_debian_dists_testing_Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-amd64_Packages.xz deb.debian.org_debian_dists_unstable_InRelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-i386_Packages.xz deb.debian.org_debian_dists_unstable_Release
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_Contents-amd64.gz deb.debian.org_debian_dists_unstable_Release.gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:39 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ echo 112312312321 &amp;gt;&amp;gt; deb.debian.org_debian_dists_testing_non-free_source_Sources.xz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:40 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>So in this step, we tell &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> to install the downloaded files. This will also include the tampered file.
The output you see below is standard and reports everything to have succeeded.&lt;/p>
&lt;p>But note that the tampered file is not in the list of synced files. That file is just simply missing from the list.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ sudo apt-offline install .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:55:24 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 16E90B3FDF65EDE3AA7F323C04EE7237B7D453EC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (9/stretch) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:55:43 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 0146DC6D4A0B2914BDED34DB648ACFD622F3D138
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (10/buster) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:56:44 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 16E90B3FDF65EDE3AA7F323C04EE7237B7D453EC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (9/stretch) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:56:45 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 0146DC6D4A0B2914BDED34DB648ACFD622F3D138
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (10/buster) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:56:58 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 16E90B3FDF65EDE3AA7F323C04EE7237B7D453EC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (9/stretch) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Signature made Friday 07 February 2020 01:56:58 PM IST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: using RSA key 0146DC6D4A0B2914BDED34DB648ACFD622F3D138
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpgv: Good signature from &amp;#34;Debian Archive Automatic Signing Key (10/buster) &amp;lt;ftpmaster@debian.org&amp;gt;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-amd64.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-i386.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-all_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_i18n_Translation-en.bz2 synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_source_Sources.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_Contents-amd64.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_Contents-i386.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-all_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-amd64_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_binary-i386_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_i18n_Translation-en.bz2 synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_main_source_Sources.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_Contents-amd64.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_Contents-i386.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_binary-all_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_binary-amd64_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_binary-i386_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_non-free_i18n_Translation-en.bz2 synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:41 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>So, in the above example, &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> discarded the tampered file and the final exit of the command was a success.
Now, let&amp;rsquo;s run the same command with the &amp;lsquo;&amp;ndash;verbose&amp;rsquo; switch. Below is the output.&lt;/p>
&lt;p>Notice the highlighted line below, where it reports that the file is tampered and does not match the checksum&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ sudo apt-offline install . --verbose
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Namespace(allow_unauthenticated=False, func=&amp;lt;function installer at 0x7f6a6c7c54d0&amp;gt;, install=&amp;#39;.&amp;#39;, install_simulate=False, install_src_path=None, skip_bug_reports=False, skip_changelog=False, strict_deb_check=False, verbose=True)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: No changelog available
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Great!!! No bugs found for all the packages that were downloaded.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: APT Signature verification path is: [&amp;#39;/etc/apt/trusted.gpg.d/&amp;#39;, &amp;#39;/etc/apt/trusted.gpg&amp;#39;]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-jessie-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-jessie-security-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-stretch-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-stretch-security-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-stretch-stable.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-buster-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Adding /etc/apt/trusted.gpg.d/debian-archive-buster-security-automatic.gpg to the apt-offline keyring
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.....snipped.....
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_Contents-amd64.gz Integrity with checksum 024957d30be2acbb9e66c9802f825115d32437420300a2b28ab60ae4ecb76fcf matches
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_Contents-i386.gz Integrity with checksum 5266d2f3ea41c4e988e71b4bbe58dd1178a23ce1ed50908c73a0cb39201136e3 matches
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_binary-all_Packages.xz Integrity with checksum 9f0f3aa5560452d45f82c5121ea844c68e641c8fbb56ef69d570c641b6cce662 matches
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_binary-amd64_Packages.xz Integrity with checksum 811f7752a13dfcbd748478dda267fb810c52fc14769d2d5c7871c75e35350d66 matches
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_binary-i386_Packages.xz Integrity with checksum 7df3512b5da7258613774921023d68c71858d89fddafd694e2dfd19cef54314b matches
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_i18n_Translation-en.bz2 Integrity with checksum 1bf3cd0cff6fadf1a74280912c3229374344cd6c347d2f533b001843d84b236d matches
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>VERBOSE: localFile ./deb.debian.org_debian_dists_testing_non-free_source_Sources.xz integrity doesn&amp;#39;t match to checksum a94589ab3c204bb4d710d72ea21abac8007b14e5c5dacbe43be07c51ba5f0a0a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Synchronized file to /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_Contents-amd64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_Contents-amd64 file synced to APT.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-amd64.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Synchronized file to /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_Contents-i386
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_Contents-i386 file synced to APT.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_Contents-i386.gz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Synchronized file to /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-all_Packages
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-all_Packages file synced to APT.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-all_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Synchronized file to /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages file synced to APT.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-amd64_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: Synchronized file to /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VERBOSE: /var/lib/apt/lists/deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages file synced to APT.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deb.debian.org_debian_dists_testing_contrib_binary-i386_Packages.xz synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.....snipped.....
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:42 ♒ ॐ ☺ 😄&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>This is pretty much the validation required and done by &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> for apt meta &lt;em>Packages&lt;/em> files.&lt;/p>
&lt;p>Please do file bug reports if you think the overall exit status of &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> under such scenarios should be different than what it is currently.&lt;/p>
&lt;p>For the tampered meta &lt;em>Packages&lt;/em> files:&lt;/p>
&lt;ul>
&lt;li>should the visual representation be different ?&lt;/li>
&lt;li>Should an error be printed ?&lt;/li>
&lt;li>What about the exit status ?&lt;/li>
&lt;/ul>
&lt;p>Similarly, for the &amp;lsquo;get&amp;rsquo; operation:&lt;/p>
&lt;ul>
&lt;li>Should we do something different for non-existing localization files on the repository server ?&lt;/li>
&lt;li>Is there any different way to go through the supported list of compression types for meta files ?&lt;/li>
&lt;/ul>
&lt;!-- raw HTML omitted -->
&lt;p>&lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> allows a user to install a new package and all its dependencies easily on the offline machine. The below workflow will demonstrate the same and will also go through the tampering of the .deb files and see how &lt;em>&lt;strong>apt-offline/apt&lt;/strong>&lt;/em> deals with it.&lt;/p>
&lt;p>In below example, a user wants to install the &lt;code>gnome-todo&lt;/code> package on the offline machine, which has a couple of dependencies.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ sudo apt install gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading package lists... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Building dependency tree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading state information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following additional packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following NEW packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0 upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Need to get 784 kB of archives.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After this operation, 2,337 kB of additional disk space will be used.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to continue? [Y/n] n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:47 ♒ ॐ ☹ 😟=&amp;gt; 1 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>The below command generates a (signature) file, which will include all details about requested package and its dependencies.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ sudo apt-offline set /tmp/gnome-todo.uris --install-packages gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Gathering installation details for package [&amp;#39;gnome-todo&amp;#39;]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:48 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>Below is the usual step to be performed on the online machine with the generated &lt;code>gnome-todo.uris&lt;/code> signature file.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/set-folder$ apt-offline get /tmp/gnome-todo.uris --download-dir /tmp/gnome-todo --bug-reports --threads 3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching APT Data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: If you are on a slow connection, it is good to
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: limit the number of threads to a low number like 2.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: Else higher number of threads executed could cause
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WARNING: network congestion and timeouts.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading libpeas-common - 187 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading libpeas-1.0-0 - 196 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading gnome-todo-common - 228 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-common done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching bug report for libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-1.0-0 done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching bug report for libpeas-1.0-0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo-common done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching bug report for gnome-todo-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched bug report for libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading libgnome-todo - 6 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libgnome-todo done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching bug report for libgnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched bug report for gnome-todo-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloading gnome-todo - 146 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetching bug report for gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched bug report for libpeas-1.0-0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched bug report for libgnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched bug report for gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 5 / 5 items: [##############################] 100.0% of 765 KiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Downloaded data to /tmp/gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:49 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>Note: The fact is that &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> will not do any checksum validation for the .deb files. The validation is completely delegated to &lt;code>apt&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt-offline install -h
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>usage: apt-offline install [-h] [--verbose] [--simulate]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [--install-src-path INSTALL_SRC_PATH]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [--skip-bug-reports] [--skip-changelog]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [--allow-unauthenticated] [--strict-deb-check]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> apt-offline-download.zip | apt-offline-download/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>positional arguments:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> apt-offline-download.zip | apt-offline-download/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Install apt-offline data, a bundle file or a directory
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>optional arguments:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -h, --help show this help message and exit
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --verbose Enable verbose messages
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --simulate Just simulate. Very helpful when debugging
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --install-src-path INSTALL_SRC_PATH
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Install src packages to specified path.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --skip-bug-reports Skip the bug report check
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --skip-changelog Skip display of changelog
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --allow-unauthenticated
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Ignore apt gpg signatures mismatch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> --strict-deb-check Perform strict checksum validaton for downloaded .deb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> files
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:50 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>and from the manpage:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-markdown" data-lang="markdown">&lt;span style="display:flex;">&lt;span> --strict-deb-check
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> With this option enabled, apt-offline delegate&amp;#39;s .deb package checksum validation to apt. While the .debs are already avail‐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> able, they are stored in the temporary apt cache, where apt validates its checksum, before considering it for further pro‐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cessing. Note: This does have the caveat that apt may need network availability even though it doesn&amp;#39;t download anything
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> over the network. But it does invoke the download routines and realizes that the payload is already available. It then fur‐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ther proceeds with checksum validation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> The default behavior is to not do strict checksum validation for .deb files. Instead, apt-offline copies the .deb files to
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> apt&amp;#39;s download location. apt still does size validation of the available .deb files and discards them in case there is a mis‐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> match.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>Before we proceed with the example of checksum verification for .deb files, lets do a pristine run of the downloaded files, without any tampering to them.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt-offline install .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Following are the list of bugs present.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>822525 gnome-todo : gnome-todo: Memory leak while loading local and remote lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>853114 gnome-todo : no longer loads caldav lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>883961 libgnome-todo : libgnome-todo: Not actually a library
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>829470 libpeas-1.0-0 : libpeas: Python Plugin Broken
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Y) Yes. Proceed with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(N) No, Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(R) Redisplay the list of bugs.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Bug Number) Display the bug report from the Offline Bug Reports.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(?) Display this help message.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>What would you like to do next: (y, N, ?)y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libgnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo-common_3.28.1-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-1.0-0_1.22.0-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-common_1.22.0-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:51 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt install gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading package lists... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Building dependency tree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading state information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following additional packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following NEW packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0 upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>Need to get 0 B/784 kB of archives.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After this operation, 2,337 kB of additional disk space will be used.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to continue? [Y/n] n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:51 ♒ ॐ ☹ 😟=&amp;gt; 1 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>In the above example, everything is clean and all requirements to apt are satisfied.&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;p>Here&amp;rsquo;s one more exaple, where we invoke the non-default &lt;code>--strict-deb-check&lt;/code> option.&lt;/p>
&lt;p>Everything remains the same, but apt gives a prompt saying that it needs to download the payload from the web. The reality is that if you just proceed with yes, nothing gets downloaded.&lt;/p>
&lt;p>Note: It is not possible to explain that with a still presentation and I&amp;rsquo;m lazy to make a motion object of it.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt-offline install . --strict-deb-check
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Following are the list of bugs present.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>822525 gnome-todo : gnome-todo: Memory leak while loading local and remote lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>853114 gnome-todo : no longer loads caldav lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>883961 libgnome-todo : libgnome-todo: Not actually a library
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>829470 libpeas-1.0-0 : libpeas: Python Plugin Broken
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Y) Yes. Proceed with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(N) No, Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(R) Redisplay the list of bugs.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Bug Number) Display the bug report from the Offline Bug Reports.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(?) Display this help message.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>What would you like to do next: (y, N, ?)y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libgnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo-common_3.28.1-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-1.0-0_1.22.0-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-common_1.22.0-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:52 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt install gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading package lists... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Building dependency tree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading state information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following additional packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following NEW packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0 upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>Need to get 784 kB of archives.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After this operation, 2,337 kB of additional disk space will be used.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to continue? [Y/n]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:1 http://deb.debian.org/debian testing/main amd64 libpeas-common all 1.22.0-5 [192 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:2 http://deb.debian.org/debian testing/main amd64 libpeas-1.0-0 amd64 1.22.0-5 [201 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:3 http://deb.debian.org/debian testing/main amd64 gnome-todo-common all 3.28.1-5 [234 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:4 http://deb.debian.org/debian testing/main amd64 libgnome-todo amd64 3.28.1-5 [6,260 B]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:5 http://deb.debian.org/debian testing/main amd64 gnome-todo amd64 3.28.1-5 [150 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Retrieving bug reports... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Parsing Found/Fixed information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.....snipped.....
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:53 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>To sum it up, this one is an odd case because though nothing for the debs is downloaded, BUT, the network needs to be active for this co-routine to run. If, say, the network is unavailable, apt complains. I haven&amp;rsquo;t checked, but apt does invoke some network code.&lt;/p>
&lt;p>But no payload is downloaded. apt just validates and realizes that all the to-be-downloaded data, is intact and available.&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ echo fasdfadsfasdfasdfasd &amp;gt;&amp;gt; gnome-todo_3.28.1-5_amd64.deb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:54 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt clean
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:54 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;!-- raw HTML omitted -->
&lt;p>So we tampered one of the .deb files, &lt;code>gnome-todo_3.28.1-5_amd64.deb&lt;/code>. And ask &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em> to run its &amp;lsquo;install&amp;rsquo; operation along with the new &lt;code>--strict-deb-check&lt;/code> option.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt-offline install . --strict-deb-check
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Following are the list of bugs present.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>822525 gnome-todo : gnome-todo: Memory leak while loading local and remote lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>853114 gnome-todo : no longer loads caldav lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>883961 libgnome-todo : libgnome-todo: Not actually a library
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>829470 libpeas-1.0-0 : libpeas: Python Plugin Broken
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Y) Yes. Proceed with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(N) No, Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(R) Redisplay the list of bugs.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Bug Number) Display the bug report from the Offline Bug Reports.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(?) Display this help message.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>What would you like to do next: (y, N, ?)y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libgnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo-common_3.28.1-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-1.0-0_1.22.0-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-common_1.22.0-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:54 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt install gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading package lists... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Building dependency tree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading state information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following additional packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following NEW packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0 upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Need to get 784 kB of archives.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After this operation, 2,337 kB of additional disk space will be used.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to continue? [Y/n]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:1 http://deb.debian.org/debian testing/main amd64 libpeas-common all 1.22.0-5 [192 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:2 http://deb.debian.org/debian testing/main amd64 libpeas-1.0-0 amd64 1.22.0-5 [201 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:3 http://deb.debian.org/debian testing/main amd64 gnome-todo-common all 3.28.1-5 [234 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:4 http://deb.debian.org/debian testing/main amd64 libgnome-todo amd64 3.28.1-5 [6,260 B]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:5 http://deb.debian.org/debian testing/main amd64 gnome-todo amd64 3.28.1-5 [150 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>Fetched 150 kB in 1s (141 kB/s)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Retrieving bug reports... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Parsing Found/Fixed information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:55 ♒ ॐ ☹ 😟=&amp;gt; 100 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Pay attention to the downloaded data which is only 150 KiB, for the &lt;code>gnome-todo&lt;/code> package, which was tampered.
Even though &lt;code>apt&lt;/code> stated that it needs to download 784 KiB of data, it actually downloaded 150 KiB only. All data was already downloaded by &lt;code>apt-offline&lt;/code> but we had tampered one of the files, which resulted in it being re-downloaded.&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;p>Now, lets do one more run with the default behavior of &lt;em>&lt;strong>apt-offline&lt;/strong>&lt;/em>, i.e. without the &lt;code>--strict-deb-check&lt;/code> option.
This will result in apt (internally) detecting the tampering and prompting the user that the (tampered) file needs to be downloaded&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="background-color:#3c3d38">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt-offline install .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Proceeding with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Following are the list of bugs present.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>822525 gnome-todo : gnome-todo: Memory leak while loading local and remote lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>853114 gnome-todo : no longer loads caldav lists
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>883961 libgnome-todo : libgnome-todo: Not actually a library
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>829470 libpeas-1.0-0 : libpeas: Python Plugin Broken
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Y) Yes. Proceed with installation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(N) No, Abort.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(R) Redisplay the list of bugs.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Bug Number) Display the bug report from the Offline Bug Reports.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(?) Display this help message.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>What would you like to do next: (y, N, ?)y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libgnome-todo_3.28.1-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gnome-todo-common_3.28.1-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-1.0-0_1.22.0-5_amd64.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libpeas-common_1.22.0-5_all.deb file synced.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:56 ♒ ॐ ☺ 😄
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt^C
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:56 ♒ ॐ ☹ 😟=&amp;gt; 130
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rrs@priyasi:/tmp/gnome-todo$ sudo apt install gnome-todo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading package lists... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Building dependency tree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading state information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following additional packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The following NEW packages will be installed:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gnome-todo gnome-todo-common libgnome-todo libpeas-1.0-0 libpeas-common
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0 upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3c3d38">&lt;span>Need to get 150 kB/784 kB of archives.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After this operation, 2,337 kB of additional disk space will be used.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to continue? [Y/n]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Get:1 http://deb.debian.org/debian testing/main amd64 gnome-todo amd64 3.28.1-5 [150 kB]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Fetched 150 kB in 0s (448 kB/s)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Retrieving bug reports... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Parsing Found/Fixed information... Done
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.....snipped......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>16:57 ♒ ॐ ☺ 😄 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Notice the highlighted line, which gives a less confusing, realistic summary of what needs to be done. In this case, apt is prompting the user that 150 KiB of data needs to be downloaded, which indeed is the case.&lt;/p>
&lt;!-- raw HTML omitted --></description></item><item><title>Laptop Mode Tools 1.73</title><link>https://researchut.com/post/laptop-mode-tools-1_73/</link><pubDate>Sat, 11 Jan 2020 15:14:22 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/laptop-mode-tools-1_73/</guid><description>&lt;h2 id="laptop-mode-tools-173">Laptop Mode Tools 1.73&lt;/h2>
&lt;p>I am pleased to announce the release of &lt;strong>Laptop Mode Tools&lt;/strong> version &lt;em>&lt;strong>1.73&lt;/strong>&lt;/em>&lt;/p>
&lt;p>This release includes many bug fixes. For user convenience, 2 command options
have been added.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">rrs@priyasi:~$ laptop_mode -h
****************************
Following user commands are understood
status : Display a Laptop Mode Tools power savings status
power-stats : Display the power statistics on the machine
power-events : Trap power related events on the machine
help : Display this help message (--help, -h)
version : Display program version (--version, -v)
****************************
15:22 ♒ ॐ ☺ 😄
rrs@priyasi:~$ sudo laptop_mode status
[sudo] password for rrs:
Mounts:
/dev/mapper/nvme0n1p4_crypt on / type btrfs (rw,noatime,compress=zstd:3,ssd,space_cache,autodefrag,subvolid=5,subvol=/)
/dev/nvme0n1p3 on /boot type ext4 (rw,relatime)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
/dev/fuse on /run/user/1000/doc type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
Drive power status:
Cannot read /dev/[hs]d[abcdefgh], permission denied - /usr/sbin/laptop_mode needs to be run as root
(NOTE: drive settings affected by Laptop Mode cannot be retrieved.)
Readahead states:
/dev/mapper/nvme0n1p4_crypt: 128 kB
/dev/nvme0n1p3: 128 kB
/dev/nvme0n1p1: 128 kB
Laptop Mode Tools is allowed to run: /var/run/laptop-mode-tools/enabled exists.
/proc/sys/vm/laptop_mode:
0
/proc/sys/vm/dirty_ratio:
40
/proc/sys/fs/xfs/xfssyncd_centisecs:
3000
/proc/sys/vm/dirty_background_ratio:
10
/proc/sys/vm/dirty_expire_centisecs:
3000
/proc/sys/vm/dirty_writeback_centisecs:
500
......SNIPPED......
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq:
400000
/sys/devices/system/cpu/cpu5/cpufreq/cpuinfo_max_freq:
2001000
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor:
schedutil
/sys/devices/system/cpu/cpu7/cpufreq/scaling_governor:
schedutil
/proc/acpi/button/lid/LID0/state:
state: open
/sys/class/power_supply/AC/online:
1
/sys/class/power_supply/BAT0/status:
Charging
15:22 ♒ ॐ ☺ 😄
rrs@priyasi:~$ laptop_mode power-stats
Power Supply details for /sys/class/power_supply/AC
P: /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
L: 0
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
E: POWER_SUPPLY_NAME=AC
E: POWER_SUPPLY_ONLINE=1
E: SUBSYSTEM=power_supply
Power Supply details for /sys/class/power_supply/BAT0
P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
L: 0
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
E: POWER_SUPPLY_NAME=BAT0
E: POWER_SUPPLY_STATUS=Charging
E: POWER_SUPPLY_PRESENT=1
E: POWER_SUPPLY_TECHNOLOGY=Li-poly
E: POWER_SUPPLY_CYCLE_COUNT=0
E: POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7600000
E: POWER_SUPPLY_VOLTAGE_NOW=8760000
E: POWER_SUPPLY_CURRENT_NOW=545000
E: POWER_SUPPLY_CHARGE_FULL_DESIGN=6842000
E: POWER_SUPPLY_CHARGE_FULL=6592000
E: POWER_SUPPLY_CHARGE_NOW=6526000
E: POWER_SUPPLY_CAPACITY=98
E: POWER_SUPPLY_CAPACITY_LEVEL=Normal
E: POWER_SUPPLY_MODEL_NAME=DELL G8VCF6C
E: POWER_SUPPLY_MANUFACTURER=SMP
E: POWER_SUPPLY_SERIAL_NUMBER=1549
E: SUBSYSTEM=power_supply
15:23 ♒ ॐ ☺ 😄
rrs@priyasi:~$ laptop_mode power-events
Running Laptop Mode Tools in event tracing mode. Press ^C to interrupt
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[140321.536870] change /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=AC
POWER_SUPPLY_ONLINE=0
SEQNUM=5908
KERNEL[140321.569526] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Discharging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-poly
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7600000
POWER_SUPPLY_VOLTAGE_NOW=8761000
POWER_SUPPLY_CHARGE_FULL_DESIGN=6842000
POWER_SUPPLY_CHARGE_FULL=6592000
POWER_SUPPLY_CHARGE_NOW=6526000
POWER_SUPPLY_CAPACITY=98
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=DELL G8VCF6C
POWER_SUPPLY_MANUFACTURER=SMP
POWER_SUPPLY_SERIAL_NUMBER=1549
SEQNUM=5909
UDEV [140321.577770] change /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=AC
POWER_SUPPLY_ONLINE=0
SEQNUM=5908
USEC_INITIALIZED=140321550931
UDEV [140321.582123] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Discharging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-poly
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7600000
POWER_SUPPLY_VOLTAGE_NOW=8761000
POWER_SUPPLY_CHARGE_FULL_DESIGN=6842000
POWER_SUPPLY_CHARGE_FULL=6592000
POWER_SUPPLY_CHARGE_NOW=6526000
POWER_SUPPLY_CAPACITY=98
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=DELL G8VCF6C
POWER_SUPPLY_MANUFACTURER=SMP
POWER_SUPPLY_SERIAL_NUMBER=1549
SEQNUM=5909
USEC_INITIALIZED=140321580812
KERNEL[140324.857185] change /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=AC
POWER_SUPPLY_ONLINE=1
SEQNUM=5912
UDEV [140324.916156] change /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/AC
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=AC
POWER_SUPPLY_ONLINE=1
SEQNUM=5912
USEC_INITIALIZED=140324887055
KERNEL[140324.917955] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Unknown
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-poly
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7600000
POWER_SUPPLY_VOLTAGE_NOW=8622000
POWER_SUPPLY_CHARGE_FULL_DESIGN=6842000
POWER_SUPPLY_CHARGE_FULL=6592000
POWER_SUPPLY_CHARGE_NOW=6526000
POWER_SUPPLY_CAPACITY=98
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=DELL G8VCF6C
POWER_SUPPLY_MANUFACTURER=SMP
POWER_SUPPLY_SERIAL_NUMBER=1549
SEQNUM=5913
UDEV [140324.922916] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
ACTION=change
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0A:00/power_supply/BAT0
SUBSYSTEM=power_supply
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Unknown
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-poly
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7600000
POWER_SUPPLY_VOLTAGE_NOW=8622000
POWER_SUPPLY_CHARGE_FULL_DESIGN=6842000
POWER_SUPPLY_CHARGE_FULL=6592000
POWER_SUPPLY_CHARGE_NOW=6526000
POWER_SUPPLY_CAPACITY=98
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=DELL G8VCF6C
POWER_SUPPLY_MANUFACTURER=SMP
POWER_SUPPLY_SERIAL_NUMBER=1549
SEQNUM=5913
USEC_INITIALIZED=140324922572
^C
15:24 ♒ ॐ ☹ 😟=&amp;gt; 130 &lt;/code>&lt;/pre>
&lt;p>A filtered list of changes is mentioned below. For the full log, please refer to the git repository.&lt;/p>
&lt;h3 id="173---sat-jan-11-145211-ist-2020">1.73 - Sat Jan 11 14:52:11 IST 2020&lt;/h3>
&lt;pre>&lt;code>* Respect black/white lists when disabling autosuspend
* Add newer power supply names
* Fix crash due external battery of mouse
* Honor configuration setting for battery level polling
* cpufreq: intel_pstate should use performance governors
* runtime-pm: Speed up by avoiding fork in echo_to_file
* runtime-pm: Inline echo_to_file_do
* runtime-pm: Fix echo_to_file* indentation
* runtime-pm: Speed up by avoiding fork in listed_by_{id,type}
* runtime-pm: Simplify vendor/product match
* add help and verison user commands
* Add a power-stats status command
* Separate power sysfs attributes and add sysfs status attribute
* Add device type 'sd' to default blacklist
* Fix rpm spec file for new installable files
&lt;/code>&lt;/pre>
&lt;p>Source tarball, Feodra/SUSE RPM Packages available at:
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases">https://github.com/rickysarraf/laptop-mode-tools/releases&lt;/a>&lt;/p>
&lt;p>Debian packages will be available soon in Unstable.&lt;/p>
&lt;p>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;/p>
&lt;p>Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/p>
&lt;h2 id="what-is-laptop-mode-tools">What is Laptop Mode Tools&lt;/h2>
&lt;pre tabindex="0">&lt;code>Description: Tools for Power Savings based on battery/AC status
Laptop mode is a Linux kernel feature that allows your laptop to save
considerable power, by allowing the hard drive to spin down for longer
periods of time. This package contains the userland scripts that are
needed to enable laptop mode.
.
It includes support for automatically enabling laptop mode when the
computer is working on batteries. It also supports various other power
management features, such as starting and stopping daemons depending on
power mode, automatically hibernating if battery levels are too low, and
adjusting terminal blanking and X11 screen blanking
.
laptop-mode-tools uses the Linux kernel&amp;#39;s Laptop Mode feature and thus
is also used on Desktops and Servers to conserve power
&lt;/code>&lt;/pre></description></item><item><title>Comments on Hugo with Isso</title><link>https://researchut.com/blog/Comments_on_Hugo_with_Isso/</link><pubDate>Wed, 30 Oct 2019 19:11:27 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Comments_on_Hugo_with_Isso/</guid><description>&lt;h2 id="integrating-comments-on-hugo-with-isso">Integrating Comments on Hugo with Isso&lt;/h2>
&lt;p>Oh! Boy. Finally been able to get something set up almost to my liking. After moving away from Drupal to Hugo, getting the &lt;em>commenting system&lt;/em> in place was challenging. There were many solutions but I was adamant to what I wanted.&lt;/p>
&lt;ul>
&lt;li>Simple. Something very simple so that I can spend very limited time to tickle with (especially 2 years down the line)&lt;/li>
&lt;li>Independent. No Google/Facebook/3rd Party dependency&lt;/li>
&lt;li>Simple workflow. No Github/Gitlab/Staticman dependency&lt;/li>
&lt;li>Simple moderation workflow&lt;/li>
&lt;/ul>
&lt;h3 id="simplicity">Simplicity&lt;/h3>
&lt;p>First, the migration away from Drupal itself was a &lt;em>PITA&lt;/em>. I let go of all the comments there. Knowing my limited web skills, it was the foremost requisite to have something simplest as possible.&lt;/p>
&lt;h3 id="independent">Independent&lt;/h3>
&lt;p>Tracking is becoming very very common. While I still have &lt;em>Google Analytics&lt;/em> enabled on my website, that is more of a personal choice as I would like to see some monthly reporting. And whenever I want, I can just quietly disable it, if in case it becomes perversely invasive. As for the commenting system, I can be assured now that it wouldn&amp;rsquo;t depend on a 3rd party service.&lt;/p>
&lt;h3 id="simple-workflow">Simple workflow&lt;/h3>
&lt;p>Lots and lots of people moved to static sites and chose a self-hosted model on Github (and other similar services). Then, service like Staticman, complemented it with integration of a commenting system, with Github&amp;rsquo;s Issue Tracker workflow.&lt;/p>
&lt;p>From my past experiences, my quest now has been to keep my setups as simple as possible. For example, for passwords, I wouldn&amp;rsquo;t want to ever again rely on &lt;strong>Seahorse or Kwallet&lt;/strong> etc. Similarly, after getting out of the clutch of Drupal, I wanted to resort back to keeping the website content structure simple. And Hugo does a good job there. And so was the quest for the commenting system.&lt;/p>
&lt;h3 id="simple-moderation-workflow">Simple moderation workflow&lt;/h3>
&lt;p>SPAM is inevitable. I wanted to have something &lt;em>simple, basic and well tested&lt;/em>. What better than the good old email. Every comment added is put into a moderation queue and the admin is sent with an email for the same, including a unique approve/reject link in the email.&lt;/p>
&lt;h2 id="isso-commenting-system">Isso Commenting System&lt;/h2>
&lt;p>To describe it:&lt;/p>
&lt;pre tabindex="0">&lt;code>Description-en: lightweight web-based commenting system
A lightweight commenting system written in Python. It supports CRUD comments
written in Markdown, Disqus import, I18N, website integration via JavaScript.
Comments are stored in SQLite.
&lt;/code>&lt;/pre>&lt;p>I had heard the name a couple months ago but hadn&amp;rsquo;t spent much time. This week, with some spare time on, I stumbled across some good articles about setup and integration for Isso.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://angristan.xyz/add-comments-to-your-blog-with-isso/">https://angristan.xyz/add-comments-to-your-blog-with-isso/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://stiobhart.net/2017-02-24-isso-comments/">https://stiobhart.net/2017-02-24-isso-comments/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://therandombits.com/2018/12/how-to-add-isso-comments-to-your-site/">https://therandombits.com/2018/12/how-to-add-isso-comments-to-your-site/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The good part is that Isso is already packaged for Debian so I didn&amp;rsquo;t have to go through the source based setup. I did spend some time fiddling around with the &lt;strong>.service vs .socket&lt;/strong> discrepancies but my desperate focus was to get the bits together and have the commenting system in place.&lt;/p>
&lt;p>Once I get some free time again, I&amp;rsquo;d like to extract useful information and file a bug report on Debian BTS. But for now, Thank You to the package maintainer for packaging/maintaining Isso for Debian.&lt;/p>
&lt;h3 id="integration-for-my-setup-nginx--hugo--beautifulhugo--isso">Integration for my setup (nginx + Hugo + BeautifulHugo + Isso)&lt;/h3>
&lt;p>For &lt;strong>nginx&lt;/strong>, just the following addition lines to ingerate &lt;strong>Isso&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code> location /isso {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8000;
}
&lt;/code>&lt;/pre>&lt;p>For &lt;strong>Hugo and BeautifulHugo&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>commit 922a88c41d784dc59aa17a9cbdba4a1898984a3e (HEAD -&amp;gt; isso)
Author: Ritesh Raj Sarraf &amp;lt;rrs@debian.org&amp;gt;
Date: Tue Oct 29 12:52:13 2019 +0530
Add display content for isso
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index 0ab1bf5..afda94e 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -55,6 +55,11 @@
&amp;lt;/ul&amp;gt;
{{ end }}
+ {{&amp;#34;&amp;lt;!-- begin comments //--&amp;gt;&amp;#34; | safeHTML}}
+ &amp;lt;section id=&amp;#34;isso-thread&amp;#34;&amp;gt;
+
+ &amp;lt;/section&amp;gt;
+ {{&amp;#34;&amp;lt;!-- end comments //--&amp;gt;&amp;#34; | safeHTML}}
{{ if (.Params.comments) | or (and (or (not (isset .Params &amp;#34;comments&amp;#34;)) (eq .Params.comments nil)) (and .Site.Params.comments (ne .Type &amp;#34;page&amp;#34;))) }}
{{ if .Site.DisqusShortname }}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index 2182534..161d3f0 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -81,6 +81,11 @@
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
+
+ {{ &amp;#34;&amp;lt;!-- isso --&amp;gt;&amp;#34; | safeHTML }}
+ &amp;lt;script data-isso=&amp;#34;{{ .Site.BaseURL }}isso/&amp;#34; src=&amp;#34;{{ .Site.BaseURL }}isso/js/embed.min.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
+ {{ &amp;#34;&amp;lt;!-- end isso --&amp;gt;&amp;#34; | safeHTML }}
+
&amp;lt;/header&amp;gt;
{{ else }}
&amp;lt;div class=&amp;#34;intro-header&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code>&lt;/pre>&lt;p>And the JavaScript:&lt;/p>
&lt;pre tabindex="0">&lt;code>commit 3e1d52cefe8be425777d60387c8111c908ddc5c1
Author: Ritesh Raj Sarraf &amp;lt;rrs@debian.org&amp;gt;
Date: Tue Oct 29 12:44:38 2019 +0530
Add javascript for isso comments
diff --git a/static/isso/js/embed.min.js b/static/isso/js/embed.min.js
new file mode 100644
index 0000000..1d9a0e3
--- /dev/null
+++ b/static/isso/js/embed.min.js
@@ -0,0 +1,1430 @@
+/**
+ * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/almond for details
+ */
+
+/*
+ Copyright (C) 2013 Gregory Schier &amp;lt;gschier1990@gmail.com&amp;gt;
+ Copyright (C) 2013 Martin Zimmermann &amp;lt;info@posativ.org&amp;gt;
+
+ Inspired by http://codepen.io/gschier/pen/GLvAy
+*/
....snipped......
&lt;/code>&lt;/pre>&lt;p>That&amp;rsquo;s pretty much it. Happy Me :-)&lt;/p></description></item><item><title>User Mode Linux 5.2</title><link>https://researchut.com/blog/user-mode-linux-52/</link><pubDate>Thu, 17 Oct 2019 19:34:00 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/user-mode-linux-52/</guid><description>&lt;h2 id="user-mode-linux-52">User Mode Linux 5.2&lt;/h2>
&lt;p>User Mode Linux version 5.2 has been uploaded to Debian Unstable and will soon be available on the supported architectures. This upload took more time than usual as I ran into a build time failure caused by newer &lt;em>PCAP&lt;/em> library.&lt;/p>
&lt;p>Thanks to active upstream developers, this got &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=938962#84">sorted out quick&lt;/a>. In the longer run, we may have a much better fix for it.&lt;/p>
&lt;h3 id="what-is-user-mode-linux-aka-uml">What is User Mode Linux a.k.a uml&lt;/h3>
&lt;p>It is one of the initial virtualization technologies that Linux provided, which still works and is supported/maintained. It is about running a Linux kernel as a single unprivileged &lt;strong>user process&lt;/strong>.&lt;/p>
&lt;p>There was a similar project, &lt;strong>coLinux&lt;/strong>, that had a port of &lt;em>Linux kernel&lt;/em> to Microsoft Windows, that I used to recommend to people, that were more familiar to Microsoft Windows environment. Conceptually, it was very similar to &lt;em>UML&lt;/em>. With &lt;strong>coLinux, XMing and PulseAudio&lt;/strong>, it was a delight to see &lt;em>GNU/Linux&lt;/em> based applications to run efficiently on Microsoft Windows.&lt;/p>
&lt;p>That was years ago. Unfortunately, the last time I checked on &lt;em>coLinux&lt;/em>, it did not seem to be maintained any more. &lt;em>User Mode Linux&lt;/em> too hasn&amp;rsquo;t had a very large user/developer base but, despite, it being part of the &lt;em>Linux&lt;/em> kernel has kept it fairly well maintained.&lt;/p>
&lt;p>The good news is that for the last 2 years or so, &lt;em>uml&lt;/em> has had active maintainers/developers for this project. So I expect to see some parity in terms of features and performance numbers eventually. Things like &lt;strong>virtio&lt;/strong> could definitely bring in a lot of performance improvements to &lt;em>UML&lt;/em>. And much wider user acceptance ultimately.&lt;/p>
&lt;p>To quote the Debian package description:&lt;/p>
&lt;pre tabindex="0">&lt;code>Package: user-mode-linux
Version: 5.2-1um-1
Built-Using: linux (= 5.2.17-1)
Status: install ok installed
Priority: extra
Section: kernel
Maintainer: User Mode Linux Maintainers &amp;lt;team+uml@tracker.debian.org&amp;gt;
Installed-Size: 43.7 MB
Depends: libc6 (&amp;gt;= 2.28)
Recommends: uml-utilities (&amp;gt;= 20040406-1)
Suggests: x-terminal-emulator, rootstrap, user-mode-linux-doc, slirp, vde2
Homepage: http://user-mode-linux.sourceforge.net/
Download-Size: unknown
APT-Manual-Installed: yes
APT-Sources: /var/lib/dpkg/status
Description: User-mode Linux (kernel)
User-mode Linux (UML) is a port of the Linux kernel to its own system
call interface. It provides a kind of virtual machine, which runs
Linux as a user process under another Linux kernel. This is useful
for kernel development, sandboxes, jails, experimentation, and many
other things.
.
This package contains the kernel itself, as an executable program,
and the associated kernel modules.
&lt;/code>&lt;/pre>&lt;h3 id="user-mode-linux-networking">User Mode Linux networking&lt;/h3>
&lt;p>I have been maintaining &lt;em>User Mode Linux for Debian&lt;/em> for a couple of years now but one area where I still waste a lot of time at times, is networking.&lt;/p>
&lt;p>Today, we have these major virt technologies: &lt;strong>Virtualizaiton, Containers and UML&lt;/strong>. For simplicity, I am keeping &lt;em>UML&lt;/em> as a separate type.&lt;/p>
&lt;p>For my needs, I prefer keeping a single bridge on my laptop, to which all different types of technologies can talk through, to access the network. By keeping everything through the bridge, I get to focus on just one entry/exit point for &lt;em>firewall, monitoring, trouble shooting etc&lt;/em>.&lt;/p>
&lt;p>As of today, easily:&lt;/p>
&lt;ul>
&lt;li>VirtualBox can talk to my local bridge&lt;/li>
&lt;li>Libvirt/Qemu can talk to my local bridge&lt;/li>
&lt;li>Docker can too&lt;/li>
&lt;li>systemd-nspawn can also&lt;/li>
&lt;/ul>
&lt;p>The only challenge comes in with &lt;em>UML&lt;/em> where in I have had to setup a separate &lt;em>tun&lt;/em> interface and make &lt;em>UML&lt;/em> talk through it using &lt;strong>Tuntap Daemon Mode&lt;/strong>. And on the host, I do &lt;em>NAT&lt;/em> to get it talk to the internet.&lt;/p>
&lt;p>Ideally, I would like to simply tell &lt;em>UML&lt;/em> that this is my bridge device and that it should associate itself to it for networking. I looked at &lt;code>vde&lt;/code> and found a wrapper &lt;code>vdeq&lt;/code>. Something like this for &lt;em>UML&lt;/em> could simplify things a lot.&lt;/p>
&lt;p>&lt;em>UML&lt;/em> also has an &lt;code>=vde&lt;/code> mode wherein it can attach itself to. But from the looks of it, it is similar to what we already provide through &lt;em>uml-utilities&lt;/em> in &lt;em>tuntap daemon&lt;/em> mode&lt;/p>
&lt;p>I am curious if other &lt;em>User Mode Linux&lt;/em> users have simplified ways to get networking set up. And ideally, if it can be setup through Debian&amp;rsquo;s &lt;code>networking ifup scripts&lt;/code> or through &lt;code>systemd-networkd&lt;/code>. If so, I would really appreciate if you could drop me a note over email &lt;strong>until I find a simple and clean way to get comments setup ready for my blog&lt;/strong>&lt;/p></description></item><item><title>Bpfcc New Release</title><link>https://researchut.com/blog/Bpfcc_New_Release/</link><pubDate>Mon, 14 Oct 2019 14:54:33 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Bpfcc_New_Release/</guid><description>&lt;h2 id="bpf-compiler-collection-0110">BPF Compiler Collection 0.11.0&lt;/h2>
&lt;p>&lt;a href="https://github.com/iovisor/bcc">bpfcc&lt;/a> version 0.11.0 has been uploaded to Debian Unstable and should be accessible in the repositories by now. After the &lt;code>0.8.0&lt;/code> release, this has been the next one uploaded to Debian.&lt;/p>
&lt;h3 id="multiple-source-respositories">Multiple source respositories&lt;/h3>
&lt;p>This release brought in dependencies to another set of sources from the &lt;a href="https://github.com/libbpf/libbpf">libbpf&lt;/a> project. In the upstream repo, this is still a &lt;a href="https://github.com/iovisor/bcc/issues/2261">topic of discussion&lt;/a> on how to release tools where one depends on another, in unison. Right now, &lt;em>libbpf&lt;/em> is configured as a &lt;em>git submodule&lt;/em> in the &lt;em>bcc&lt;/em> repository. So anyone using the upstream git repoistory should be able to build it.&lt;/p>
&lt;h3 id="multiple-source-archive-for-a-debian-package">Multiple source archive for a Debian package&lt;/h3>
&lt;p>So I had read in the past about &lt;strong>Multiple source tarballs for a single package&lt;/strong> in Debian but never tried it because I wasn&amp;rsquo;t maintaining anything in Debian which was such. With &lt;em>bpfcc&lt;/em> it was now a good opportunity to try it out. First, I came across &lt;a href="https://raphaelhertzog.com/2010/09/07/how-to-use-multiple-upstream-tarballs-in-debian-source-packages/">this&lt;/a> post from &lt;strong>Raphaël Hertzog&lt;/strong> which gives a good explanation of what all has been done. This article was very clear and concise on the topic&lt;/p>
&lt;h3 id="git-buildpackage">Git Buildpackage&lt;/h3>
&lt;p>&lt;em>gbp&lt;/em> is my tool of choice for packaging in Debian. So I did a quick look to check how &lt;em>gbp&lt;/em> would take care of it. And everything was in place and &lt;strong>Just Worked&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>rrs@priyasi:~/rrs-home/Community/Packaging/bpfcc (master)$ gbp buildpackage --git-component=libbpf
gbp:info: Creating /home/rrs/NoBackup/Community/Packaging/bpfcc_0.11.0.orig.tar.gz
gbp:info: Creating /home/rrs/NoBackup/Community/Packaging/bpfcc_0.11.0.orig-libbpf.tar.gz
gbp:info: Performing the build
dpkg-checkbuilddeps: error: Unmet build dependencies: arping clang-format cmake iperf libclang-dev libedit-dev libelf-dev libzip-dev llvm-dev libluajit-5.1-dev luajit python3-pyroute2
W: Unmet build-dependency in source
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying fix-install-path.patch
dh clean --buildsystem=cmake --with python3 --no-parallel
dh_auto_clean -O--buildsystem=cmake -O--no-parallel
dh_autoreconf_clean -O--buildsystem=cmake -O--no-parallel
dh_clean -O--buildsystem=cmake -O--no-parallel
dpkg-source: info: using source format &amp;#39;3.0 (quilt)&amp;#39;
dpkg-source: info: building bpfcc using existing ./bpfcc_0.11.0.orig-libbpf.tar.gz
dpkg-source: info: building bpfcc using existing ./bpfcc_0.11.0.orig.tar.gz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: warning: ignoring deletion of directory src/cc/libbpf
dpkg-source: info: building bpfcc in bpfcc_0.11.0-1.debian.tar.xz
dpkg-source: info: building bpfcc in bpfcc_0.11.0-1.dsc
I: Generating source changes file for original dsc
dpkg-genchanges: info: including full source code in upload
dpkg-source: info: unapplying fix-install-path.patch
ERROR: ld.so: object &amp;#39;libeatmydata.so&amp;#39; from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
W: cgroups are not available on the host, not using them.
I: pbuilder: network access will be disabled during build
I: Current time: Sun Oct 13 19:53:57 IST 2019
I: pbuilder-time-stamp: 1570976637
I: Building the build Environment
I: extracting base tarball [/var/cache/pbuilder/sid-amd64-base.tgz]
I: copying local configuration
I: mounting /proc filesystem
I: mounting /sys filesystem
I: creating /{dev,run}/shm
I: mounting /dev/pts filesystem
I: redirecting /dev/ptmx to /dev/pts/ptmx
I: Mounting /var/cache/apt/archives/
I: policy-rc.d already exists
W: Could not create compatibility symlink because /tmp/buildd exists and it is not a directory
I: using eatmydata during job
I: Using pkgname logfile
I: Current time: Sun Oct 13 19:54:04 IST 2019
I: pbuilder-time-stamp: 1570976644
I: Setting up ccache
I: Copying source file
I: copying [../bpfcc_0.11.0-1.dsc]
I: copying [../bpfcc_0.11.0.orig-libbpf.tar.gz]
I: copying [../bpfcc_0.11.0.orig.tar.gz]
I: copying [../bpfcc_0.11.0-1.debian.tar.xz]
I: Extracting source
dpkg-source: warning: extracting unsigned source package (bpfcc_0.11.0-1.dsc)
dpkg-source: info: extracting bpfcc in bpfcc-0.11.0
dpkg-source: info: unpacking bpfcc_0.11.0.orig.tar.gz
dpkg-source: info: unpacking bpfcc_0.11.0.orig-libbpf.tar.gz
dpkg-source: info: unpacking bpfcc_0.11.0-1.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying fix-install-path.patch
I: Not using root during the build.
&lt;/code>&lt;/pre></description></item><item><title>Setting a Lotus Pot</title><link>https://researchut.com/blog/Setting-Lotus-Pot/</link><pubDate>Sat, 05 Oct 2019 21:56:58 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Setting-Lotus-Pot/</guid><description>&lt;h2 id="experiences-setting-up-a-lotus-pond-pot">Experiences setting up a Lotus &lt;del>Pond&lt;/del> Pot&lt;/h2>
&lt;h3 id="a-novices-first-time-experience-setting-up-a-lotus-pond-and-germinating-the-lotus-seeds-to-a-full-plant">A novice&amp;rsquo;s first time experience setting up a Lotus pond and germinating the Lotus seeds to a full plant&lt;/h3>
&lt;h4 id="the-trigger">The trigger&lt;/h4>
&lt;p>Our neighbors have a very nice Lotus setup in the front of their garden, with flowers blooming in it. It is really a pleasing experience to see it. With lifestyles limiting to specifics, I&amp;rsquo;m glad to be around with like minded people. So we decided to set up a &lt;strong>Lotus &lt;del>Pond&lt;/del> Pot&lt;/strong> in our garden too.&lt;/p>
&lt;h4 id="hunting-the-pot">Hunting the pot&lt;/h4>
&lt;p>About 2/3rd of our garden has been laid out with Mexican Grass, with the exception of some odd spots where there are 2 large concrete tanks in the ground and other small tanks. The large one is fairly big, with a dimension around 3.5 x 3.5 ft. We wanted to make use of that spot. I checked out some of the available pots and found a good looking circular pot carved in stone, of around 2 ft, but it was quite expensive and not fitting my budget.&lt;/p>
&lt;p>With the stone pot out of my budget, the other options left out were&lt;/p>
&lt;ul>
&lt;li>One molded in cement&lt;/li>
&lt;li>Granite&lt;/li>
&lt;/ul>
&lt;p>We looked at another pot maker who made pots by molds in cement. They had some small size pot samples of around 1x1 feet but the finished product samples didn&amp;rsquo;t look very good. From the available samples, we weren&amp;rsquo;t sure how well would the pot what we wanted, would look like. Also, they weren&amp;rsquo;t having a proportionate price difference. The vendor would take a months time to make one. With no ready made sample of that size in place, this was something we weren&amp;rsquo;t very enthused to explore.&lt;/p>
&lt;p>We instead chose to explore the possibility of building one with granite slabs. First reason being, granite vendors were more easily available. But second and most important, given the spot I had chosen, I felt a square granite based setup will be an equally good fit. Also, the granite based pot was coming in budget friendly. Finally, we settled with a 3 x 3 ft granite pot.&lt;/p>
&lt;p>And this is what our initial Lotus Pot looked like.
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_pot_initial.jpg" alt="Granite Lotus Pot"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_pot_initial.jpg" itemprop="contentUrl">&lt;/a>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;p>&lt;em>&lt;strong>Note: The granite pot was quite heavy, close to around 200 Kilograms. It took us 3 people to place it at the designated spot&lt;/strong>&lt;/em>&lt;/p>
&lt;h4 id="actual-lotus-pot">Actual Lotus pot&lt;/h4>
&lt;p>As you can see from the picture above, there&amp;rsquo;s another pot in the larger granite pot itself. Lotus&amp;rsquo; grow in water and sludge. So we needed to provide it with the same setup. We used one of the &lt;strong>Biryani Pots&lt;/strong> to prepare for the sludge. This is where the Lotus&amp;rsquo; roots, &lt;em>&lt;strong>tuber&lt;/strong>&lt;/em>, will live and grow, inside the water and sludge.&lt;/p>
&lt;p>With an open pot, when you have water stored, you have other challenges to take care of.&lt;/p>
&lt;ul>
&lt;li>Aeration of the water&lt;/li>
&lt;li>Mosquitoes&lt;/li>
&lt;/ul>
&lt;p>We bought a &lt;em>solar water fountain&lt;/em> to take care of the water. It is a nice device that works very well under sunlight. Remember, for your Lotus, you need a well sun-lit area. So, the &lt;em>solar water fountain&lt;/em> was a perfect fit for this scenario.&lt;/p>
&lt;p>But, with water, breed mosquitoes. As most would do, we chose to put in some fish into the pond to take care of that problem. We put in some Mollies, which we hope would produce more. Also the waste they produce, should work as a supplement fertilizer for the Lotus plant.&lt;/p>
&lt;p>Aeration is very important for the fish and so far our &lt;strong>Solar Water Fountain&lt;/strong> seems to be doing a good job there, keeping the fishes happy and healthy.&lt;/p>
&lt;p>&lt;strong>So in around a week, we had the Lotus Pot in place along with a water fountain and some fish.&lt;/strong>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Z8nT4yz5bPw?autoplay=1&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=1&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;h3 id="the-lotus-plant-itself">The Lotus Plant itself&lt;/h3>
&lt;p>With the setup in place, it was now time to head to the nearby nursery and get the Lotus plant. It was an utter surprise to us to not find the Lotus plant in any of the nurseries. After quite a lot of searching around, we came across one nursery that had some lotus plants. They didn&amp;rsquo;t look in good health but that was the only option we had. But the bigger disappointment was the price, which was insanely high for a plant. We returned back home without the Lotus, a little disheartened.&lt;/p>
&lt;h4 id="thank-you-internet">Thank you Internet&lt;/h4>
&lt;p>The internet has connected the world so well. I looked up the internet and was delighted to see so many people sharing experiences in the form of articles and YouTube videos about Lotus. You can find all the necessary information about. With it, we were all charged up to venture into the next step, &lt;em>&lt;strong>to grow the lotus from &lt;del>scratch&lt;/del> seeds&lt;/strong>&lt;/em> instead.&lt;/p>
&lt;h4 id="the-lotus-seeds">The Lotus seeds&lt;/h4>
&lt;p>First, we looked up the internet and placed an order for 15 lotus seeds. Soon, they were delivered. And this is what Lotus seeds look like.
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Seeds.jpg" alt="Lotus Seeds"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Seeds.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus Seeds&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
I had, never in my life before, seen lotus seeds. The shell is very very hard. An impressive remnant of the Lotus plant.&lt;/p>
&lt;h4 id="germinating-the-seed">Germinating the seed&lt;/h4>
&lt;p>Germinating the seed is an experience of its own, given how hard the lotus&amp;rsquo; shell is. There are very good articles and videos on the internet explaining on the steps on how to germinate a seed. In a gist, you need to scratch the pointy end of the seed&amp;rsquo;s shell enough to see the inner membrane. And then you need to submerge it in water for around 7-10 days. Every day, you&amp;rsquo;ll be able to witness the germination process.
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Seeds_One.jpg" alt="Lotus seed with the pointy end"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Seeds_One.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus seed with the pointy end&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
Make sure to scratch the pointy end well enough, while also ensuring to not damage the inner membrane of the seed. You also need to change the water in the container on a daily basis and keep it in a decently lit area.&lt;/p>
&lt;p>Here&amp;rsquo;s an interesting bit, specific to my own experience. Turned out that the seeds we purchased online wasn&amp;rsquo;t of good quality. Except for one, none of the other seeds germinated. And the one that did, did not sprout out proper. It popped a single shoot but the shoot did not grow much. In all, it didn&amp;rsquo;t work.&lt;/p>
&lt;p>But while we were waiting for the seeds to be delivered, my wife looked at the pictures of the seeds that I was studying about online, realized that we already had the lotus seeds at home. Turns out, these seeds are used in our &lt;em>&lt;strong>Hindu Puja Rituals&lt;/strong>&lt;/em>. The seeds are called &lt;strong>कमल गट्टा&lt;/strong> in Hindi. We had some of the seeds from the puja remaining. So we had in parallel, used those seeds for germination and they sprouted out very well.&lt;/p>
&lt;p>&lt;em>&lt;strong>Unfortunately, I had not taken any pictures of them during the germination phase&lt;/strong>&lt;/em> &lt;a href="#Update-Sat-12-Oct-2019">Update: Sat 12 Oct 2019&lt;/a>&lt;/p>
&lt;p>The sprouting phase should be done in a tall glass. This will allow for the &lt;em>shoots&lt;/em> to grow long, as eventually, it needs to be set into the actual pot. During the germination phase, the &lt;em>shoot&lt;/em> will grow daily around an inch or so, ultimately targeting to reach the surface of the water. Once it reaches the surface, eventually, at the base, it&amp;rsquo;ll start developing the roots.&lt;/p>
&lt;p>&lt;em>&lt;strong>Now is time to start the preparation to sow the seed into the sub-pot which has all the sludge&lt;/strong>&lt;/em>&lt;/p>
&lt;h4 id="sowing-your-seeds">Sowing your seeds&lt;/h4>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Sludge_Pot.jpg" alt="Initial Lotus growing in the sludge"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Sludge_Pot.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Initial Lotus growing in the sludge&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>This picture is from a couple of days after I sowed the seeds. When you transfer the &lt;em>shoots&lt;/em> into the sludge, use your finger to submerge into the sludge making room for the seed. Gently place the seed into the sludge. You can also cover the sub-pot with some gravel just to keep the sludge intact and clean.&lt;/p>
&lt;p>Once your &lt;em>shoots&lt;/em> get accustomed to the new environment, they start to grow again. That is what you see in the picture above, where the &lt;em>shoot&lt;/em> reaches the surface of the water and then starts developing into the beautiful lotus leaf&lt;/p>
&lt;h4 id="lotus-leaf">Lotus leaf&lt;/h4>
&lt;p>It is a pleasure to see the Lotus leaves floating on the water. The flowering is going to take well over a year, from what I have read on the internet. But the &lt;em>&lt;strong>Lotus Leaves, its veins&lt;/strong>&lt;/em> and the &lt;em>&lt;strong>water droplets&lt;/strong>&lt;/em> on it, for now itself, are very soothing to watch
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Closeup.jpg" alt="Lotus Closeup"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Closeup.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus leaf veins&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Water_Droplets_Veins.jpg" alt="Lotus leaf veins and water droplets"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Water_Droplets_Veins.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus leaf veins and water droplets&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h4 id="final-result">Final Result&lt;/h4>
&lt;p>As of today, this is what the final setup looks like. Hopefully, in a year&amp;rsquo;s time, there&amp;rsquo;ll be flowers&lt;/p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Setup_Now.jpg" alt="Lotus Pot setup now"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Setup_Now.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus pot setup now&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;h4 id="update-sat-12-oct-2019-a-idupdate-sat-12-oct-2019a">Update Sat 12 Oct 2019 &lt;!-- raw HTML omitted -->&lt;!-- raw HTML omitted -->&lt;/h4>
&lt;p>So I was able to capture some pictures from the Lotus pot, wherein you can see the &lt;em>&lt;strong>Lotus Shoot while inside the water&lt;/strong>&lt;/em>, then &lt;em>&lt;strong>Lotus Shoot when it reaches the surface&lt;/strong>&lt;/em>, and finally &lt;em>&lt;strong>Lotus Shoot developing its leaf&lt;/strong>&lt;/em>&lt;/p>
&lt;p>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Shoot_Inside_Water.jpg" alt="Lotus Shoot Inside Water"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Shoot_Inside_Water.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus Shoot Inside Water&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Shoot_Reaching_Surface.jpg" alt="Lotus Shoot Reaching Surface"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Shoot_Reaching_Surface.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus Shoot Reaching Surface&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/Lotus_Shoot_Developing_Leaf.jpg" alt="Lotus Shoot Developing Leaf"/>
&lt;/div>
&lt;a href="https://researchut.com/images/Lotus_Shoot_Developing_Leaf.jpg" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>Lotus Shoot Developing Leaf&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;/p></description></item><item><title>Cross Architecture Linux Containers</title><link>https://researchut.com/blog/Cross_Architecture_Linux_Containers/</link><pubDate>Fri, 19 Jul 2019 21:34:02 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Cross_Architecture_Linux_Containers/</guid><description>&lt;h2 id="linux-and-arm">Linux and ARM&lt;/h2>
&lt;p>With more ARM based devices in the market, and with them getting more powerful every day,
it is more common to see more of ARM images for your favorite Linux distribution. Of them,
&lt;strong>Debian&lt;/strong> has become the default choice for individuals and companies to base their work on.
It must have to do with Debian&amp;rsquo;s long history of trying to support many more architectures than
the rest of the distributions. Debian also tends to have a much wider user/developer mindshare
even though it does not have a direct backing from any of the big Linux distribution companies.&lt;/p>
&lt;p>Some of my work involves doing packaging and integration work which reflects on all architectures
and image types; ARM included. So having the respective environment readily available is really
important to get work done quicker.&lt;/p>
&lt;p>I still recollect back in 2004, when I was much newer to &lt;em>Linux Enterprise&lt;/em> while working at a big Computer Hardware Company, I had heard about the &lt;em>Itanium 64&lt;/em> architecture. Back then, trying out anything other than &lt;em>x86&lt;/em> would mean you need access to physical
hardware. Or be a DD and have shell access the Debian Machines.&lt;/p>
&lt;p>With Linux Virtualization, a lot seems to have improved over time.&lt;/p>
&lt;h2 id="linux-virtualization">Linux Virtualization&lt;/h2>
&lt;p>With a decently powered processor with virtualization support, you can emulate a lot of architectures that Linux supports.&lt;/p>
&lt;p>Linux has many virtualization options but the main dominant ones are &lt;strong>KVM/Qemu, Xen and VirtualBox&lt;/strong>.
&lt;em>Qemu&lt;/em> is the most feature-rich virtualization choice on Linux with a wide range of architectures that
it can emulate.&lt;/p>
&lt;p>In case of ARM, things are still a bit tricky as hardware definition is tightly coupled. Emulating device type
on a virtualized Qemu is not straightforward as x86 architecture. Thankfully, in &lt;code>libvirt&lt;/code>, you can be provided
with a generic machine type called &lt;strong>virt&lt;/strong>. For basic cross architecture tasks, this should be enough.&lt;/p>
&lt;link rel="stylesheet" href="https://researchut.com/css/hugo-easy-gallery.css" />
&lt;div class="box" >
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
&lt;div class="img">
&lt;img itemprop="thumbnail" src="https://researchut.com/images/virt-profile-libvirt.png" alt="virt board profile under libvirt"/>
&lt;/div>
&lt;a href="https://researchut.com/images/virt-profile-libvirt.png" itemprop="contentUrl">&lt;/a>
&lt;figcaption>&lt;h4>virt board profile under libvirt&lt;/h4>
&lt;/figcaption>
&lt;/figure>
&lt;/div>
&lt;p>But, while, virtualization is a nice progression, it is not always an optimal one. For one, it needs good device virtualization
support, which can be tricky in the ARM context. Second, it can be (very) slow at times.&lt;/p>
&lt;p>And unless you are doing low-level hardware specific work, you can look for an alternative in &lt;strong>Linux Containers&lt;/strong>&lt;/p>
&lt;h2 id="linux-containers">Linux Containers&lt;/h2>
&lt;p>So this is nothing new now. Lots and lots of buzz around containers already. There&amp;rsquo;s many different implementations
across platforms supporting similar concept. From good old &lt;em>chroot (with limited functionality), jails (on BSD)&lt;/em>, to
well marketed products like: &lt;em>Docker, LXC, systemd-nspawn&lt;/em>. There&amp;rsquo;s also some like &lt;em>firejail&lt;/em> targeting specific use cases.&lt;/p>
&lt;p>As long as you do not have tight dependency on the hardware &lt;strong>or&lt;/strong> a dependency on the specific parts of the Linux kernel (like once I
explored the possibility of running &lt;em>open-iscsi&lt;/em> in a containerized environment instead), &lt;em>containers&lt;/em> are a quick way to get
an equal environment. Especially, things like &lt;strong>Process, Namespace and Network separation&lt;/strong> are awesome helping me concentrate on the work
rather than putting the focus on &lt;strong>Host &amp;lt;=&amp;gt; Guest&lt;/strong> issues.&lt;/p>
&lt;p>Given how fast work can be accomplished with containers, I have been wanting to explore the possibility of building container images
for ARM and other architectures that I care about.&lt;/p>
&lt;p>The good thing is that architecture virtualization is offered through &lt;strong>Qemu&lt;/strong> and the same tool also provides similar architecture
emulation. So features and fixes have a higher chance of parity as they are being served from the same tool.&lt;/p>
&lt;h2 id="systemd-nspawn">systemd-nspawn&lt;/h2>
&lt;p>I haven&amp;rsquo;t explored all the container implementations that Linux has to offer. Initially, I used &lt;strong>LXC&lt;/strong> for a while. But these days,
for my work it is &lt;strong>docker&lt;/strong>, while my personal preference lies with &lt;strong>systemd-nspawn&lt;/strong>.&lt;/p>
&lt;p>Part of the reason is simply because I have grown
more familiar with &lt;strong>systemd&lt;/strong> given it is the house keeper for my operating system now. And also, so far, I like most of what &lt;em>systemd&lt;/em> offers.&lt;/p>
&lt;h2 id="getting-cross-architecture-containers-under-debian-gnulinux">Getting Cross Architecture Containers under Debian GNU/Linux&lt;/h2>
&lt;ul>
&lt;li>Use &lt;code>qemu-user-static&lt;/code> for emulation&lt;/li>
&lt;li>Generate cross architecture chroot images with &lt;code>qemu-debootstrap&lt;/code>&lt;/li>
&lt;li>Import those as sub-volumes under &lt;code>systemd-nspawn&lt;/code>&lt;/li>
&lt;li>Set a template for your containers and other misc stuff&lt;/li>
&lt;/ul>
&lt;h3 id="glitches">Glitches&lt;/h3>
&lt;p>Not everything works perfect but most of it does work.&lt;/p>
&lt;p>Here&amp;rsquo;s my container list. Subvolumed containers do help de-duplicate and save some space. They are also very very quick when creating a clone for the container&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">rrs@priyasi:~$ machinectl list-images
NAME TYPE RO USAGE CREATED MODIFIED
2019 subvolume no n/a Mon 2019-06-10 09:18:26 IST n/a
SDK1812 subvolume no n/a Mon 2018-10-15 12:45:39 IST n/a
BusterArm64 subvolume no n/a Mon 2019-06-03 14:49:40 IST n/a
DebSidArm64 subvolume no n/a Mon 2019-06-03 14:56:42 IST n/a
DebSidArmhf subvolume no n/a Mon 2018-07-23 21:18:42 IST n/a
DebSidMips subvolume no n/a Sat 2019-06-01 08:31:34 IST n/a
DebianJessieTemplate subvolume no n/a Mon 2018-07-23 21:18:54 IST n/a
DebianSidTemplate subvolume no n/a Mon 2018-07-23 21:18:05 IST n/a
aptVerifySigsDebSid subvolume no n/a Mon 2018-07-23 21:19:04 IST n/a
jenkins-builder subvolume no n/a Tue 2018-11-27 20:11:42 IST n/a
jenkins-builder-new subvolume no n/a Tue 2019-04-16 10:13:43 IST n/a
opensuse subvolume no n/a Mon 2018-07-23 21:18:34 IST n/a
12 images listed.
21:08 ♒♒♒ ☺ 😄 &lt;/code>&lt;/pre>
&lt;h3 id="problems-with-networking-on-foreign-architectures">Problems with networking on foreign architectures&lt;/h3>
&lt;p>So this must mostly have to do with Qemu&amp;rsquo;s emulation. When making networking work, I did see many reports and fixes upstream about networking and other subsystems having issues with emulation. Luckily for the architectures listed above, I have been able to make use of them with some workarounds.&lt;/p>
&lt;p>Here&amp;rsquo;s a running &lt;strong>Debian Sid ARM64&lt;/strong> container image under &lt;code>systemd-nsapwn&lt;/code> with &lt;code>qemu emulation&lt;/code>&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">DebSidArm64(fba63648a4c4451ebf56eb758463b37d)
Since: Fri 2019-07-19 21:13:51 IST; 1min 16s ago
Leader: 12061 (systemd)
Service: systemd-nspawn; class container
Root: /var/lib/machines/DebSidArm64
Iface: sysbr0
OS: Debian GNU/Linux 10 (buster)
UID Shift: 445841408
Unit: systemd-nspawn@DebSidArm64.service
├─payload
│ ├─init.scope
│ │ └─12061 /usr/bin/qemu-aarch64-static /usr/lib/systemd/systemd
│ └─system.slice
│ ├─console-getty.service
│ │ └─12245 /usr/bin/qemu-aarch64-static /sbin/agetty -o -p -- \u --noclear --keep-baud console 115200,38400,9600 vt220
│ ├─cron.service
│ │ └─12200 /usr/bin/qemu-aarch64-static /usr/sbin/cron -f
│ ├─dbus.service
│ │ └─12197 /usr/bin/qemu-aarch64-static /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
│ ├─rsyslog.service
│ │ └─12202 /usr/bin/qemu-aarch64-static /usr/sbin/rsyslogd -n -iNONE
│ ├─systemd-journald.service
│ │ └─12123 /usr/bin/qemu-aarch64-static /lib/systemd/systemd-journald
│ └─systemd-logind.service
│ └─12203 /usr/bin/qemu-aarch64-static /lib/systemd/systemd-logind
└─supervisor
└─12059 /usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-bridge=sysbr0 --bind /var/tmp/Debian-Build/containers/ --bind-ro /var/tmp/:/var/tmp/vartmp -U --settings=override --machine=DebSidArm64
Jul 19 21:13:53 priyasi systemd-nspawn[12059]: [ OK ] Reached target Multi-User System.
Jul 19 21:13:53 priyasi systemd-nspawn[12059]: [ OK ] Reached target Graphical Interface.
Jul 19 21:13:53 priyasi systemd-nspawn[12059]: Starting Update UTMP about System Runlevel Changes...
Jul 19 21:13:53 priyasi systemd-nspawn[12059]: [ OK ] Started Update UTMP about System Runlevel Changes.
Jul 19 21:13:53 priyasi systemd-nspawn[12059]: [ OK ] Started Rotate log files.
Jul 19 21:13:57 priyasi systemd-nspawn[12059]: [ OK ] Started Daily apt download activities.
Jul 19 21:13:57 priyasi systemd-nspawn[12059]: Starting Daily apt upgrade and clean activities...
Jul 19 21:13:59 priyasi systemd-nspawn[12059]: [2B blob data]
Jul 19 21:13:59 priyasi systemd-nspawn[12059]: Debian GNU/Linux 10 SidArm64 console
Jul 19 21:13:59 priyasi systemd-nspawn[12059]: [1B blob data]
21:15 ♒♒♒ ☺ 😄 &lt;/code>&lt;/pre>
&lt;p>And the login&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">rrs@priyasi:~$ machinectl login DebSidArm64
Connected to machine DebSidArm64. Press ^] three times within 1s to exit session.
Debian GNU/Linux 10 SidArm64 pts/0
SidArm64 login: root
Password:
Last login: Thu Jun 20 10:57:30 IST 2019 on pts/0
Linux SidArm64 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@SidArm64:~#
root@SidArm64:~#
root@SidArm64:~# uname -a
Linux SidArm64 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) aarch64 GNU/Linux
root@SidArm64:~# &lt;/code>&lt;/pre>
&lt;p>The problematic networking part. Notice the &lt;code>qemu&lt;/code> emulation error messages. Basically, at this stage networking is dead.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">root@SidArm64:~# ip a
Unsupported setsockopt level=270 optname=11
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: host0@if10: &amp;lt;BROADCAST,MULTICAST&amp;gt; mtu 1500 qdisc noop state DOWN group default qlen 1000
request send failed: Operation not supported
link/ether f6:9d:cc:d6:ad:32 brd ff:ff:ff:ff:ff:ffroot@SidArm64:~#
root@SidArm64:~#
root@SidArm64:~# ping www.google.com
ping: www.google.com: Temporary failure in name resolution
root@SidArm64:~#
root@SidArm64:~# cat /etc/resolv.conf
nameserver 172.16.20.1&lt;/code>&lt;/pre>
&lt;p>Because I prefer &lt;code>systemd&lt;/code> for containers, I chose to make use of systemd&amp;rsquo;s network management tools too. Maybe that is causing the problem but in my opinion, is highly unlikely to be the cause.&lt;/p>
&lt;p>Anyways&amp;hellip;.simply invoking &lt;code>dhclient&lt;/code> at this stage does assign the container an ip address. But more than that the core networking stack gets back in action, even though the reporting tools still report errors.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-linux" data-lang="linux">root@SidArm64:~# dhclient host0
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unsupported setsockopt level=270 optname=11
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unsupported setsockopt level=263 optname=8
Unsupported setsockopt level=270 optname=11
Unknown target IFA type: 4
Unknown target IFA type: 3
Unknown target IFA type: 6
root@SidArm64:~#
root@SidArm64:~# ip a
Unsupported setsockopt level=270 optname=11
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: host0@if10: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
request send failed: Operation not supported
link/ether f6:9d:cc:d6:ad:32 brd ff:ff:ff:ff:ff:ffroot@SidArm64:~#
root@SidArm64:~#
root@SidArm64:~# ping 172.16.20.1
PING 172.16.20.1 (172.16.20.1) 56(84) bytes of data.
64 bytes from 172.16.20.1: icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from 172.16.20.1: icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 172.16.20.1: icmp_seq=3 ttl=64 time=0.138 ms
64 bytes from 172.16.20.1: icmp_seq=4 ttl=64 time=0.136 ms
64 bytes from 172.16.20.1: icmp_seq=5 ttl=64 time=0.152 ms
64 bytes from 172.16.20.1: icmp_seq=6 ttl=64 time=0.143 ms
64 bytes from 172.16.20.1: icmp_seq=7 ttl=64 time=0.137 ms
64 bytes from 172.16.20.1: icmp_seq=8 ttl=64 time=0.144 ms
^C
--- 172.16.20.1 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 158ms
rtt min/avg/max/mdev = 0.061/0.125/0.152/0.030 ms
root@SidArm64:~# ping www.google.com
PING www.google.com (216.58.197.68) 56(84) bytes of data.
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=1 ttl=50 time=45.2 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=2 ttl=50 time=63.7 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=3 ttl=50 time=63.2 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=4 ttl=50 time=80.7 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=5 ttl=50 time=65.4 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=6 ttl=50 time=70.4 ms
^C
--- www.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 12ms
rtt min/avg/max/mdev = 45.190/64.758/80.717/10.597 ms&lt;/code>&lt;/pre>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>With some minor annoyances but otherwise this has been my fastest way to get work done, especially cross architecture stuff. When I compare it back to how I&amp;rsquo;d have thought such a use case back in the early days, I can&amp;rsquo;t imagine the speed and simplicity I have at hand today. &lt;strong>Free and Opensource Software&lt;/strong> has been a great choice, while it started just as a curiosity of young boy.&lt;/p></description></item><item><title>Linux Desktop Usage 2019</title><link>https://researchut.com/blog/Linux_Desktop_Usage_2019/</link><pubDate>Fri, 15 Mar 2019 20:05:06 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/Linux_Desktop_Usage_2019/</guid><description>&lt;p>If I look back now, it must be more than 20 years since I got fascinated with &lt;em>&lt;strong>GNU/Linux&lt;/strong>&lt;/em> ecosystem and started using it.&lt;/p>
&lt;p>Back then, it was more curiosity of a young teenager and the excitement to learn something. There&amp;rsquo;s one thing that I have always admired/respected about Free Software&amp;rsquo;s values, is: &lt;!-- raw HTML omitted -->Access for everyone to learn&lt;!-- raw HTML omitted -->. This is something I never forget and still try to do my bit.&lt;/p>
&lt;p>It was perfect timing and I was lucky to be part of it. Free Software was (and still is) a great platform to learn upon, if you have the willingness and desire for it.&lt;/p>
&lt;p>Over the years, a lot lot lot has changed, evolved and improved. From the days of writing down the &lt;!-- raw HTML omitted -->XF86Config&lt;!-- raw HTML omitted --> configuration file to get the &lt;strong>X&lt;/strong> server running, to a new world where now everything is almost &lt;em>&lt;strong>dynamic&lt;/strong>&lt;/em>, is a great milestone that we have achieved.&lt;/p>
&lt;p>All through these years, I always used &lt;em>&lt;strong>GNU/Linux&lt;/strong>&lt;/em> platform as my primary computing platform. The &lt;strong>CLI, Shell and Tools&lt;/strong>, have all been a great source of learning. Most of the stuff was (and to an extent, still is) standardized and focus was usually on a single project.&lt;/p>
&lt;p>There was less competition on that front, rather there was more &lt;strong>collaboration&lt;/strong>. For example, standard tools like: &lt;em>&lt;strong>sed, awk, grep&lt;/strong>&lt;/em> etc were single tools. Like you didn&amp;rsquo;t have 2 variants of it. So, enhancements to these tools was timely and consistent and learning these tools was an incremental task.&lt;/p>
&lt;p>On the other hand, on the Desktop side of things, it started and stood for a very long time, to do things their own ways. But eventually, quite a lot of those things have standardized, thankfully.&lt;/p>
&lt;p>For the larger part of my desktop usage, I have mostly been a KDE user. I have used other environments like &lt;em>&lt;strong>IceWM, Enlightenment&lt;/strong>&lt;/em> briefly but always felt the need to fallback to KDE, as it provided a full and uniform solution. For quite some time, I was more of a user preferring to only use the &lt;strong>K*&lt;/strong> tools, as in if it wasn&amp;rsquo;t written with &lt;em>&lt;strong>kdelibs&lt;/strong>&lt;/em>, I&amp;rsquo;d try to avoid it. But, In the last 5 years, I took at detour and tried to unlearn and re-learn the other major desktop environment, GNOME.&lt;/p>
&lt;p>GNOME is an equally beautiful and elegant desktop environment with a minimalistic user interface (but which at many times ends up plaguing its application&amp;rsquo;s feature set too, making it &amp;ldquo;minimalistic feature set applications&amp;rdquo;). I realized that quite a lot of time and money is invested into the GNOME project, especially by the leading Linux Distribution Vendors.&lt;/p>
&lt;p>But the fact is that &lt;strong>GNU/Linux&lt;/strong> is still not a major player on the Desktop market. Some believe that the Desktop Market itself has faded and been replaced by the Mobile market. I think Desktop Computing still has a critical place in the near foreseeable future and the Mobile Platform is more of an extension shell to it. For example, for quickies, the Mobile platform is perfect. But for a substantial amount of work to be done, we still fallback to using our workstations. Mobile platform is good for a quick chat or email, but if you need to &lt;em>&lt;strong>write a review report&lt;/strong>&lt;/em> or &lt;em>&lt;strong>a blog post&lt;/strong>&lt;/em> or &lt;em>&lt;strong>prepare a presentation&lt;/strong>&lt;/em> or &lt;em>&lt;strong>update an excel sheet&lt;/strong>&lt;/em>, you&amp;rsquo;d still prefer to use your workstation.&lt;/p>
&lt;p>So&amp;hellip;. After using GNOME platform for a couple of years, I realized that there&amp;rsquo;s a lot of work and thought put into this platform too, just like the KDE platform. &lt;em>&lt;strong>BUT&lt;/strong>&lt;/em> To really be able to dream about the &lt;strong>&amp;ldquo;Year of the dominance of the GNU/Linux desktop platform&amp;rdquo;&lt;/strong>, all these projects need to work together and synergise their efforts.&lt;/p>
&lt;p>Pain points:&lt;/p>
&lt;ul>
&lt;li>Multiple tools, multiple efforts wasted. Could be synergised.&lt;/li>
&lt;li>Data accessiblity&lt;/li>
&lt;li>Integration and uniformity&lt;/li>
&lt;/ul>
&lt;h2 id="multiple-tools">Multiple tools&lt;/h2>
&lt;p>&lt;strong>Kmail&lt;/strong> used to be an awesome email client. &lt;strong>Evoltuion&lt;/strong> today is an awesome email client. &lt;strong>Thunderbird&lt;/strong> was an awesome email client, which from what I last remember, &lt;strong>Mozilla&lt;/strong> had lack of funds to continue maintaining it. And then there&amp;rsquo;s the never ending stream of new/old projects that come and go. Thankfully, email is pretty standardized in its &lt;strong>data format&lt;/strong>. Otherwise, it would be a nightmare to switch between these client. But still, GNU/Linux platforms have the potential to provide a strong and viable offering if they could synergise their work together. Today, a lot of resource is just wasted and nobody wins. Definitely not the GNU/Linux platform. Who wins are: GMail, Hotmail etc.&lt;/p>
&lt;p>If you even look at the browser side of things, &lt;strong>Google&lt;/strong> realized the potential of the Web platform for its business. So they do have a &lt;strong>Web client&lt;/strong> for GNU/Linux. But you&amp;rsquo;ll never see an equivalent for Email/PIM. Not because it is obsolete. But more because it would hurt their business instead.&lt;/p>
&lt;h2 id="data-accessibility">Data accessibility&lt;/h2>
&lt;p>My biggest gripe is data accessiblity. Thankfully, for most of the stuff that we rely upon (email, documents etc), things are standardized. But there still are annoyances. For example, when KDE 4.x debacle occured, &lt;strong>kwallet&lt;/strong> could not export its password database to the newer one. When I moved to GNOME, I had another very very very hard time extracting passwords from &lt;strong>kwallet&lt;/strong> and feeding them to &lt;strong>SeaHorse&lt;/strong>. Then, when recently, I switched back to KDE, I had to similarly struggle exporting back my data from &lt;strong>SeaHorse&lt;/strong> (no, not back to &lt;strong>KWallet&lt;/strong>). Over the years, I realized that critical data should be kept in its simplest format. And let the front-ends do all the bling they want to. I realized this more with Emails. &lt;strong>Maildir&lt;/strong> is a good clean format to store my email in, irrespective of how I access my email. Whether it is &lt;strong>dovecot, Evolution, Akonadi, Kmail&lt;/strong> etc, I still have my bare data intact.&lt;/p>
&lt;p>I had burnt myself on the password front quite a bit, so on this migration back to KDE, I wanted an email like solution. So there&amp;rsquo;s &lt;code>pass&lt;/code>, a password store, which fits the bill just like the Email use case. It would make a lot more sense for all &lt;strong>Desktop Password Managers&lt;/strong> to instead just be a frontend interface to &lt;code>pass&lt;/code> and let it keep the crucial data in bare minimal format, and accessbile at all times, irrespective of the overhauling that the Desktop projects tend to do every couple of years or so.&lt;/p>
&lt;p>Data is &lt;strong>critical&lt;/strong>. Without retaining its compatibility (both &lt;strong>backwards and forward&lt;/strong>), no battle can you win.&lt;/p>
&lt;p>I honestly feel the Linux Desktop Architects from the different projects should sit together and agree on a set of interfaces/tools (yes yes there is fd.o) and &lt;strong>stick to it&lt;/strong>. Too much time and energy is wasted otherwise.&lt;/p>
&lt;h2 id="integration-and-uniformity">Integration and Uniformity&lt;/h2>
&lt;p>This is something I have always desired and I was quite impressed (and delighted) to see some progress on the KDE desktop in the UI department. On GNOME, I developed a liking for the &lt;strong>Evolution&lt;/strong> email client. Infact, it is my client currently, for Email, NNTP and other PIM. And I still get to use it nicely in a KDE environment. Thank you.
&lt;img src="https://researchut.com/images/linux-desktop-2019-evolution.png" alt="Evolution KDE/GNOME Integration">&lt;/p></description></item><item><title>Migrating from Drupal to Hugo</title><link>https://researchut.com/post/Drupal-7_to_Hugo/</link><pubDate>Sun, 11 Nov 2018 17:00:06 +0530</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/Drupal-7_to_Hugo/</guid><description>&lt;h1 id="tldr-migrating-my-website-from-drupal-7-to-hugo">TL;DR: Migrating my website from Drupal 7 to Hugo&lt;/h1>
&lt;p>Jump directly to the end titled &lt;strong>Migration to Hugo&lt;/strong>&lt;/p>
&lt;h2 id="initial-website">Initial website&lt;/h2>
&lt;p>Looking back at my website&amp;rsquo;s history, the domain was first registered sometime in 2003.
Back then, it was mostly a couple of html pages. Being (and still) a novice in web,
my website was mostly on ideas from others. IIRC, for the bare html one, I took a lot
of look wise details from &lt;strong>Miss Garrels&amp;rsquo;&lt;/strong> website.&lt;/p>
&lt;h2 id="first-blog">First blog&lt;/h2>
&lt;p>My initial blog was self-hosted with a blogging software in PHP, named &lt;a href="http://pivotx.net/">PivotX&lt;/a>
The website for it still works, so hopefully the project is still alive. It was pretty good a tool
for the purpose. Very lean and had support for data backends in both, MySQL and &lt;strong>flat files&lt;/strong>.
The latter was important to me as I wanted to keep it simple.&lt;/p>
&lt;h2 id="drupal">Drupal&lt;/h2>
&lt;p>My first interaction with Drupal was with its WSOD. That was it until I revisited it when evaluating
different &lt;em>FOSS&lt;/em> web tools to build a community site for one of my previous employer.&lt;/p>
&lt;p>Back then, we tried multiple tools: Jive, Joomla, Wordpress and many more. But finally, resorted to
Drupal. What the requirement was was to have something which would filter content under nested
categories. Then, of the many things tried, the only one which seemed to be able to do it was Drupal
with its &lt;strong>Taxonomy&lt;/strong> feature, along with a couple of community driven add-on modules.&lt;/p>
&lt;p>We built it but there were other challenges. It was hard to find people who were good with Drupal.
I remember to have interviewed around 10-15 people, who could take over the web portal and maintain it,
and still not able to fill the position. Eventually, I ended up maintaining the portal by myself.&lt;/p>
&lt;h2 id="migrating-my-website-to-drupal">Migrating my website to Drupal&lt;/h2>
&lt;p>The easiest way to deal with the maintenance was to have one more live portal running Drupal. My website,
which back then, had ambitious goals to also serve an online shopping cart, was the perfect candidate.
So I migrated my website from &lt;strong>PivotX to Drupal 6&lt;/strong>. Drupal had a nice &lt;strong>RSS Import&lt;/strong> module which was
able to pull in most of the content, except the comments on each article. I think that is more a
limitation of &lt;strong>RSS Feeds&lt;/strong>. But the only data import path I could find back then was to import content
through RSS Feeds.&lt;/p>
&lt;p>Initially, Drupal looked like a nice tool. Lots of features and a vibrant community made it very appealing.
And I always desired to build some &lt;del>skills&lt;/del> &lt;strong>Hands-On&lt;/strong> (that&amp;rsquo;s how the job market likes it; irrespective
of the skills, it is the hands-on that they evaluate) by using Drupal both, at the employer&amp;rsquo;s community
portal and my personal website.&lt;/p>
&lt;p>Little did I know that running/maintaining a website is one aspect; where as extending it, is another
(mostly expensive) affair.&lt;/p>
&lt;h2 id="drupal-7">Drupal 7&lt;/h2>
&lt;p>That was the first blow. For a project serving as a platform, Drupal was a &lt;strong>PITA&lt;/strong> when dealing with
migrations. And it is not about migrations to a different platform. Rather an upgrade from one major
release to another.&lt;/p>
&lt;p>Having been using &lt;strong>Debian&lt;/strong> for quite some time, this approach from Drupal brought back memories from the
past, of when using &lt;strong>Red Hat Linux&lt;/strong> and &lt;strong>SuSE Linux&lt;/strong> distribution; where upgrades were not a common
term, and every major release of the distribution people were mostly recommended to re-install.&lt;/p>
&lt;p>Similar was the case with Drupal. Every major release, many (core) modules would be dropped. Many add-on
modules would lose support. Neither the project nor the community around it, was helpful anymore.&lt;/p>
&lt;p>But somehow, I eventually &lt;em>upgraded&lt;/em> to Drupal 7. I did lose a lot of functionality. My nested taxonomy was
gone and my themes were all broken. For the web novice that I am, it took me some time to fix those issues.&lt;/p>
&lt;p>But the tipping point came in with Drupal 8. It took the pain to the next level repeating the same process
of dropping modules and breaking functionalities; never did I hear much of &lt;strong>backward compatibility&lt;/strong> on this
platform.&lt;/p>
&lt;h2 id="hugo">Hugo&lt;/h2>
&lt;p>For quite some time I kept looking for a migration path away from Drupal 7. I did not care what it was as long
as it was &lt;em>FOSS&lt;/em>, and had an active community around it. The immediate first choice was WordPress. By this
time, my web requirements had trimmed down. No more did I have outrageous ideas of building all solutions
(Web, Blog, Cart) in a single platform. All I did was mostly blog and had a couple of basic pages.&lt;/p>
&lt;p>The biggest problem was migration. WP has a module, that does migration. But, for whatever annoying reason,
the free version of it would only pick 7 articles from the total. And it did not import comments.
So the annoyance and my limitations with web technologies was still prone to with WP.
This migration path did not enthuse me much: it was more like a Hindi idiom: &lt;strong>आसमान से गिरे और खजूर में अटके&lt;/strong>&lt;/p>
&lt;p>I also attempted Jekyll and Hugo. My limited initial attempts were disappointing. Jekyll had an import
module, which IIRC did not work proper. Similar was the case with Hugo, which has a module listed on
its migration page, &lt;a href="https://gohugo.io/tools/migrations/#drupal">drupal2hugo&lt;/a>, which sets a disappointment
in the beginning itself.&lt;/p>
&lt;p>With nothing much left, I just kept postponing my &lt;em>(desperate)&lt;/em> plans to migrate.&lt;/p>
&lt;h2 id="migration-to-hugo">Migration to Hugo&lt;/h2>
&lt;p>Luckily, I was able to find some kind soul &lt;a href="https://gist.github.com/amoutiers/991da535cc2afef8c1bb0c56326a378e">share&lt;/a>
migration scripts to help migrate from &lt;strong>Drupal 7 to Hugo&lt;/strong>. Not everything could be migrated
(I had to let go of comments) but not much was I in a position to wait more.&lt;/p>
&lt;p>With very minimal changes to adapt it to my particular setup, I was able to migrate most of my content.
Now, my website is running on markdown generated with Hugo. More than the tool, I am happy to have the data
available in a much standard format.&lt;/p>
&lt;p>If there&amp;rsquo;s one thing that I&amp;rsquo;m missing on my website, it is mostly the commenting system. I would love to
have a simple way to accept user comments integrated into Hugo itself, which would just append those
comments to their respective posts. Hopefully soon, when I have (some more) free time.&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;lt;?php
define(&amp;#39;DRUPAL_ROOT&amp;#39;, __DIR__);
include_once(DRUPAL_ROOT . &amp;#39;/includes/bootstrap.inc&amp;#39;);
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$nids = db_query(&amp;#39;SELECT DISTINCT(nid) FROM {node}&amp;#39;)
-&amp;gt;fetchCol();
$nodes = node_load_multiple($nids);
foreach($nodes as $node) {
$front_matter = array(
&amp;#39;title&amp;#39; =&amp;gt; $node-&amp;gt;title,
&amp;#39;date&amp;#39; =&amp;gt; date(&amp;#39;c&amp;#39;, $node-&amp;gt;created),
&amp;#39;lastmod&amp;#39; =&amp;gt; date(&amp;#39;c&amp;#39;, $node-&amp;gt;changed),
&amp;#39;draft&amp;#39; =&amp;gt; &amp;#39;false&amp;#39;,
);
if (count($node-&amp;gt;taxonomy_vocabulary_2[LANGUAGE_NONE])) {
$tags = taxonomy_term_load_multiple(
array_column(
$node-&amp;gt;taxonomy_vocabulary_2[LANGUAGE_NONE],
&amp;#39;tid&amp;#39;
)
);
$front_matter[&amp;#39;tags&amp;#39;] = array_column($tags, &amp;#39;name&amp;#39;);
}
if (count($node-&amp;gt;taxonomy_vocabulary_1[LANGUAGE_NONE])) {
$cat = taxonomy_term_load_multiple(
array_column(
$node-&amp;gt;taxonomy_vocabulary_1[LANGUAGE_NONE],
&amp;#39;tid&amp;#39;
)
);
$front_matter[&amp;#39;categories&amp;#39;] = array_column($cat, &amp;#39;name&amp;#39;);
}
$path = drupal_get_path_alias(&amp;#39;node/&amp;#39;.$node-&amp;gt;nid);
if ($path != &amp;#39;node/&amp;#39;.$node-&amp;gt;nid) {
$front_matter[&amp;#39;url&amp;#39;] = &amp;#39;/&amp;#39;.$path;
$content_dir = explode(&amp;#39;/&amp;#39;, $path);
$content_dir = end($content_dir);
}
else {
$content_dir = $node-&amp;gt;nid;
}
$content = json_encode(
$front_matter,
JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE
);
$content .= &amp;#34;\n\n&amp;#34;;
$tmp_file = &amp;#39;/tmp/node.html&amp;#39;;
file_put_contents($tmp_file, $node-&amp;gt;body[&amp;#39;fr&amp;#39;][0][&amp;#39;value&amp;#39;]);
$body = shell_exec(&amp;#39;html2markdown &amp;#39;.$tmp_file);
unlink($tmp_file);
//$body = $node-&amp;gt;body[&amp;#39;fr&amp;#39;][0][&amp;#39;value&amp;#39;];
$content .= $body;
$dir_name = &amp;#39;/tmp/hugo/content/&amp;#39;.$node-&amp;gt;type.&amp;#39;/&amp;#39;.$content_dir;
mkdir($dir_name, 0777, true);
file_put_contents($dir_name.&amp;#39;/index.md&amp;#39;, $content);
}
&lt;/code>&lt;/pre></description></item><item><title>sg3-utils and NVMe disks</title><link>https://researchut.com/blog/sg3-utils-nvme/</link><pubDate>Tue, 02 Oct 2018 14:30:00 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/sg3-utils-nvme/</guid><description>&lt;p>sg3-utils, version 1.44, was recently
&lt;a href="https://tracker.debian.org/pkg/sg3-utils">uploaded&lt;/a> to Debian. This new
upstream release has happened almost 2.5 years after the last release. One
important feature to emphasize about is some support for NVMe disks, which are
now getting more common on latest range of laptops.&lt;/p>
&lt;pre>&lt;code>rrs@priyasi:~$ sudo sg_inq /dev/nvme0
[sudo] password for rrs:
Identify controller for /dev/nvme0:
Model number: PC401 NVMe SK hynix 512GB
Serial number: ES82N092210402J4U
Firmware revision: 80003E00
Version: 1.2
Optional admin command support:
Device self-test
Firmware download and commit
Format NVM
Security send and receive
Optional NVM command support:
Save and Select fields non-zero
Dataset management
Write uncorrectable
Compare
PCI vendor ID VID/SSVID: 0x1c5c/0x1c5c
IEEE OUI Identifier: 0xace42e
Controller ID: 0x1
Number of namespaces: 1
Maximum data transfer size: 32 pages
Namespace 1 (of 1):
Namespace size/capacity: 1000215216/1000215216 blocks
Namespace utilization: 765481168 blocks
EUI-64: 0xace42e8170034999
Number of LBA formats: 2
Index LBA size: 0
LBA format 0 support: &amp;lt;-- active
Logical block size: 512 bytes
Approximate namespace size: 512 GB
Metadata size: 0 bytes
Relative performance: Best [0x0]
LBA format 1 support:
Logical block size: 4096 bytes
Approximate namespace size: 0 GB
Metadata size: 0 bytes
Relative performance: Best [0x0]
&lt;/code>&lt;/pre>
&lt;p>More details are available on the
&lt;a href="http://sg.danny.cz/sg/sg3_utils.html">upstream&lt;/a> page. Here&amp;rsquo;s the snippet for
NVMe disks support.&lt;/p>
&lt;pre>&lt;code>NVME Support
On one hand NVM Express (usually written as &amp;quot;NVMe&amp;quot;) doesn't have much in common with SCSI. They have different command sets and don't share many transports. The SOP/PQI project which uses the SCSI command set over PCIe (PCI Express) has not caught on, probably closely related to NVMe's success on PCIe.
On the other hand both SCSI and NVMe offer alternative approaches to accessing solid state disks (SSDs), approaches that have much in common. SCSI has been around a little longer (1981 compared to 2011) . In the early days of NVMe there was a SCSI to NVMe Translation Layer (SNTL) but that was dropped in 2017 from the Linux kernel as Intel were not prepared to support it any longer. Strange, since the equivalent mechanism for (mainly) SATA disks called SCSI to ATA Translation (SAT) has been quite successful both for SATA and the SAS (SCSI serial protocol).
There are some signs of the two protocols co-existing with the NVME-MI (Management Interface) group accepting the SES-3 standard for (storage) enclosure management. To this end two NVME-MI commands have been added: SES Send and SES Receive. The library underpinning sg3_utils has been extended to detect NVMe devices in Linux and FreeBSD (not yet working for Windows) has been extended and to pass-through SCSI SEND DIAGNOSTIC and RECEIVE DIAGNOSTIC RESULTS commands to those new NVME-MI commands. The sg3_utils library implements a small SNTL that emulates the mandatory SPC commands (e.g. INQUIRY and REPORT LUNS) and a few others so that the sg_ses utility can interact with a NVMe enclosure with almost no code changes to sg_ses itself. sg_inq has been modified to detect NVMe devices and partially decode the Identify Controller and Identify namespace responses. The lsscsi utility (see the [lsscsi](http://sg.danny.cz/html) package) now lists NVMe namespaces (after SCSI logical units) and NVMe controllers (after SCSI hosts (HBAs)).
The sg_senddiag utility applied to a NVMe device will attempt to tunnel the associated data in NVME-MI SES Send and SES Recieve commands. That should fail unless the NVMe controller has an enclosure attached. The sg_raw command can issue NVME Admin command. The sg_inq command has two modes when applied to a NVME (namespace or controller); without options it will send Identify controller and namespace (assuming there is one) and partially decode the response; with the &amp;quot;--page=sinq&amp;quot; option (&amp;quot;sinq&amp;quot; means standard Inquiry, so for SCSI devices that is the same as the default (no option) usage) will issue a SCSI INQUIRY which the above mentioned SNTL will emulate an INQUIRY response.
Since there is no standard SNTL, this package has taken the liberty of defining its own &amp;quot;vendor specific&amp;quot; VPD page: 0xde . When fetched (with sg_inq, sg_vpd or sdparm) on a NVMe device it will yield the Identify controller response which is 4096 bytes long.
&lt;/code>&lt;/pre></description></item><item><title>Laptop Mode Tools 1.72</title><link>https://researchut.com/blog/laptop-mode-tools-1_72/</link><pubDate>Thu, 01 Feb 2018 12:45:06 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1_72/</guid><description>&lt;p>What a way to make a gift!&lt;/p>
&lt;p>I&amp;rsquo;m pleased to announce the 1.72 release of Laptop Mode Tools. Major changes
include the port of the GUI configuration utility to Python 3 and PyQt5.
&lt;img src="https://researchut.com/images/LMT-172.png" alt="">Some tweaks, fixes and enhancements in
current modules. Extending {black,white}list of devices to types other than
USB. Listing of devices by their devtype attribute.&lt;/p>
&lt;p>A filtered list of changes is mentioned below. For the full log, please refer
to the git repository.&lt;/p>
&lt;p>Source tarball, Feodra/SUSE RPM Packages available at:&lt;br>
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases">https://github.com/rickysarraf/laptop-mode-tools/releases&lt;/a>&lt;/p>
&lt;p>Debian packages will be available soon in Unstable.&lt;/p>
&lt;p>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;br>
Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/p>
&lt;pre>&lt;code>1.72 - Thu Feb 1 21:59:24 IST 2018
* Switch to PyQt5 and Python3
* Add btrfs to list of filesystems for which we can set commit interval
* Add pkexec invocation script
* Add desktop file to upstream repo and invoke script
* Update installer to includes gui wrappers
* Install new SVG pixmap
* Control all available cards in radeon-dpm
* Prefer to use the new runtime pm autosuspend_delay_ms interface
* tolerate broken device interfaces quietly
* runtime-pm: Make {black,white}lists work with non-USB devices
* send echo errors to verbose log
* Extend blacklist by device types of devtype
&lt;/code>&lt;/pre>
&lt;h3 id="what-is-laptop-mode-tools">&lt;strong>What is Laptop Mode Tools&lt;/strong>&lt;/h3>
&lt;pre>&lt;code>Description: Tools for Power Savings based on battery/AC status
Laptop mode is a Linux kernel feature that allows your laptop to save
considerable power, by allowing the hard drive to spin down for longer
periods of time. This package contains the userland scripts that are
needed to enable laptop mode.
.
It includes support for automatically enabling laptop mode when the
computer is working on batteries. It also supports various other power
management features, such as starting and stopping daemons depending on
power mode, automatically hibernating if battery levels are too low, and
adjusting terminal blanking and X11 screen blanking
.
laptop-mode-tools uses the Linux kernel's Laptop Mode feature and thus
is also used on Desktops and Servers to conserve power
&lt;/code>&lt;/pre>
&lt;p>PS: This release took around 13 months. A lot of things changed, for me,
personally. Some life lessons learnt. Some idiots uncovered. But the best of
2017, I got married. I am hopeful to keep work-life balanced, including time
for FOSS.&lt;/p></description></item><item><title>Freezing of tasks failed</title><link>https://researchut.com/blog/freezing-task-failure/</link><pubDate>Thu, 28 Dec 2017 01:33:59 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/freezing-task-failure/</guid><description>&lt;p>It is interesting how a user-space task could lead to hinder a Linux kernel
software suspend operation.&lt;/p>
&lt;pre>&lt;code>[11735.155443] PM: suspend entry (deep)
[11735.155445] PM: Syncing filesystems ... done.
[11735.215091] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11735.215172] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11735.558676] rfkill: input handler enabled
[11735.608859] (NULL device *): firmware: direct-loading firmware rtlwifi/rtl8723befw_36.bin
[11735.609910] (NULL device *): firmware: direct-loading firmware rtl_bt/rtl8723b_fw.bin
[11735.611871] Freezing user space processes ...
[11755.615603] Freezing of tasks failed after 20.003 seconds (1 tasks refusing to freeze, wq_busy=0):
[11755.615854] digikam D 0 13262 13245 0x00000004
[11755.615859] Call Trace:
[11755.615873] __schedule+0x28e/0x880
[11755.615878] schedule+0x2c/0x80
[11755.615889] request_wait_answer+0xa3/0x220 [fuse]
[11755.615895] ? finish_wait+0x80/0x80
[11755.615902] __fuse_request_send+0x86/0x90 [fuse]
[11755.615907] fuse_request_send+0x27/0x30 [fuse]
[11755.615914] fuse_send_readpages.isra.30+0xd1/0x120 [fuse]
[11755.615920] fuse_readpages+0xfd/0x110 [fuse]
[11755.615928] __do_page_cache_readahead+0x200/0x2d0
[11755.615936] filemap_fault+0x37b/0x640
[11755.615940] ? filemap_fault+0x37b/0x640
[11755.615944] ? filemap_map_pages+0x179/0x320
[11755.615950] __do_fault+0x1e/0xb0
[11755.615953] __handle_mm_fault+0xc8a/0x1160
[11755.615958] handle_mm_fault+0xb1/0x200
[11755.615964] __do_page_fault+0x257/0x4d0
[11755.615968] do_page_fault+0x2e/0xd0
[11755.615973] page_fault+0x22/0x30
[11755.615976] RIP: 0033:0x7f32d3c7ff90
[11755.615978] RSP: 002b:00007ffd887c9d18 EFLAGS: 00010246
[11755.615981] RAX: 00007f32d3fc9c50 RBX: 000000000275e440 RCX: 0000000000000003
[11755.615982] RDX: 0000000000000002 RSI: 00007ffd887c9f10 RDI: 000000000275e440
[11755.615984] RBP: 00007ffd887c9f10 R08: 000000000275e820 R09: 00000000018d2f40
[11755.615986] R10: 0000000000000002 R11: 0000000000000000 R12: 000000000189cbc0
[11755.615987] R13: 0000000001839dc0 R14: 000000000275e440 R15: 0000000000000000
[11755.616014] OOM killer enabled.
[11755.616015] Restarting tasks ... done.
[11755.817640] PM: suspend exit
[11755.817698] PM: suspend entry (s2idle)
[11755.817700] PM: Syncing filesystems ... done.
[11755.983156] rfkill: input handler disabled
[11756.030209] rfkill: input handler enabled
[11756.073529] Freezing user space processes ...
[11776.084309] Freezing of tasks failed after 20.010 seconds (2 tasks refusing to freeze, wq_busy=0):
[11776.084630] digikam D 0 13262 13245 0x00000004
[11776.084636] Call Trace:
[11776.084653] __schedule+0x28e/0x880
[11776.084659] schedule+0x2c/0x80
[11776.084672] request_wait_answer+0xa3/0x220 [fuse]
[11776.084680] ? finish_wait+0x80/0x80
[11776.084688] __fuse_request_send+0x86/0x90 [fuse]
[11776.084695] fuse_request_send+0x27/0x30 [fuse]
[11776.084703] fuse_send_readpages.isra.30+0xd1/0x120 [fuse]
[11776.084711] fuse_readpages+0xfd/0x110 [fuse]
[11776.084721] __do_page_cache_readahead+0x200/0x2d0
[11776.084730] filemap_fault+0x37b/0x640
[11776.084735] ? filemap_fault+0x37b/0x640
[11776.084743] ? __update_load_avg_blocked_se.isra.33+0xa1/0xf0
[11776.084749] ? filemap_map_pages+0x179/0x320
[11776.084755] __do_fault+0x1e/0xb0
[11776.084759] __handle_mm_fault+0xc8a/0x1160
[11776.084765] handle_mm_fault+0xb1/0x200
[11776.084772] __do_page_fault+0x257/0x4d0
[11776.084777] do_page_fault+0x2e/0xd0
[11776.084783] page_fault+0x22/0x30
[11776.084787] RIP: 0033:0x7f31ddf315e0
[11776.084789] RSP: 002b:00007ffd887ca068 EFLAGS: 00010202
[11776.084793] RAX: 00007f31de13c350 RBX: 00000000040be3f0 RCX: 000000000283da60
[11776.084795] RDX: 0000000000000001 RSI: 00000000040be3f0 RDI: 00000000040be3f0
[11776.084797] RBP: 00007f32d3fca1e0 R08: 0000000005679250 R09: 0000000000000020
[11776.084799] R10: 00000000058fc1b0 R11: 0000000004b9ac50 R12: 0000000000000000
[11776.084801] R13: 0000000000000001 R14: 0000000000000000 R15: 0000000000000000
[11776.084806] QXcbEventReader D 0 13268 13245 0x00000004
[11776.084810] Call Trace:
[11776.084817] __schedule+0x28e/0x880
[11776.084823] schedule+0x2c/0x80
[11776.084827] rwsem_down_write_failed_killable+0x25a/0x490
[11776.084832] call_rwsem_down_write_failed_killable+0x17/0x30
[11776.084836] ? call_rwsem_down_write_failed_killable+0x17/0x30
[11776.084842] down_write_killable+0x2d/0x50
[11776.084848] do_mprotect_pkey+0xa9/0x2f0
[11776.084854] SyS_mprotect+0x13/0x20
[11776.084859] system_call_fast_compare_end+0xc/0x97
[11776.084861] RIP: 0033:0x7f32d1f7c057
[11776.084863] RSP: 002b:00007f32cbb8c8d8 EFLAGS: 00000206 ORIG_RAX: 000000000000000a
[11776.084867] RAX: ffffffffffffffda RBX: 00007f32c4000020 RCX: 00007f32d1f7c057
[11776.084869] RDX: 0000000000000003 RSI: 0000000000001000 RDI: 00007f32c4024000
[11776.084871] RBP: 00000000000000c5 R08: 00007f32c4000000 R09: 0000000000024000
[11776.084872] R10: 00007f32c4024000 R11: 0000000000000206 R12: 00000000000000a0
[11776.084874] R13: 00007f32c4022f60 R14: 0000000000001000 R15: 00000000000000e0
[11776.084906] OOM killer enabled.
[11776.084907] Restarting tasks ... done.
[11776.289655] PM: suspend exit
[11776.459624] IPv6: ADDRCONF(NETDEV_UP): wlp1s0: link is not ready
[11776.469521] rfkill: input handler disabled
[11776.978733] IPv6: ADDRCONF(NETDEV_UP): wlp1s0: link is not ready
[11777.038879] IPv6: ADDRCONF(NETDEV_UP): wlp1s0: link is not ready
[11778.022062] wlp1s0: authenticate with 50:8f:4c:82:4d:dd
[11778.033155] wlp1s0: send auth to 50:8f:4c:82:4d:dd (try 1/3)
[11778.038522] wlp1s0: authenticated
[11778.041511] wlp1s0: associate with 50:8f:4c:82:4d:dd (try 1/3)
[11778.059860] wlp1s0: RX AssocResp from 50:8f:4c:82:4d:dd (capab=0x431 status=0 aid=5)
[11778.060253] wlp1s0: associated
[11778.060308] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
[11778.987669] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11779.117608] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11779.160930] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11779.784045] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11779.913668] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
[11779.961517] [drm:wait_panel_status [i915]] *ERROR* PPS state mismatch
11:58 ♒♒♒ ☺
&lt;/code>&lt;/pre></description></item><item><title>apt-offline 1.8.1 released</title><link>https://researchut.com/blog/apt-offline-181/</link><pubDate>Sun, 02 Jul 2017 07:38:15 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-181/</guid><description>&lt;p>apt-offline 1.8.1 [released](&lt;a href="https://github.com/rickysarraf/apt-">https://github.com/rickysarraf/apt-&lt;/a>
offline/releases/tag/v1.8.1).&lt;/p>
&lt;p>This is a bug fix release fixing some python3 glitches related to module
imports. Recommended for all users.&lt;/p>
&lt;p>apt-offline (1.8.1) unstable; urgency=medium&lt;/p>
&lt;ul>
&lt;li>Switch setuptools to invoke py3&lt;/li>
&lt;li>No more argparse needed on py3&lt;/li>
&lt;li>Fix genui.sh based on comments from pyqt mailing list&lt;/li>
&lt;li>Bump version number to 1.8.1&lt;/li>
&lt;/ul>
&lt;p>-- Ritesh Raj Sarraf &lt;a href="mailto:rrs@debian.org">rrs@debian.org&lt;/a> Sat, 01 Jul 2017 21:39:24 +0545&lt;/p>
&lt;p>What is apt-offline&lt;/p>
&lt;pre>&lt;code>Description: offline APT package manager
apt-offline is an Offline APT Package Manager.
.
apt-offline can fully update and upgrade an APT based distribution without
connecting to the network, all of it transparent to APT.
.
apt-offline can be used to generate a signature on a machine (with no network).
This signature contains all download information required for the APT database
system. This signature file can be used on another machine connected to the
internet (which need not be a Debian box and can even be running windows) to
download the updates.
The downloaded data will contain all updates in a format understood by APT and
this data can be used by apt-offline to update the non-networked machine.
.
apt-offline can also fetch bug reports and make them available offline.
&lt;/code>&lt;/pre></description></item><item><title>apt-offline 1.8.0 released</title><link>https://researchut.com/blog/apt-offline-180/</link><pubDate>Sun, 21 May 2017 17:17:37 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-180/</guid><description>&lt;p>I am pleased to announce the release of &lt;strong>apt-offline&lt;/strong> , version &lt;strong>1.8.0&lt;/strong>.
This release is mainly a forward port of apt-offline to Python 3 and PyQt5.
There are some glitches related to Python 3 and PyQt5, but overall the CLI
interface works fine. Other than the porting, there&amp;rsquo;s also an important bug
fixed, related to memory leak when using the MIME library. And then there&amp;rsquo;s
some updates to the documentation (user examples) based on feedback from
users.&lt;/p>
&lt;p>Release is availabe from [Github](&lt;a href="https://github.com/rickysarraf/apt-">https://github.com/rickysarraf/apt-&lt;/a>
offline/releases/tag/v1.8.0) and [Alioth](http://apt-
offline.alioth.debian.org)&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot_from_2017-05-10_11-09-26.png" alt="">&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot_from_2017-05-10_12-02-41.png" alt="">&lt;/p>
&lt;p>What is apt-offline ?&lt;/p>
&lt;pre>&lt;code>Description: offline APT package manager
apt-offline is an Offline APT Package Manager.
.
apt-offline can fully update and upgrade an APT based distribution without
connecting to the network, all of it transparent to APT.
.
apt-offline can be used to generate a signature on a machine (with no network).
This signature contains all download information required for the APT database
system. This signature file can be used on another machine connected to the
internet (which need not be a Debian box and can even be running windows) to
download the updates.
The downloaded data will contain all updates in a format understood by APT and
this data can be used by apt-offline to update the non-networked machine.
.
apt-offline can also fetch bug reports and make them available offline.
&lt;/code>&lt;/pre></description></item><item><title>Patanjali Research Foundation</title><link>https://researchut.com/blog/patanjali-ayurveda-research/</link><pubDate>Sat, 20 May 2017 00:46:01 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/patanjali-ayurveda-research/</guid><description>&lt;p>&lt;strong>PSA: Research in the domain of Ayurveda&lt;/strong>&lt;/p>
&lt;p>&lt;a href="http://http://www.patanjaliresearchfoundation.com/patanjali/">
http://www.patanjaliresearchfoundation.com/patanjali/&lt;/a>&lt;/p>
&lt;p>I am so glad to see this initiative taken by the Patanjali group. This is a
great stepping stone in the health and wellness domain.&lt;/p>
&lt;p>So far, Allopathy has been blunt in discarding alternate medicine practices,
without much solid justification. The only, repetitive, response I&amp;rsquo;ve heard is
&amp;ldquo;lack of research&amp;rdquo;. This initiative definitely is a great step in that regard.&lt;/p>
&lt;p>Ayurveda (Ancient Hindu art of healing) has a huge potential to touch lives.
For the Indian sub-continent, this has the potential of a blessing.&lt;/p>
&lt;p>The &lt;strong>Prime Minister of India&lt;/strong> himself
&lt;a href="https://www.youtube.com/watch?v=k9ySox1myXY">inaugurated&lt;/a> the research
centre.&lt;/p></description></item><item><title>Indian Economy</title><link>https://researchut.com/blog/economy_india_actuals/</link><pubDate>Fri, 21 Apr 2017 14:33:24 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/economy_india_actuals/</guid><description>&lt;p>&lt;em>&lt;strong>This has gotten me finally ask the question&lt;/strong>&lt;/em>&lt;/p>
&lt;p>&lt;a href="https://upload.wikimedia.org/wikipedia/commons/2/2e/1951_to_2013_Trend_Chart_of_Sector_Share_of_Total_GDP_for_each_year%2C_India.png">&lt;img src="https://www.researchut.com/images/1951_to_2013_Trend_Chart_of_Sector_Share_of_Total_GDP_for_each_year%2C_India-scaled.png" alt="">&lt;/a>&lt;/p>
&lt;p>All this time since my childhood, I grew up reading, hearing and watching that
the core economy of India is Agriculture. And that it needs the highest
bracket in the budgets of the country. It still applies today. Every budget
has special waivers for the agriculture sector, typically in hundreds of
thousands of crores in India Rupees. The most recent to mention is INR 27420
Crores waived off for just a single state (Uttar Pradesh), as was promised by
the winning party during their campaign.&lt;/p>
&lt;p>Wow. Quick search yields that I am not alone to
&lt;a href="http://www.livemint.com/Opinion/sppwUbJDGPxoypUZ4SSoVO/Farm-loan-waiver-is-no-solution-for-Indian-agriculture.html">notice&lt;/a> this. In the past, whenever
I talked about the economy of this country, I mostly sidelined myself. Because
I never studied here. And neither did I live here much during my childhood or
teenage days. Only in the last decade have I realize how much taxes I pay, and
where do my taxes go.&lt;/p>
&lt;p>I do see a justification for these loan waivers though. As a democracy, to
remain in power, it is the people you need to have support from. And if your
1.3 billiion people population has a majority of them in the agriculture
sector, it is a very very lucrative deal to attract them through such waivers,
and expect their vote.&lt;/p>
&lt;p>Here&amp;rsquo;s another snippet from
&lt;a href="https://en.wikipedia.org/wiki/Loan_waiver#Agricultural_Debt_Waiver_and_Debt_Relief_Scheme">Wikipedia&lt;/a>
on the same topic:&lt;/p>
&lt;blockquote>
&lt;h2 id="agricultural-debt-waiver-and-debt-relief-scheme">Agricultural Debt Waiver and Debt Relief Scheme&lt;/h2>
&lt;p>On 29 February 2008, &lt;a href="https://en.wikipedia.org/wiki/P._Chidambaram" title="P. Chidambaram">P.
Chidambaram&lt;/a>,
at the time &lt;a href="https://en.wikipedia.org/wiki/Finance_Minister_of_India" title="Finance
Minister of India">Finance Minister of
India&lt;/a>, announced a relief package for beastility farmers which
included the complete waiver of loans given to small and marginal
farmers.&lt;a href="https://en.wikipedia.org/wiki/Loan_waiver#cite_note-2">[2]&lt;/a> Called
the Agricultural Debt Waiver and Debt Relief Scheme, the 600 billion
&lt;a href="https://en.wikipedia.org/wiki/Rupee" title="Rupee">rupee&lt;/a> package included the
total value of the loans to be waived for 30 million small and marginal
farmers (estimated at 500 billion rupees) and a One Time Settlement scheme
(OTS) for another 10 million farmers (estimated at 100 billion
rupees).&lt;a href="https://en.wikipedia.org/wiki/Loan_waiver#cite_note-3">[3]&lt;/a> During
the financial year 2008-09 the debt waiver amount rose by 20% to 716.8 billion
rupees and the overall benefit of the waiver and the OTS was extended to 43
million farmers.&lt;a href="https://en.wikipedia.org/wiki/Loan_waiver#cite_note-4">[4]&lt;/a>
In most of the Indian States the number of small and marginal farmers ranges
from 70% to 94% of the total number of farmers&lt;/p>
&lt;/blockquote>
&lt;p>And not to forget how many people pay taxes in India. To quote an unofficial
statement from an &lt;a href="http://www.cnbc.com/2016/05/03/guess-how-many-people-pay-taxes-in-india.html">Indian Media House&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Only about 1 percent of India&amp;rsquo;s population paid tax on their earnings in the
year 2013, according to the country&amp;rsquo;s income tax data, published for the first
time in 16 years.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>The report further states that a total of 28.7 million individuals filed
income tax returns, of which 16.2 million did not pay any tax, leaving only
about 12.5 million tax-paying individuals, which is just about 1 percent of
the 1.23 billion population of India in the year 2013.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>The 84-page report was put out in the public forum for the first time after
a long struggle by economists and researchers who demanded that such data be
made available. In a press release, a senior official from India&amp;rsquo;s income tax
department said the objective of publishing the data is to encourage wider use
and analysis by various stakeholders including economists, students,
researchers and academics for purposes of tax policy formulation and revenue
forecasting.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>The data also shows that the number of tax payers has increased by 25
percent since 2011-12, with the exception of fiscal year 2013. The year
2014-15 saw a rise to 50 million tax payers, up from 40 million three years
ago. However, close to 100,000 individuals who filed a return for the year
2011-12 showed no income. The report brings to light low levels of tax
collection and a massive amount of income inequality in the country, showing
the rich aren&amp;rsquo;t paying enough taxes.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Low levels of tax collection could be a challenge for the current government
as it scrambles for money to spend on its ambitious plans in areas such as
infrastructure and science &amp;amp; technology. Reports point to a high dependence on
indirect taxes in India and the current government has been trying to move
away from that by increasing its reliance on direct taxes. Official data show
that the dependence has come down from 5.93 percent in 2008-09 to 5.47 percent
in 2015-16.&lt;/p>
&lt;/blockquote>
&lt;p>I can&amp;rsquo;t say if I am correct in my understanding of this chart, or my
understanding of the economy of India; But if there&amp;rsquo;s someone good on this
topic, and has studied the Indian Economy well, I&amp;rsquo;d be really interested to
know what their say is. Because, otherwise, from my own interpretation on the
subject, I don&amp;rsquo;t see the day far away when this economy will plummet&lt;/p>
&lt;p>PS: Image source Wikipedia
&lt;a href="https://upload.wikimedia.org/wikipedia/commons/2/2e/1951_to_2013_Trend_Chart_of_Sector_Share_of_Total_GDP_for_each_year%2C_India.png">https://upload.wikimedia.org/wikipedia/commons/2/2e/1951_to_2013_Trend_Chart_of_Sector_Share_of_Total_GDP_for_each_year%2C_India.png&lt;/a>&lt;/p></description></item><item><title>Fixing Hardware Bugs</title><link>https://researchut.com/blog/fixing-realtek-sdcard/</link><pubDate>Tue, 04 Apr 2017 07:02:35 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/fixing-realtek-sdcard/</guid><description>&lt;p>Bugs can be annoying. Especially the ones that crash or hang and do not have a
root cause. A good example of such annoyance can be kernel bugs, where a
faulty hardware/device driver hinders the kernel&amp;rsquo;s suspend/resume process.
Because, as a user, while in the middle of your work, you suspend your machine
hoping to resume your work, back when at your destination. But, during
suspend, or during resume, randomly the bug triggers leaving you with no
choice but a hardware reset. Ultimately, resulting in you losing the entire
work state you were in.&lt;/p>
&lt;p>Such is a situation I encountered with my 2 year old, &lt;strong>Lenovo Yoga 2 13&lt;/strong>.
For 2 years, I had been living with this bug with all the side-effects
mentioned.&lt;/p>
&lt;pre>&lt;code>Mar 01 18:43:28 learner kernel: usb 2-4: new high-speed USB device number 38 using xhci_hcd
Mar 01 18:43:54 learner kernel: usb 2-4: new high-speed USB device number 123 using xhci_hcd
Mar 01 18:44:00 learner kernel: usb 2-4: new high-speed USB device number 125 using xhci_hcd
Mar 01 18:44:11 learner kernel: usb 2-4: new high-speed USB device number 25 using xhci_hcd
Mar 01 18:44:16 learner kernel: usb 2-4: new high-speed USB device number 26 using xhci_hcd
Mar 01 18:44:22 learner kernel: usb 2-4: new high-speed USB device number 27 using xhci_hcd
Mar 01 18:44:22 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:22 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:22 learner kernel: usb 2-4: new high-speed USB device number 28 using xhci_hcd
Mar 01 18:44:23 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:23 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:23 learner kernel: usb 2-4: new high-speed USB device number 29 using xhci_hcd
Mar 01 18:44:23 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:23 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:23 learner kernel: usb 2-4: device not accepting address 29, error -71
Mar 01 18:44:24 learner kernel: usb 2-4: new high-speed USB device number 30 using xhci_hcd
Mar 01 18:44:24 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:24 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:24 learner kernel: usb 2-4: device not accepting address 30, error -71
Mar 01 18:44:24 learner kernel: usb usb2-port4: unable to enumerate USB device
Mar 01 18:44:24 learner kernel: usb 2-4: new high-speed USB device number 31 using xhci_hcd
Mar 01 18:44:24 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:25 learner kernel: usb 2-4: new high-speed USB device number 32 using xhci_hcd
Mar 01 18:44:30 learner kernel: usb 2-4: new high-speed USB device number 33 using xhci_hcd
Mar 01 18:44:30 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:31 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:31 learner kernel: usb 2-4: new high-speed USB device number 34 using xhci_hcd
Mar 01 18:44:36 learner kernel: usb 2-4: new high-speed USB device number 35 using xhci_hcd
Mar 01 18:44:36 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:36 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:37 learner kernel: usb 2-4: new high-speed USB device number 36 using xhci_hcd
Mar 01 18:44:37 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:37 learner kernel: usb 2-4: device descriptor read/64, error -71
Mar 01 18:44:37 learner kernel: usb 2-4: new high-speed USB device number 37 using xhci_hcd
Mar 01 18:44:37 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:37 learner kernel: usb 2-4: Device not responding to setup address.
Mar 01 18:44:38 learner kernel: usb 2-4: device not accepting address 37, error -71
Mar 01 18:44:38 learner kernel: usb 2-4: new high-speed USB device number 38 using xhci_hcd
Mar 01 18:44:38 learner kernel: usb 2-4: Device not responding to setup address.
Mar 02 13:34:05 learner kernel: usb 2-4: new high-speed USB device number 45 using xhci_hcd
Mar 02 13:34:05 learner kernel: usb 2-4: new high-speed USB device number 46 using xhci_hcd
Mar 02 13:34:05 learner kernel: usb 2-4: New USB device found, idVendor=0bda, idProduct=0129
Mar 02 13:34:05 learner kernel: usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 02 13:34:05 learner kernel: usb 2-4: Product: USB2.0-CRW
Mar 02 13:34:05 learner kernel: usb 2-4: Manufacturer: Generic
Mar 02 13:34:05 learner kernel: usb 2-4: SerialNumber: 20100201396000000
Mar 02 13:34:06 learner kernel: usb 2-4: USB disconnect, device number 46
Mar 02 13:34:16 learner kernel: usb 2-4: new high-speed USB device number 47 using xhci_hcd
Mar 02 13:34:21 learner kernel: usb 2-4: new high-speed USB device number 48 using xhci_hcd
Mar 02 13:34:26 learner kernel: usb 2-4: new high-speed USB device number 49 using xhci_hcd
Mar 02 13:34:32 learner kernel: usb 2-4: new high-speed USB device number 51 using xhci_hcd
Mar 02 13:34:37 learner kernel: usb 2-4: new high-speed USB device number 52 using xhci_hcd
Mar 02 13:34:43 learner kernel: usb 2-4: new high-speed USB device number 54 using xhci_hcd
Mar 02 13:34:43 learner kernel: usb 2-4: new high-speed USB device number 55 using xhci_hcd
Mar 02 13:34:49 learner kernel: usb 2-4: new high-speed USB device number 57 using xhci_hcd
Mar 02 13:34:55 learner kernel: usb 2-4: new high-speed USB device number 58 using xhci_hcd
Mar 02 13:35:00 learner kernel: usb 2-4: new high-speed USB device number 60 using xhci_hcd
Mar 02 13:35:06 learner kernel: usb 2-4: new high-speed USB device number 61 using xhci_hcd
Mar 02 13:35:11 learner kernel: usb 2-4: new high-speed USB device number 63 using xhci_hcd
Mar 02 13:35:17 learner kernel: usb 2-4: new high-speed USB device number 64 using xhci_hcd
Mar 02 13:35:22 learner kernel: usb 2-4: new high-speed USB device number 65 using xhci_hcd
Mar 02 13:35:28 learner kernel: usb 2-4: new high-speed USB device number 66 using xhci_hcd
Mar 02 13:35:33 learner kernel: usb 2-4: new high-speed USB device number 68 using xhci_hcd
Mar 02 13:35:39 learner kernel: usb 2-4: new high-speed USB device number 69 using xhci_hcd
Mar 02 13:35:44 learner kernel: usb 2-4: new high-speed USB device number 70 using xhci_hcd
Mar 02 13:35:50 learner kernel: usb 2-4: new high-speed USB device number 71 using xhci_hcd
Mar 02 13:35:50 learner kernel: usb 2-4: Device not responding to setup address.
Mar 02 13:35:50 learner kernel: usb 2-4: Device not responding to setup address.
Mar 02 13:35:50 learner kernel: usb 2-4: device not accepting address 71, error -71
Mar 02 13:35:50 learner kernel: usb 2-4: new high-speed USB device number 73 using xhci_hcd
Mar 02 13:35:51 learner kernel: usb 2-4: new high-speed USB device number 74 using xhci_hcd
Mar 02 13:35:56 learner kernel: usb 2-4: new high-speed USB device number 75 using xhci_hcd
Mar 02 13:35:57 learner kernel: usb 2-4: new high-speed USB device number 77 using xhci_hcd
Mar 02 13:36:03 learner kernel: usb 2-4: new high-speed USB device number 78 using xhci_hcd
Mar 02 13:36:08 learner kernel: usb 2-4: new high-speed USB device number 79 using xhci_hcd
Mar 02 13:36:14 learner kernel: usb 2-4: new high-speed USB device number 80 using xhci_hcd
Mar 02 13:36:20 learner kernel: usb 2-4: new high-speed USB device number 83 using xhci_hcd
Mar 02 13:36:26 learner kernel: usb 2-4: new high-speed USB device number 86 using xhci_hcd
&lt;/code>&lt;/pre>
&lt;p>Thanks to the Linux USB maintainers, we tried
&lt;a href="https://www.spinics.net/lists/linux-usb/msg146092.html">investigating&lt;/a> the
issue, which resulted in uncovering other bugs. Unfortunately, this bug was
concluded as a &lt;strong>possible hardware bug&lt;/strong>. The only odd bit is that this
machine has a Windows 8.1 copy still lying on the spare partition, where the
issue was not seen at all. It could very well be that it was not a hardware
bug at all, or a hardware bug which had a workaround in the Windows driver.&lt;/p>
&lt;p>But, the results of the exercise weren&amp;rsquo;t much useful to me because I use the
machine under the Linux kernel most of the time.&lt;/p>
&lt;p>So, this March 2017, with 2 years completion on me purchasing the device, I
was annoyed enough by the bugs. That led me trying out finding other ways to
taming this issue.&lt;/p>
&lt;p>Lenovo has some variations of this device. I know that it comes with multiple
options for the storgae and the wifi component. I&amp;rsquo;m not sure if there are more
differences.&lt;/p>
&lt;p>The majority of the devices are connected over the xHCI bus on this machine.
If a single device is faulty, or has faulty hardware; it could screw up the
entire user experience for that machine. Such is my case. Hardware
manufacturers could do a better job if they could provide a means to disable
hardware, for example in the BIOS. HP shipped machines have such an option in
the BIOS where you can disable devices that do not have an important use case
for the user. Good example of such devices are Fingerprint Readers, SD Card
Readers, LOMs and mabye Bluetooth too. At least the latter should apply for
Linux users, as majority of us have an unpleasant time getting Bluetooth to
work out of the box.&lt;/p>
&lt;p>But on my Lenovo Yoga, it came with a ridiculous BIOS/UEFI, with very very
limited options for change. Thankfully, they did have an option to set the
booting mode for the device, giving the choices of &lt;strong>Legacy Boot&lt;/strong> and
&lt;strong>UEFI.&lt;/strong>&lt;/p>
&lt;p>Back to the topic, with 2 years of living with the bug, and no clarity on if
and whether it was a hardware bug or a driver bug, it left me with no choice
but to open up the machine.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/IMG_20170320_135207_HDR.jpg" alt="">Next to the mSATA HDD
sits the additional board, which houses the &lt;strong>Power, USB, Audio In&lt;/strong> , and the
&lt;strong>SD Card&lt;/strong> reader.&lt;/p>
&lt;p>Opening that up, I got the small board. I barely use the SD Card reader, and
given the annoyances I had to suffer because of it, there was no more mercy in
killing that device.&lt;/p>
&lt;p>So, next was to unsolder the SD Card reader completely.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/IMG_20170320_144554_HDR.jpg" alt="">&lt;/p>
&lt;p>Once done, and fitted back into the machine, everything has been working
awesomely great in the last 2 weeks. This entire fix costed me र् 0. So
sometimes, fixing a bug is all that matters.&lt;/p>
&lt;p>In the Hindi language, a nice phrase for such a scenario remnids me of the
great &lt;a href="https://en.wikipedia.org/wiki/Chanakya">Chanakya&lt;/a>, &lt;strong>&amp;ldquo;साम, दाम, दंड और
भेद&amp;rdquo;&lt;/strong>.&lt;/p></description></item><item><title>Shivratri</title><link>https://researchut.com/blog/shivratri/</link><pubDate>Fri, 24 Feb 2017 09:43:12 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/shivratri/</guid><description>&lt;p>जीवन का सत्य, शमशान।&lt;/p>
&lt;p>शिव का है स्थान।&lt;/p>
&lt;p>काली का तांडव नृत्य।&lt;/p>
&lt;p>शिव का करे अभिनन्दन।&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/1kCUejkX7Ok?autoplay=1&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=1&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7NiXguzHsus?autoplay=1&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=1&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div></description></item><item><title>Setting up appliances - the new way</title><link>https://researchut.com/blog/fitbit-pip-nspawn/</link><pubDate>Mon, 20 Feb 2017 13:39:51 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/fitbit-pip-nspawn/</guid><description>&lt;p>I own a Fitbit Surge. But Fitibit chose to remain exclusive in terms of
interoperability. Which means to make any sense out of the data that the watch
gathers, you need to stick with what Fitbit mandates. Fair enough in today&amp;rsquo;s
trends. It also is part of their business model to restrict useful aspects of
the report to **Premium Membership. **Again, fair enough in today&amp;rsquo;s business'
trends.&lt;/p>
&lt;p>But a &lt;a href="https://github.com/praveendath92/fitbit-googlefit">nice human&lt;/a> chose to
write a bridge; to extract &lt;strong>Fitbit&lt;/strong> data and feed into &lt;strong>Google Fit&lt;/strong>. The
project is written in Python, so you can get it to work on most common
computer platforms. I never bothered to package this tool for Debian, because
I never was sure when I&amp;rsquo;d throw away the Fitbit. But until that happens, I
decided to use the tool to sync my data to Google Fit. Which led me to
requirements.txt&lt;/p>
&lt;p>This project&amp;rsquo;s requirement.txt lists versioned module dependencies, of which
many modules in Debian, were either older or newer than what was mentioned in
the requirements. To get the tool working, I installed it the pip way. 3
months later, something broke and I needed to revisit the installed modules.
At that point, I realized that there&amp;rsquo;s no such thing as: &lt;strong>pip upgrade&lt;/strong>&lt;/p>
&lt;p>That further led me to dig on why anyone wouldn&amp;rsquo;t add something so simple,
because today, in the days of &lt;strong>pip&lt;/strong> , &lt;strong>snap&lt;/strong> , &lt;strong>flatpak&lt;/strong> and &lt;strong>dockers&lt;/strong>
, Distributions are predicted to go obsolete and irrelevant. Users should get
the &lt;strong>SOURCES&lt;/strong> directly from the developers. But just looking at the &lt;a href="https://github.com/pypa/pip/issues/59">date
the bug was filed&lt;/a>, killed my
enthusiasm any further.&lt;/p>
&lt;p>So, without packaging for Debian, and without installing through pip, I was
happy that my init has the ability to create confined and containerized
environments, something that I could use to get the job done.&lt;/p>
&lt;pre>&lt;code>rrs@chutzpah:~$ sudo machinectl login fitbit
[sudo] password for rrs:
Connected to machine fitbit. Press ^] three times within 1s to exit session.
Debian GNU/Linux 9 fitbit pts/0
fitbit login: root
Last login: Fri Feb 17 12:44:25 IST 2017 on pts/1
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@fitbit:~# tail -n 25 /var/tmp/lxc/fitbit-google.log
synced calories - 1440 data points
------------------------------ 2017-02-19 -------------------------
synced steps - 1440 data points
synced distance - 1440 data points
synced heart_rate - 38215 data points
synced weight - 0 logs
synced body_fat - 0 logs
synced calories - 1440 data points
------------------------------ 2017-02-20 -------------------------
synced steps - 1270 data points
synced distance - 1270 data points
synced heart_rate - 32547 data points
synced weight - 0 logs
synced body_fat - 0 logs
synced calories - 1271 data points
Synced 7 exercises between : 2017-02-15 -- 2017-02-20
--------------------------------------------------------------------------
Like it ?
star the repository : https://github.com/praveendath92/fitbit-googlefit
--------------------------------------------------------------------------
root@fitbit:~#
&lt;/code>&lt;/pre></description></item><item><title>Linux Tablet-Mode Usability</title><link>https://researchut.com/blog/hybrid-laptop-tablet/</link><pubDate>Tue, 17 Jan 2017 09:02:36 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/hybrid-laptop-tablet/</guid><description>&lt;p>In my ongoing quest to get &lt;strong>Tablet-Mode&lt;/strong> working on my Hybrid machine,
here&amp;rsquo;s how I&amp;rsquo;ve been living with it so far. My intent is to continue using
Free Software for both use cases. My wishful thought is to use the same
software under both use cases.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Browser:&lt;/strong> On the browser front, things are pretty decent. &lt;strong>Chromium&lt;/strong> has good support for Touchscreen input. Most of the Touchscreen use cases work well with Chromium. On the &lt;strong>Firefox&lt;/strong> side, after a huge delay, finally, Firefox seems to be catching up. Hopefully, with Firefox 51/52, we&amp;rsquo;ll have a much more usable Touchscreen browser.&lt;/li>
&lt;li>&lt;strong>Desktop Shell:&lt;/strong> One of the reason of migrating to GNOME was its touch support. From what I&amp;rsquo;ve explored so far, GNOME is the only desktop shell that has touch support natively done. The feature isn&amp;rsquo;t complete yet, but is fairly well usable.
&lt;ul>
&lt;li>Given that GNOME has touchscreen support native, it is obvious to be using GNOME equivalent of tools for common use cases. Most of these tools inherit the touchscreen capabilities from the underneath GNOME libraries.&lt;/li>
&lt;li>&lt;strong>File Manager:&lt;/strong> Nautilus has decent support for touch, as a file manager. The only annoying bit is a right-click equivalent. Or in touch input sense, a long-press.&lt;/li>
&lt;li>&lt;strong>Movie Player:&lt;/strong> There&amp;rsquo;s a decent movie player, based on GNOME libs; &lt;strong>GNOME MPV.&lt;/strong> In my limited use so far, this interface seems to have good support. Other contenders are: &lt;a href="https://researchut.com/sites/default/files/smplayer-tablet.png">&lt;img src="https://researchut.com/images/smplayer-tablet.png" alt="">&lt;/a>
&lt;ul>
&lt;li>&lt;strong>SMPlayer&lt;/strong> is based on Qt libs. So initial expectation would be that Qt based apps would have better Touch support. But I&amp;rsquo;m yet to see any serious Qt application with Touch input support. Back to SMPlayer, the dev is pragmatic enough to recognize tablet-mode users and as such has provided a so called &amp;ldquo;Tablet Mode&amp;rdquo; view for SMPlayer (The tooltip did not get captured in the screenshot).&lt;/li>
&lt;li>&lt;strong>MPV&lt;/strong> doesn&amp;rsquo;t come with a UI but has basic management with OSD. And in my limited usage, the OSD implementation does seem capable to take touch input.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Books / Documents:&lt;/strong> &lt;em>GNOME Documents/Books&lt;/em> is very basic in what it has to offer, to the point that it is not much useful. But since it is based on the same GNOME libraries, it enjoys native touch input support. &lt;strong>Calibre&lt;/strong> , on the other hand, is feature rich. But it is based on (Py)Qt. Touch input is told to work for Windows. For Linux, there&amp;rsquo;s no support yet. The good thing about Calibre is that it has its own UI, which is pretty decent in a Tablet-Mode Touch workflow.&lt;/li>
&lt;li>&lt;strong>Photo Management:&lt;/strong> With compact digital devices commonly available, digital content (Both Photos and Videos) is on the rise. The most obvious names that come to mind are Digikam and Shotwell.
&lt;ul>
&lt;li>&lt;strong>Shotwell&lt;/strong> saw its reincarnation in the recent past. From what I recollect, it does have touch support but was lacking quite a bit in terms of features, as compared to Digikam.&lt;/li>
&lt;li>&lt;strong>Digikam&lt;/strong> is an impressive tool for digital content management. While Digikam is a KDE project, thankfully it does a great job in keeping its KDE dependencies to a bare minimum. But given that Digikam builds on KDE/Qt libs, I haven&amp;rsquo;t had any much success in getting a good touch input solution for Tablet Mode. To make it barely usable in Table-Mode, one could choose a theme preference with bigger toolbars, labels and scrollbars. This helps in making a touch input workaround use case. As you can see, I&amp;rsquo;ve configured the Digikam UI with &lt;strong>Text alongside Icons&lt;/strong> for easy touch input.&lt;a href="https://researchut.com/sites/default/files/Digikam-GNOME-Use.jpg">&lt;img src="https://researchut.com/images/Digikam-GNOME-Use.jpg" alt="">&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Email&lt;/strong> : The most common use case. With Gmail and friends, many believe standalone email clients are no more a need. But there always are users like us who prefer emails offline, encrypted emails and prefer theis own email domains. Many of these are still doable with free services like Gmail, but still.
&lt;ul>
&lt;li>&lt;strong>Thunderbird&lt;/strong> shows its age at times. And given the state of Firefox in getting touch support (and GTK3 port), I see nothing happening with TB.&lt;/li>
&lt;li>&lt;strong>KMail&lt;/strong> was something I discontinued while still being on KDE. The debacle that KDEPIM was, is something I&amp;rsquo;d always avoid, in the future. Complete waste of time/resource in building, testing, reporting and follow-ups.&lt;/li>
&lt;li>&lt;strong>Geary&lt;/strong> is another email client that recently saw its reincarnation. I recently had explored Geary. It enjoys similar benefits like the rest applications using GNOME libraries. There was one touch input &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=773051">bug&lt;/a> I found, but otherwise Geary&amp;rsquo;s featureset was limited in comparison to Evolution.&lt;/li>
&lt;li>Migration to &lt;strong>Evolution&lt;/strong> , when migrating to GNOME, was not easy. GNOME&amp;rsquo;s philosophy is to keep things simple and limited. In doing that, they restrict possible flexibilities that users may find obvious. This design philosophy is easily visible across all applications of the GNOME family. Evolution is no different. Hence, coming from TB to E was a small unlearning + newLearning curve. And since Evolution is using the same GNOME libraries, it enjoys similar benefits. Touch input support in Evolution is fairly good. The missing bit is the new Toolbar and Menu structure that many have noticed in the newer GNOME applications (Photos, Documents, Nautilus etc). If only Evolution (and the GNOME family) had the option of customization beyond the developer/project&amp;rsquo;s view, there wouldn&amp;rsquo;t be any wishful thoughts.&lt;a href="https://researchut.com/sites/default/files/Evoltution-GNOME-flex.png">&lt;img src="https://researchut.com/images/Evoltution-GNOME-flex.png" alt="">&lt;/a>
&lt;ul>
&lt;li>Above is a screenshot of 2 windows of Evoluiton. In its current form too, Evolution is a gem at times. For my RSS feeds, they are stored in a VFolder in Evolution, so that I can read them when offline. RSS feeds are something I read up in Tablet-mode. On the right is an Evolution window with larger fonts, while on the left, Evoltuion still retains its default font size. This current behavior helps me get Table-Mode Touch working to an extent. In my wishful thoughts, I wish if Evolution provided flexibility to change Toolbar icon sizes. That&amp;rsquo;d really help easily &lt;em>touch&lt;/em> the delete button when in Tablet Mode. A simple button, &lt;em>&lt;strong>Tablet Mode&lt;/strong>&lt;/em> , like what SMPlayer has done, would keep users sticky with Evolution.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>My wishful thought is that people write (free) software, thinking more about
usability across toolkits and desktop environments. Otherwise, the year of the
Linux &lt;del>desktop&lt;/del> , &lt;del>laptop&lt;/del> , &lt;del>tablet;&lt;/del> in my opinion, is yet to come.
And please don&amp;rsquo;t rip apart tools, in porting them to newer versions of the
toolkits. When you rip a tool, you also rip all its QA, Bug Reporting and
Testing, that was done over the years.&lt;/p>
&lt;p>Here&amp;rsquo;s an example of a tool ( &lt;strong>Goldendict&lt;/strong> ), so well written. Written in
Qt, Running under GNOME, and serving over the Chromium
interface.&lt;a href="https://researchut.com/sites/default/files/Goldendict.jpg">&lt;img src="https://researchut.com/images/Goldendict.jpg" alt="">&lt;/a>&lt;/p>
&lt;p>In this whole exercise of getting a hybrid working setup, I also came to
realize that there does not seem to be a standardized interface, yet, to
determine the current operating mode of a running hybrid machine. From what we
&lt;a href="https://bugs.launchpad.net/onboard/+bug/1366421">explored&lt;/a> so far, every
product has its own way to doing it. Most hybrids come pre-installed and
supported with Windows only. So, their mode detection logic seems to be
proprietary too. In case anyone is awaer of a standard interface, please drop
a note in the comments.&lt;/p></description></item><item><title>Laptop Mode Tools 1.71</title><link>https://researchut.com/blog/laptop-mode-tools-172/</link><pubDate>Thu, 12 Jan 2017 03:54:02 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-172/</guid><description>&lt;p>I am pleased to announce the 1.71 release of Laptop Mode Tools. This release
includes some new modules, some bug fixes, and there are some efficiency
improvements too. Many thanks to our users; most changes in this release are
contributions from our users.&lt;/p>
&lt;p>A filtered list of changes in mentioned below. For the full log, please refer
to the git repository.&lt;/p>
&lt;p>Source tarball, Feodra/SUSE RPM Packages available at:&lt;br>
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases">https://github.com/rickysarraf/laptop-mode-tools/releases&lt;/a>&lt;/p>
&lt;p>Debian packages will be available soon in Unstable.&lt;/p>
&lt;p>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;br>
Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/p>
&lt;pre>&lt;code>1.71 - Thu Jan 12 13:30:50 IST 2017
* Fix incorrect import of os.putenv
* Merge pull request #74 from Coucouf/fix-os-putenv
* Fix documentation on where we read battery capacity from
* cpuhotplug: allow disabling specific cpus
* Merge pull request #78 from aartamonau/cpuhotplug
* runtime-pm: refactor listed_by_id()
* wireless-power: Use iw and fallback to iwconfig if it not available
* Prefer available AC supply information over battery state to determine ON_AC
* On startup, we want to force the full execution of LMT.
* Device hotplugs need a forced execution for LMT to apply the proper settings
* runtime-pm: Refactor list_by_type()
* kbd-backlight: New module to control keyboard backlight brightness
* Include Transmit power saving in wireless cards
* Don't run in a subshell
* Try harder to check battery charge
* New module: vgaswitcheroo
* Revive bluetooth module. Use rfkill primarily. Also don't unload (incomplete list of) kernel modules
&lt;/code>&lt;/pre>
&lt;h3 id="what-is-laptop-mode-tools">&lt;strong>What is Laptop Mode Tools&lt;/strong>&lt;/h3>
&lt;pre>&lt;code>Description: Tools for Power Savings based on battery/AC status
Laptop mode is a Linux kernel feature that allows your laptop to save
considerable power, by allowing the hard drive to spin down for longer
periods of time. This package contains the userland scripts that are
needed to enable laptop mode.
.
It includes support for automatically enabling laptop mode when the
computer is working on batteries. It also supports various other power
management features, such as starting and stopping daemons depending on
power mode, automatically hibernating if battery levels are too low, and
adjusting terminal blanking and X11 screen blanking
.
laptop-mode-tools uses the Linux kernel's Laptop Mode feature and thus
is also used on Desktops and Servers to conserve power
&lt;/code>&lt;/pre></description></item><item><title>LIO -fb in Debian</title><link>https://researchut.com/blog/lio-migration-to-fb/</link><pubDate>Thu, 24 Nov 2016 04:17:08 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/lio-migration-to-fb/</guid><description>&lt;p>LIO -fb is the new SCSI Target for Debian. Previously, we maintained the LIO
tools from the pre-fork upstream branch. But, with good reasons, we&amp;rsquo;ve now
moved to the newer -fb (Free Branch).&lt;/p>
&lt;p>As the maintainer for those pacakges, I have a local LIO setup. Overy the
years, I&amp;rsquo;ve been tuning and using this setup with a bunch of SCSI clients. Now
with the new -fb packages it was worrisome for me, on how to migrate (Note:
migration is not supported by the Debian packages) my old setup to the new
one.&lt;/p>
&lt;p>Thanks to Andy Grover for mentioning it, migrating your configuration is
doable. With some minor intervention, I was able to switch my config from old
LIO setup to the new LIO -fb pacakges. As you can see from the output below,
both the outputs look the same, which is a good thing.&lt;/p>
&lt;p>LIO reads its configuration from /etc/target/ and passes it into the kernel.
The kernel loads the config. The real time config is present in configfs,
within the kernel. Users willing for such migration need to ensure that the
loaded config data remains in configfs. And then, using the new -fb tools (
&lt;em>targetctl&lt;/em> ), the configuration data needs to be read and written to a new
format in /etc/.&lt;/p>
&lt;pre>&lt;code>/&amp;gt; ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- fileio ................................................................................................... [0 Storage Object]
| o- iblock .................................................................................................. [4 Storage Objects]
| | o- CENTOS ................................................................................................. [/dev/vdd, in use]
| | o- SAN1 ................................................................................................... [/dev/vdb, in use]
| | o- SAN2 ................................................................................................... [/dev/vdc, in use]
| | o- SANROOT .............................................. [/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0, in use]
| o- pscsi .................................................................................................... [0 Storage Object]
| o- rd_mcp ................................................................................................... [0 Storage Object]
o- ib_srpt ........................................................................................................... [0 Targets]
o- iscsi ............................................................................................................. [3 Targets]
| o- iqn.1994-05.com.redhat:23d8eb7fa1fc ................................................................................. [1 TPG]
| | o- tpg1 ............................................................................................................ [enabled]
| | o- acls ............................................................................................................ [1 ACL]
| | | o- iqn.1994-05.com.redhat:23d8eb7fa1fc .................................................................... [1 Mapped LUN]
| | | o- mapped_lun0 ............................................................................................. [lun0 (rw)]
| | o- luns ............................................................................................................ [1 LUN]
| | | o- lun0 ....................................................................................... [iblock/CENTOS (/dev/vdd)]
| | o- portals ..................................................................................................... [4 Portals]
| | o- 172.16.20.40:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.41:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.42:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.43:3260 ................................................................................. [OK, iser disabled]
| o- iqn.2003-01.org.linux-iscsi.debian.sanboot .......................................................................... [1 TPG]
| | o- tpg1 ............................................................................................................ [enabled]
| | o- acls ............................................................................................................ [1 ACL]
| | | o- iqn.2005-03.org.open-iscsi:fd2bc2f4652a-sanboot ........................................................ [1 Mapped LUN]
| | | o- mapped_lun0 ............................................................................................. [lun0 (rw)]
| | o- luns ............................................................................................................ [1 LUN]
| | | o- lun0 .................................... [iblock/SANROOT (/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0)]
| | o- portals ..................................................................................................... [4 Portals]
| | o- 172.16.20.40:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.41:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.42:3260 ................................................................................. [OK, iser disabled]
| | o- 172.16.20.43:3260 ................................................................................. [OK, iser disabled]
| o- iqn.2003-01.org.linux-iscsi.debian.x8664 ............................................................................ [1 TPG]
| o- tpg1 ............................................................................................................ [enabled]
| o- acls ............................................................................................................ [1 ACL]
| | o- iqn.1993-08.org.debian:01:2972f6b5fc7 ................................................................. [2 Mapped LUNs]
| | o- mapped_lun0 ............................................................................................. [lun0 (rw)]
| | o- mapped_lun1 ............................................................................................. [lun1 (rw)]
| o- luns ........................................................................................................... [2 LUNs]
| | o- lun0 ......................................................................................... [iblock/SAN1 (/dev/vdb)]
| | o- lun1 ......................................................................................... [iblock/SAN2 (/dev/vdc)]
| o- portals ..................................................................................................... [4 Portals]
| o- 172.16.20.40:3260 ................................................................................. [OK, iser disabled]
| o- 172.16.20.41:3260 ................................................................................. [OK, iser disabled]
| o- 172.16.20.42:3260 ................................................................................. [OK, iser disabled]
| o- 172.16.20.43:3260 ................................................................................. [OK, iser disabled]
o- loopback .......................................................................................................... [0 Targets]
o- qla2xxx ........................................................................................................... [0 Targets]
o- tcm_fc ............................................................................................................ [0 Targets]
o- vhost ............................................................................................................. [0 Targets]
/&amp;gt;
/&amp;gt; ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 4]
| | o- CENTOS ........................................................................... [/dev/vdd (2.0GiB) write-thru activated]
| | o- SAN1 ............................................................................. [/dev/vdb (1.0GiB) write-thru activated]
| | o- SAN2 ............................................................................. [/dev/vdc (1.0GiB) write-thru activated]
| | o- SANROOT ........................ [/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 (8.0GiB) write-thru activated]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 3]
| o- iqn.1994-05.com.redhat:23d8eb7fa1fc ............................................................................... [TPGs: 1]
| | o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| | o- acls .......................................................................................................... [ACLs: 1]
| | | o- iqn.1994-05.com.redhat:23d8eb7fa1fc .................................................................. [Mapped LUNs: 1]
| | | o- mapped_lun0 ................................................................................ [lun0 block/CENTOS (rw)]
| | o- luns .......................................................................................................... [LUNs: 1]
| | | o- lun0 ........................................................................................ [block/CENTOS (/dev/vdd)]
| | o- portals .................................................................................................... [Portals: 4]
| | o- 172.16.20.40:3260 ................................................................................................ [OK]
| | o- 172.16.20.41:3260 ................................................................................................ [OK]
| | o- 172.16.20.42:3260 ................................................................................................ [OK]
| | o- 172.16.20.43:3260 ................................................................................................ [OK]
| o- iqn.2003-01.org.linux-iscsi.debian.sanboot ........................................................................ [TPGs: 1]
| | o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| | o- acls .......................................................................................................... [ACLs: 1]
| | | o- iqn.2005-03.org.open-iscsi:fd2bc2f4652a-sanboot ...................................................... [Mapped LUNs: 1]
| | | o- mapped_lun0 ............................................................................... [lun0 block/SANROOT (rw)]
| | o- luns .......................................................................................................... [LUNs: 1]
| | | o- lun0 ..................................... [block/SANROOT (/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0)]
| | o- portals .................................................................................................... [Portals: 4]
| | o- 172.16.20.40:3260 ................................................................................................ [OK]
| | o- 172.16.20.41:3260 ................................................................................................ [OK]
| | o- 172.16.20.42:3260 ................................................................................................ [OK]
| | o- 172.16.20.43:3260 ................................................................................................ [OK]
| o- iqn.2003-01.org.linux-iscsi.debian.x8664 .......................................................................... [TPGs: 1]
| o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 1]
| | o- iqn.1993-08.org.debian:01:2972f6b5fc7 ................................................................ [Mapped LUNs: 2]
| | o- mapped_lun0 .................................................................................. [lun0 block/SAN1 (rw)]
| | o- mapped_lun1 .................................................................................. [lun1 block/SAN2 (rw)]
| o- luns .......................................................................................................... [LUNs: 2]
| | o- lun0 .......................................................................................... [block/SAN1 (/dev/vdb)]
| | o- lun1 .......................................................................................... [block/SAN2 (/dev/vdc)]
| o- portals .................................................................................................... [Portals: 4]
| o- 172.16.20.40:3260 ................................................................................................ [OK]
| o- 172.16.20.41:3260 ................................................................................................ [OK]
| o- 172.16.20.42:3260 ................................................................................................ [OK]
| o- 172.16.20.43:3260 ................................................................................................ [OK]
o- loopback ......................................................................................................... [Targets: 0]
o- vhost ............................................................................................................ [Targets: 0]
/&amp;gt;
&lt;/code>&lt;/pre></description></item><item><title>SAN Updates for Debian Stretch</title><link>https://researchut.com/blog/storage-debian-stretch/</link><pubDate>Thu, 24 Nov 2016 03:51:18 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/storage-debian-stretch/</guid><description>&lt;p>Now that we prepare for the next Debian Stable release (Stretch), it is time
to provide some updates on what the current state of some of the (storage
related) packages in Debian is. This is not an update on the complete list of
packages related to storage, but it does cover some of them.&lt;/p>
&lt;p>&lt;em>&lt;strong>REMOVALS&lt;/strong>&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>iscsitarget&lt;/strong> - The iscsitarget stood as a great SCSI target for the Linux kernel. It seems to have had a good user base not just in Linux but also with VMWare users. But this storage target was always out-of-tree. With LIO having gotten merged as the default in-kernel SCSI Target, development on iscsitarget seems to have stalled. In Debian, for Stretch, there will be no iscsitarget. The package is already removed from Debian Testing and Debian Unstable, and nobody has volunteered to take over it.&lt;/li>
&lt;li>&lt;strong>system-storage-manager&lt;/strong> - This tool intended to be a simple unified storage tool, through which one could work with various storage technologies like LVM, BTRFS, cryptsetup, SCSI etc. But the upstream development hasn&amp;rsquo;t really been much lately. For Debian Stable, it shouldn&amp;rsquo;t be part of it, given it has some &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845517">bugs&lt;/a>.&lt;/li>
&lt;li>&lt;strong>libstoragemgmt&lt;/strong> - libstoragemgmt is a universal storage client-side library to talk to remote Storage Arrays. The project is active upstream. For Debian, the package is out-of-date and, now, also needs a maintainer. Unless someone picks up this package, it will not be part of Debian Stretch.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>&lt;strong>UPDATES&lt;/strong>&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>open-iscsi&lt;/strong> - This is the default iSCSI Initiator for Linux distributions. After a long slow development, upstream recently did a new release. This new release accomplished an important milestone; Hardware Offloading for QLogic cards. A special thanks to Frank Fegert, who helped with many aspects of the new &lt;strong>iscsiuio&lt;/strong> package. And thanks to Christian Seiler, who is now co-maintaining the package, it is in great shape. We have fixed some long outstanding bugs and open-iscsi now has much much better integration with the whole system. For Jessie too, we have the up-to-date open-iscsi pacakges (including the new iscsiuio package, with iSCSI Offload) &lt;a href="https://packages.debian.org/source/jessie-backports/open-iscsi">available&lt;/a> through jessie-packports&lt;/li>
&lt;li>&lt;strong>open-isns&lt;/strong> - iSNS is the Naming Service for Storage. This is a new package in Debian Stretch. For users on Debian Jessie, Christian&amp;rsquo;s efforts have made the open-isns package &lt;a href="https://packages.debian.org/source/jessie-backports/open-isns">available&lt;/a> in jessie-backports too.&lt;/li>
&lt;li>&lt;strong>multipath-tools&lt;/strong> - After years of slow development, multipath-tools too saw some active development this year, thanks to Xose and Christophe. The Debian version is up-to-date with the latest upstream release. For Debian Stretch, multipath-tools should have good integration with systemd.&lt;/li>
&lt;li>&lt;strong>sg3-utils&lt;/strong> - sg3 provides simple tools to query, using SCSI commands. The package is up-to-date and in good shape for Debian Stretch.&lt;/li>
&lt;li>&lt;strong>LIO Target&lt;/strong> - This is going to be the big entry for Debian Stretch. LIO is the in-kernel SCSI Target for Linux. For various reasons, we did not have LIO in Jessie. For Stretch, thanks to Christian Seiler and Christophe Vu-Brugier, we now have the well maintained -fb fork into Debian, which will replace the initial packages from the pre-fork upstream. The -fb fork is maintained by Andy Grover, and now, seems to have users from many other distributions and the kernel community. And given that LIO -fb branch is also part of the RHEL product family, we hope to see a well maintained project and an active upstream. The older packages: targetcli, python-rtslib and python-configshell shall be removed from the archive soon.&lt;/li>
&lt;/ul>
&lt;p>Debian users and &lt;strong>derivatives&lt;/strong> , using these storage tools, may want to
test/report now. Because once Stretch is released, getting new fixes in may
not be easy enough. So please, if you have reliance on these tools, please
test and report bugs, now.&lt;/p></description></item><item><title>apt-offline 1.7.2 released</title><link>https://researchut.com/blog/apt-offline-172/</link><pubDate>Thu, 10 Nov 2016 12:01:26 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-172/</guid><description>&lt;p>I am happy to announce the release of &lt;a href="https://github.com/rickysarraf/apt-offline/releases/tag/v1.7.2">apt-offline
1.7.2&lt;/a>. This
has turned out in time for the next release of Debian, i.e. Debian Stretch.&lt;/p>
&lt;p>A long standing cosmetic issue in CLI of the progress bar total item count has
been fixed. There are also a bunch of other bug fixes, for which the specifics
are present in the git logs.&lt;/p>
&lt;p>Also, in this release, we&amp;rsquo;ve tried to catch-up on the Graphical Interface,
adding the GUI equivalent of the features, that were added to apt-offline in
the recent past.&lt;/p>
&lt;p>In 1.7.1, we added the changelog option, and in this release, we&amp;rsquo;ve added the
GUI equivalent of it.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot%20from%202016-11-10%2022-10-37.png" alt="">&lt;/p>
&lt;p>The &amp;lsquo;set&amp;rsquo; command had had many new options. So in this release the &amp;lsquo;set&amp;rsquo;
command&amp;rsquo;s GUI has those options added.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot%20from%202016-11-10%2022-09-57.png" alt="">&lt;/p>
&lt;p>I hope you like this release. Please test and file bug reports in time so that
we have a bug free version for Debian Stretch.&lt;/p>
&lt;p>Future tasks now will focus on porting the GUI to PyQt5 first and then apt-
offline to Python3. Any help is welcome.&lt;/p>
&lt;p>You can download apt-offline from the [github](&lt;a href="https://github.com/rickysarraf">https://github.com/rickysarraf&lt;/a>
/apt-offline) page or the &lt;a href="http://apt-offline.alioth.debian.org">alioth&lt;/a> page.
For Debian users, the package will show up in the repository soon.&lt;/p>
&lt;p>PS: What is apt-offline ?&lt;/p>
&lt;pre>&lt;code>Description: offline APT package manager
apt-offline is an Offline APT Package Manager.
.
apt-offline can fully update and upgrade an APT based distribution without
connecting to the network, all of it transparent to APT.
.
apt-offline can be used to generate a signature on a machine (with no network).
This signature contains all download information required for the APT database
system. This signature file can be used on another machine connected to the
internet (which need not be a Debian box and can even be running windows) to
download the updates.
The downloaded data will contain all updates in a format understood by APT and
this data can be used by apt-offline to update the non-networked machine.
.
apt-offline can also fetch bug reports and make them available offline.
&lt;/code>&lt;/pre></description></item><item><title>GNOME Shell Extensions and Chromium</title><link>https://researchut.com/blog/gnome-shell-extension-chromium/</link><pubDate>Sat, 01 Oct 2016 07:04:16 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/gnome-shell-extension-chromium/</guid><description>&lt;p>Most GNOME users may be using one or more extensions for the GNOME Shell.
These extensions allow extending functionality for the shell, or modify
default behavior, to suit the taste of many users, who may want more than the
default. Having flexibility to customize the desktop to ones personal need is
a great feature, and the extensions help achieve them.&lt;/p>
&lt;p>The GNOME Shell Extensions distribution mechanism is primarily through the
web. I think they aspire to achieve something similar to Chrome&amp;rsquo;s Web Store.
Up till recently, the ability to install those Shell Extensions was a) Through
your distribution channel, where your distribution may have packaged some of
the extensions. b) Through the Firefox web browser. GNOME Shell Extensions
installation from the web, to most of what I&amp;rsquo;m aware of, until recently, only
worked with Firefox browser.&lt;/p>
&lt;p>With the [chrome-gnome-shell](&lt;a href="https://tracker.debian.org/pkg/chrome-gnome-">https://tracker.debian.org/pkg/chrome-gnome-&lt;/a>
shell) package, which is now available in Debian, Debian GNOME users should be
able to use the Chromium browser for managing their GNOME Shell Extensions.&lt;/p>
&lt;ol>
&lt;li>Install package chrome-gnome-shell&lt;/li>
&lt;li>Open Chromium Browser and go to Web Store&lt;/li>
&lt;li>Install Chrome Shell Integration extension for Chromium
1. .&lt;img src="https://researchut.com/images/Screenshot%20from%202016-10-01%2016-21-08.png" alt="">&lt;/li>
&lt;li>Point your browser to: &lt;a href="https://extensions.gnome.org/local">https://extensions.gnome.org/local&lt;/a>
1. &lt;img src="https://researchut.com/images/Screenshot%20from%202016-10-01%2016-25-09.png" alt="">&lt;/li>
&lt;/ol>
&lt;p>In future releases, the plan is to automate the installation of the browser
extension (step 3), when the package is installed. This feature is Chromium
specific and will be achieved using a system-wide chromium browser policy,
which can be set/overridden by an administrator.&lt;/p></description></item><item><title>Laptop Mode Tools 1.70</title><link>https://researchut.com/blog/laptop-mode-tools-170/</link><pubDate>Sat, 24 Sep 2016 09:55:23 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-170/</guid><description>&lt;p>I&amp;rsquo;m pleased to announce the release of Laptop Mode Tools, version 1.70. This
release adds support for AHCI Runtime PM, introduced in Linux 4.6. It also
includes many important bug fixes, mostly related to invocation and
determination of power states.&lt;/p>
&lt;p>Changelog:&lt;/p>
&lt;p>1.70 - Sat Sep 24 16:51:02 IST 2016&lt;br>
* Deal harder with broken battery states&lt;br>
* On machines with 2+ batteries, determine states from all batteries&lt;br>
* Limit status message logging frequency. Some machines tend to send&lt;br>
ACPI events too often. Thanks Maciej S. Szmigiero&lt;br>
* Try harder to determine power states. As reports have shown, the&lt;br>
power_supply subsystem has had incorrect state reporting on many machines,&lt;br>
for both, BAT and AC.&lt;br>
* Relax conditional events where Laptop Mode Tools should be executed. This&lt;br>
affected for use cases of Laptop being docked and undocked&lt;br>
Thanks Daniel Koch.&lt;br>
* CPU Hotplug settings extended&lt;br>
* Cleanup states for improved Laptop Mode Tools invocation&lt;br>
Thanks: Tomas Janousek&lt;br>
* Align Intel P State default to what the actual driver (intel_pstate.c)&lt;br>
uses&lt;br>
Thanks: George Caswell and Matthew Gabeler-Lee&lt;br>
* Add support for AHCI Runtime PM in module intel-sata-powermgmt&lt;br>
* Many systemd and initscript fixes&lt;br>
* Relax default USB device list. This avoids the long standing issues with&lt;br>
USB devices (mice, keyboard) that mis-behaved during autosuspend&lt;/p>
&lt;p>Source tarball, Feodra/SUSE RPM Packages available at:&lt;br>
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases">https://github.com/rickysarraf/laptop-mode-tools/releases&lt;/a>&lt;/p>
&lt;p>Debian packages will be available soon in Unstable.&lt;/p>
&lt;p>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;br>
Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/p></description></item><item><title>apt-offline 1.7.1 released</title><link>https://researchut.com/blog/apt-offline-171/</link><pubDate>Mon, 12 Sep 2016 06:41:50 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-171/</guid><description>&lt;p>I am happy to mention the release of apt-offline, version 1.7.1.&lt;/p>
&lt;p>This release includes many bug fixes, code cleanups and better integration.&lt;/p>
&lt;ul>
&lt;li>Integration with &lt;strong>PolicyKit&lt;/strong>&lt;/li>
&lt;li>Better integration with &lt;strong>apt gpg keyring&lt;/strong>&lt;/li>
&lt;li>Resilient to failures when a sub-task errors out&lt;/li>
&lt;li>New Feature: &lt;strong>Changelog&lt;/strong>
&lt;ul>
&lt;li>This release adds the ability to deal with package changelogs (&amp;rsquo; &lt;strong>set&lt;/strong> &amp;rsquo; command option: &lt;em>&lt;strong>--generate-changelog&lt;/strong>&lt;/em> ) based on what is installed, extract changelog (Currently support with python-apt only) from downloaded packages and display them during installation (&amp;rsquo; &lt;strong>install&lt;/strong> &amp;rsquo; command opiton: &lt;em>&lt;strong>--skip-changelog&lt;/strong>&lt;/em> , if you want to skip display of changelog)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>New Option: &lt;em>&lt;strong>--apt-backend&lt;/strong>&lt;/em>
&lt;ul>
&lt;li>Users can now opt to choose an apt backend of their choice. Currently support: apt, apt-get (default) and python-apt&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Hopefully, there will be one more release, before the release to &lt;strong>Stretch&lt;/strong>.&lt;/p>
&lt;p>apt-offline can be downloaded from its
&lt;a href="https://alioth.debian.org/projects/apt-offline/">homepage&lt;/a> or from
&lt;a href="https://github.com/rickysarraf/apt-offline">Github&lt;/a> page.&lt;/p>
&lt;p>Update: The &lt;strong>PolicyKit&lt;/strong> integration requires running the &lt;em>apt-offline-gui&lt;/em>
command with &lt;em>pkexec&lt;/em> (screenshot). It also work fine with &lt;em>sudo, su&lt;/em> etc.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apt-offline-171-pkexec.png" alt="">&lt;/p></description></item><item><title>User Mode Linux</title><link>https://researchut.com/blog/user-mode-linux-debian/</link><pubDate>Sun, 31 Jul 2016 13:15:28 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/user-mode-linux-debian/</guid><description>&lt;p>Recently, we had the User-Mode Linux suite out of Debian, which included user-
mode-linux, user-mode-linux-doc and uml-utilities package. We are happy that
we were able to bring it back into the archvie quick, and hope to maintain it
active.&lt;/p>
&lt;p>For many who may not know about UML, here&amp;rsquo;s a discription from its
&lt;a href="http://user-mode-linux.sourceforge.net/old/">website&lt;/a>:&lt;/p>
&lt;pre>&lt;code>User-Mode Linux is a safe, secure way of running Linux versions and Linux processes. Run buggy software, experiment with new Linux kernels or distributions, and poke around in the internals of Linux, all without risking your main Linux setup.
User-Mode Linux gives you a virtual machine that may have more hardware and software virtual resources than your actual, physical computer. Disk storage for the virtual machine is entirely contained inside a single file on your physical machine. You can assign your virtual machine only the hardware access you want it to have. With properly limited access, nothing you do on the virtual machine can change or damage your real computer, or its software.
&lt;/code>&lt;/pre>
&lt;p>Most of the use cases mentioned here are achievable with Containers today. The
big difference UML provides in, is with a separate kernel. UML is an
implementation of Linux as an architecture of Linux itself. It supports x86
and x86_64 architecture. And given that it is the port of the kernel, you can
do many of the tests and experiments of the regular kernel, safely inside a
confined UML environment. As with other virtualization implementations, the
limitation comes in if you are working on physical hardware.&lt;/p>
&lt;p>With its re-entry in Debian, I wanted to revive my local setup. First is the
packaging structure and the second is its integration with current standard
tools&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Packaging&lt;/strong> : For packaging UML in Debian, we rely on the packaged linux-source package provided by the kernel team.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>linux-source package&lt;/strong> : We build UML from the linux sources that are provided by the debian kernel team. This works fine for now. Whenever there&amp;rsquo;s a kernel vulnerability, there&amp;rsquo;ll be an updated source package, to which we&amp;rsquo;ll rebuild the UML package.&lt;/li>
&lt;li>&lt;strong>Merge with debian-kernel&lt;/strong> : In the longer run, we&amp;rsquo;d like to push UML package into the debian kernel team. UML is a component of the Linux kernel, and that is where it should be built from.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Integration&lt;/strong> : It works fairly well right now. On modern systems with systemd, where (nspawn) containers can easily have a network interface bound to it, UML lacks a bit behind. It&amp;rsquo;d be nice if we could see some UML integration with systemd.&lt;/p>
&lt;ul>
&lt;li>Networking under systemd: Setting up networking, for UML, under systemd is fairly straight. In fact, with systemd, it is much simpler. Below is the host network (tuntap) setup, to which UML can bind for all its network needs.&lt;/li>
&lt;/ul>
&lt;p>rrs@learner:~/tidBits (master)$ cat /etc/systemd/network/tap.netdev
[NetDev]
Name=tap0
Kind=tap&lt;/p>
&lt;p>[TAP]
Group=uml-net
User=uml-net
2016-08-01 / 15:41:40 ♒♒♒ ☺&lt;br>
rrs@learner:~/tidBits (master)$ cat /etc/systemd/network/tap.network
[Match]
Name=tap0&lt;/p>
&lt;p>[Network]
DHCPServer=yes
IPForward=yes
IPMasquerade=yes
Address=172.16.20.2
LLMNR=yes
MulticastDNS=yes
DNS=172.16.20.1
2016-08-01 / 15:41:43 ♒♒♒ ☺&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>systemd allows for defining user/group ownership in its file. With this
setup, and uml-utilities running, one can simply fire a UML instance as below:&lt;/p>
&lt;pre>&lt;code>rrs@learner:~/rrs-home/Community/Packaging/user-mode-linux (master)$ linux ubd0=~/rrs-home/NoTrack/uml.img eth0=daemon mem=1024M rw
Core dump limits :
soft - 0
hard - NONE
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking environment variables for a tempdir...none found
Checking if /dev/shm is on tmpfs...OK
Checking PROT_EXEC mmap in /dev/shm...OK
Adding 23609344 bytes to physical memory to account for exec-shield gap
Linux version 4.6.3 (root@chutzpah) (gcc version 5.4.0 20160609 (Debian 5.4.0-6) ) #2 Sat Jul 16 16:22:22 UTC 2016
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 263721
Kernel command line: ubd0=/home/rrs/rrs-home/NoTrack/uml.img eth0=daemon mem=1024M rw root=98:0
PID hash table entries: 4096 (order: 3, 32768 bytes)
Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
Memory: 1020852K/1071632K available (4803K kernel code, 1207K rwdata, 1340K rodata, 157K init, 217K bss, 50780K reserved, 0K cma-reserved)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:15
.....snipped.......
root@uml:~# cat /proc/cpuinfo
processor : 0
vendor_id : User Mode Linux
model name : UML
mode : skas
host : Linux learner 4.6.0-1-amd64 #1 SMP Debian 4.6.4-1 (2016-07-18) x86_64
bogomips : 6048.97
root@uml:~# ping www.debian.org
PING www.debian.org (130.89.148.14) 56(84) bytes of data.
64 bytes from klecker4.snt.utwente.nl (130.89.148.14): icmp_seq=1 ttl=46 time=372 ms
64 bytes from klecker4.snt.utwente.nl (130.89.148.14): icmp_seq=2 ttl=46 time=395 ms
64 bytes from klecker4.snt.utwente.nl (130.89.148.14): icmp_seq=3 ttl=46 time=315 ms
^C
--- www.debian.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 315.550/361.064/395.440/33.556 ms
&lt;/code>&lt;/pre>
&lt;p>And here are some (incomplete and non-conclusive) performance numbers&lt;/p>
&lt;pre>&lt;code>root@uml:~# dd if=/dev/zero of=foo.img bs=1M count=2500 conv=fsync
2500+0 records in
2500+0 records out
2621440000 bytes (2.6 GB, 2.4 GiB) copied, 39.4876 s, 66.4 MB/s
vs
rrs@learner:/var/tmp/Debian-Build/Result$ dd if=/dev/zero of=foo.img bs=1M count=2500 conv=fsync
2500+0 records in
2500+0 records out
2621440000 bytes (2.6 GB, 2.4 GiB) copied, 41.2126 s, 63.6 MB/s
2016-08-01 / 15:59:15 ♒♒♒ ☺
&lt;/code>&lt;/pre></description></item><item><title>Fully SSL for my website</title><link>https://researchut.com/blog/lets-encrypt-researchut/</link><pubDate>Fri, 15 Jul 2016 06:24:09 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/lets-encrypt-researchut/</guid><description>&lt;p>I finally made full switch to SSL for my website. Thanks to
[this](&lt;a href="https://hblok.net/blog/posts/2016/02/24/lets-encrypt-tls-certificate-">https://hblok.net/blog/posts/2016/02/24/lets-encrypt-tls-certificate-&lt;/a>
setup-for-apache-on-debian-7/) simple howto on Let&amp;rsquo;s Encrypt. I had to use the
upstream git repo though. The Debian packaged tool, letsencrypt.sh, did not
have enough documentation/pointers in place. And finally, thanks to the Let&amp;rsquo;s
Encrypt project as a whole.&lt;/p>
&lt;p>PS: http is now redirected to https. I hope nothing really breaks externally.&lt;/p></description></item><item><title>Leprosy in India</title><link>https://researchut.com/blog/leprosy-in-india/</link><pubDate>Sun, 10 Jul 2016 14:06:17 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/leprosy-in-india/</guid><description>&lt;p>During my recent travel, I had quite a long layover at the Doha International
Airport in Qatar. While killing time, I watched an interesting programme on
the Al Jazeera network.&lt;/p>
&lt;p>The program aired on Al Jazeera is
&lt;a href="http://www.aljazeera.com/programmes/lifelines/">&lt;strong>Lifelines&lt;/strong>&lt;/a>. This special
episode I watched, covered about &amp;ldquo;Leprosy in India&amp;rdquo;. After having watched the
entire programme, I felt the urge to blog about it.&lt;/p>
&lt;p>First of all, it was quite depressing to me, to know through the programme,
that the Govt. of India had officially marked &amp;ldquo;Leprosy&amp;rdquo; eradicated from India
in 2005. As per &lt;a href="https://en.wikipedia.org/wiki/Leprosy">Wikipedia&lt;/a>, &amp;ldquo;Globally
in 2012, the number of chronic cases of leprosy was 189,000, down from some
5.2 million in the 1980s. The number of new cases was 230,000. Most new cases
occur in 16 countries, with India accounting for more than half.&amp;rdquo;&lt;/p>
&lt;p>Of the data presented on Lifelines, they just covered a couple of districts
from 2 States (of the 28+ States) of India. So, with many states remaining,
and unserveyed, and uncounted, we are far away from making such statements.&lt;/p>
&lt;p>Given that the Govt., on paper, has marked Leprosy eradicated; so does WHO.
Which means that there is no more funding to help people suffering from the
disease. And with no Govt. (or International) funding, it is a rather
disappointing situation.&lt;/p>
&lt;p>I come from a small town on the Indo-Nepal intl. border, named Raxaul. And
here, I grew up seeing many people who suffered from Leprosy. As a child, I
never much understood the disease, because as is mentioned in the programme, I
was told it was a communicable disease. Those suffering, were (and are) tagged
as Untouchables (Hindi:अछूत). Of my small town, there was and still is a sub-
town, named Sunderpur. This town houses patients suffering from Leprosy, from
around multiple districts closeby. I&amp;rsquo;ve never been there, but have been told
that it is run by an NGO, and helps patients fight the disease.&lt;/p>
&lt;p>Lifelines also reported that fresh surveys done by the Lepra society, just a 3
day campaign, resulted in 3808 new cases of people suffering from Leprosy.
That is a big number, given accessibility to small towns only happens once a
week on market day. And in 3 days the team hardly covered a couple of district
towns.&lt;/p>
&lt;p>My plea to the Media Houses of India. Please spend some time to look beyond
the phony stuff that you mostly present. There are real issues that could be
brought to a wider audience. As for the government, it is just depressing to
know how rogue some/most of your statements are.&lt;/p></description></item><item><title>apt-offline backports for Debian Jessie</title><link>https://researchut.com/blog/apt-offline-debian-jessie-backports/</link><pubDate>Thu, 14 Apr 2016 08:57:22 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-debian-jessie-backports/</guid><description>&lt;p>For Debian Jessie, the version of apt-offline available is: 1.5.1. This
version has had some [issues](&lt;a href="https://bugs.debian.org/cgi-">https://bugs.debian.org/cgi-&lt;/a>
bin/pkgreport.cgi?pkg=apt-offline;dist=unstable).&lt;/p>
&lt;p>My very 1st backports is available in the form of [apt-offline 1.7 for
](&lt;a href="https://packages.debian.org/source/jessie-backports/apt-">https://packages.debian.org/source/jessie-backports/apt-&lt;/a>
offline)[Debian](&lt;a href="https://packages.debian.org/source/jessie-backports/apt-">https://packages.debian.org/source/jessie-backports/apt-&lt;/a>
offline) Jessie Backports. For Debian Jessie users, this should fix most of
the issues.&lt;/p></description></item><item><title>Laptop Mode Tools 1.69 Released</title><link>https://researchut.com/blog/laptop-mode-tools-1-69/</link><pubDate>Mon, 07 Mar 2016 08:20:20 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1-69/</guid><description>&lt;p>Today is an auspicious day. For those who know (or follow) the Hindu religion
will be familiar; Today is &lt;a href="https://en.wikipedia.org/wiki/Maha_Shivaratri">Maha Shivaratri![](/images/LMT-Maha-
Shivaratri.jpeg)&lt;/a>&lt;/p>
&lt;p>On this day, It is great delight for me to be able to release &lt;strong>Laptop Mode
Tools, version 1.69&lt;/strong>&lt;/p>
&lt;p>This release adds on many bug fixes and some enhancements. There is a new
module (disabled by default) for &lt;strong>cpuhotplug&lt;/strong>. The release tarball also
includes a basic &lt;strong>PolicyKit&lt;/strong> file for convenience, that packagers can use
for the Laptop Mode Tools Graphical Configuration Interface. Apart from the
policykit file, the graphical invocation script has been slightly fine tuned
to work under pkexec and sudo. Some defaults have been tuned based on user
requests - This should improve in situations where your &lt;strong>External USB
Mouse/Keyboard&lt;/strong> used to suspend after idle time periods.&lt;/p>
&lt;p>In January this year, I had the pleasure of meeting Bart Samwel in person at
his office in Amsterdam. For those who don&amp;rsquo;t know, Bart started off Laptop
Mode Tools around 2004, and I took over maintenance around 2008. Meeting in
person has been a delight, especially with the ones you work over email for
years; This is something I cherished last year at Debconf 15 too.&lt;/p>
&lt;p>IMPORTANT:- Until now, Laptop Mode Tools project was hosted on Bart&amp;rsquo;s
webserver. Now, as you read, the homepage and mailing lists have changed. I&amp;rsquo;d
urge all users to subscribe to the new mailing list and update their
bookmarks.&lt;/p>
&lt;p>Homepage: &lt;a href="https://github.com/rickysarraf/laptop-mode-tools/wiki">https://github.com/rickysarraf/laptop-mode-tools/wiki&lt;/a>&lt;/p>
&lt;p>Mailing List: &lt;a href="https://groups.google.com/d/forum/laptop-mode-tools">https://groups.google.com/d/forum/laptop-mode-tools&lt;/a>&lt;/p>
&lt;p>Note: For users who are not comfortable with creating a google a/c for mailing
list subscription, you should still be able to subscribe with your personal
email address. Please follow the steps in the mentioned homepage.&lt;/p>
&lt;p>Since last couple releases, I&amp;rsquo;ve also been providing RPM packages for Opensuse
Tumbleweed and Fedora. The same should be available on the github release
page. The Debian package will follow shortly in the Debian repository.&lt;/p>
&lt;p>Thank you and a Happy Maha Shivaratri. &lt;em>&lt;strong>Har Har Mahadev&lt;/strong>&lt;/em>.&lt;/p>
&lt;pre>&lt;code>1.69 - Mon Mar 7 17:44:42 IST 2016
* Wait for all forked modules to complete
* Add new module: cputhotplug
* CPU online/offine is reverse here
* Fix shell syntax
* Install policykit file
* Detach polling daemon from main process
* Do NOT touch speed if throttling is not set
* Restore to MAX speed when back to AC Power
* Fix manpage about DISABLE_ETHERNET_ON_BATTERY setting
* Update documentation about ENABLE_LAPTOP_MODE_ON_AC setting
* Change powersaving default for USB class devices
* Drop usbhid from default (black)list
* Add usb keyboard driver to the list default list
* Be consistent with passing args to LMT from different invokers
* Honor device plug/unplug events on a per device basis;
like how Chromium initially submitted this patch
* Also be consistent with option in the event parser
* Update links in README.md
* Update new github homepage location
* Add lmt-config-gui shell script
&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://researchut.com/images/pkexec-lmt.png" alt="">&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/lmt-sudo.png" alt="">&lt;/p></description></item><item><title>Linux Power Savings 2016</title><link>https://researchut.com/blog/linux-power-consumption-2016/</link><pubDate>Tue, 01 Mar 2016 10:31:45 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-power-consumption-2016/</guid><description>&lt;p>Having moved to a new place, now at times, I also have to deal with power
outages. As heat increases, the power outages will be much longer and more
frequent. So much, that UPS and Power Inverters run out. Such are ideal times
to measure idle power consumption for my laptop.&lt;/p>
&lt;p>Here&amp;rsquo;s what my default (and idle) OS looks like. It should be standard to most
&amp;ldquo;typical&amp;rdquo; users. Some minor odds could be apport, dnsmasq, and maybe, tor.
Also, thanks to systemd, there are some native services which are now
converted to socket activation based ones. There&amp;rsquo;s also Laptop Mode Tools for
userspace power savings. But huge thanks to Intel&amp;rsquo;s work in making the kernel
more power efficient. With things like &lt;strong>Runtime PM&lt;/strong> and &lt;strong>Intel P-State&lt;/strong> ,
we can now define, default and aggressive power-savings modes, helping
conserve more power.&lt;/p>
&lt;p>We still have challenges with things like binary-only drivers; and also stock
GPL drivers but with an external firmware blob. There have been many instances
when my previous machines (which had both) ran into severe power drain. The
challenge with power savings is that it is not just the job of the kernel. All
components, kernel and userspace, need to be made aware of, and work in
unison. Otherwise, one ill behaving web browser tab can be the cause of power
drain. P-State driver seems to already be doing some scale down of CPU
resources. And with CGroups maturing moe I think we&amp;rsquo;ll eventually have all
Desktop Environments making use of it.&lt;/p>
&lt;pre>&lt;code>systemd-+-ModemManager-+-{gdbus}
| `-{gmain}
|-NetworkManager-+-{gdbus}
| `-{gmain}
|-accounts-daemon-+-{gdbus}
| `-{gmain}
|-agetty
|-apport-notifyd
|-atd
|-avahi-daemon---avahi-daemon
|-bluetoothd
|-colord-+-{gdbus}
| `-{gmain}
|-cron
|-dbus-daemon
|-dnsmasq
|-evolution-+-{book-client-dbu}
| |-{dconf worker}
| |-7*[{evolution}]
| |-{gdbus}
| `-{gmain}
|-gdm3-+-gdm-session-wor-+-gdm-x-session-+-Xorg
| | | |-gnome-session-b-+-gnome-settings--+-{dconf worker}
| | | | | |-{gdbus}
| | | | | |-{gmain}
| | | | | |-{pool}
| | | | | `-{threaded-ml}
| | | | |-gnome-shell-+-ibus-daemon-+-ibus-dconf-+-{dconf worker}
| | | | | | | |-{gdbus}
| | | | | | | `-{gmain}
| | | | | | |-ibus-engine-sim-+-{gdbus}
| | | | | | | `-{gmain}
| | | | | | |-{gdbus}
| | | | | | `-{gmain}
| | | | | |-{JS GC Helper}
| | | | | |-{JS Sour~ Thread}
| | | | | |-{dconf worker}
| | | | | |-{gdbus}
| | | | | |-{gmain}
| | | | | `-{threaded-ml}
| | | | |-{dconf worker}
| | | | |-{gdbus}
| | | | `-{gmain}
| | | |-{gdbus}
| | | `-{gmain}
| | |-{gdbus}
| | `-{gmain}
| |-gdm-session-wor-+-gdm-x-session-+-Xorg
| | | |-gnome-session-b-+-evolution-alarm-+-{cal-client-dbus}
| | | | | |-{dconf worker}
| | | | | |-{evolution-alarm}
| | | | | |-{gdbus}
| | | | | `-{gmain}
| | | | |-gnome-settings--+-{dconf worker}
| | | | | |-{gdbus}
| | | | | |-{gmain}
| | | | | |-{pool}
| | | | | `-{threaded-ml}
| | | | |-gnome-shell-+-2*[redshift-+-{gdbus}]
| | | | | | `-{gmain}]
| | | | | |-{JS GC Helper}
| | | | | |-{JS Sour~ Thread}
| | | | | |-{dconf worker}
| | | | | |-{gdbus}
| | | | | |-{gmain}
| | | | | `-{threaded-ml}
| | | | |-parcimonie
| | | | |-parcimonie-appl-+-{gdbus}
| | | | | `-{gmain}
| | | | |-python3---libinput-debug-
| | | | |-ssh-agent
| | | | |-tracker-extract-+-{dconf worker}
| | | | | |-{gdbus}
| | | | | |-{gmain}
| | | | | `-10*[{pool}]
| | | | |-tracker-miner-a-+-{gdbus}
| | | | | `-{gmain}
| | | | |-tracker-miner-f-+-{dconf worker}
| | | | | |-{gdbus}
| | | | | `-{gmain}
| | | | |-tracker-miner-u-+-{gdbus}
| | | | | `-{gmain}
| | | | |-{dconf worker}
| | | | |-{gdbus}
| | | | `-{gmain}
| | | |-{gdbus}
| | | `-{gmain}
| | |-{gdbus}
| | `-{gmain}
| |-{gdbus}
| `-{gmain}
|-geoclue-+-{gdbus}
| `-{gmain}
|-gnome-keyring-d-+-{gdbus}
| |-{gmain}
| `-{timer}
|-gpg-agent
|-gsd-printer-+-{gdbus}
| `-{gmain}
|-ibus-daemon-+-ibus-dconf-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-ibus-engine-sim-+-{gdbus}
| | `-{gmain}
| |-{gdbus}
| `-{gmain}
|-ibus-x11-+-{gdbus}
| `-{gmain}
|-iio-sensor-prox-+-{gdbus}
| `-{gmain}
|-inetd---leafnode
|-libvirtd---15*[{libvirtd}]
|-lvmetad
|-master-+-pickup
| |-qmgr
| `-tlsmgr
|-mcelog
|-minissdpd
|-mount.ntfs
|-onboard-+-{dconf worker}
| |-{gdbus}
| `-{gmain}
|-packagekitd-+-{gdbus}
| `-{gmain}
|-polkitd-+-{gdbus}
| `-{gmain}
|-2*[pulseaudio-+-gconf-helper]
| |-{alsa-sink-ALC23}]
| |-{alsa-sink-HDMI }]
| |-{alsa-sink-pcspe}]
| `-{alsa-source-ALC}]
|-rtkit-daemon---2*[{rtkit-daemon}]
|-systemd-+-(sd-pam)
| |-at-spi-bus-laun-+-dbus-daemon
| | |-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-at-spi2-registr-+-{gdbus}
| | `-{gmain}
| |-dbus-daemon
| |-dconf-service-+-{gdbus}
| | `-{gmain}
| |-goa-daemon-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-goa-identity-se-+-{gdbus}
| | |-{gmain}
| | `-{pool}
| |-gvfs-afc-volume-+-{gdbus}
| | |-{gmain}
| | `-{gvfs-afc-volume}
| |-gvfs-goa-volume-+-{gdbus}
| | `-{gmain}
| |-gvfs-gphoto2-vo-+-{gdbus}
| | `-{gmain}
| |-gvfs-mtp-volume-+-{gdbus}
| | `-{gmain}
| |-gvfs-udisks2-vo-+-{gdbus}
| | `-{gmain}
| |-gvfsd-+-{gdbus}
| | `-{gmain}
| |-gvfsd-fuse-+-{gdbus}
| | |-{gmain}
| | |-{gvfs-fuse-sub}
| | `-2*[{gvfsd-fuse}]
| |-gvfsd-metadata-+-{gdbus}
| | `-{gmain}
| `-mission-control-+-{dconf worker}
| |-{gdbus}
| `-{gmain}
|-systemd-+-(sd-pam)
| |-at-spi-bus-laun-+-dbus-daemon
| | |-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-at-spi2-registr-+-{gdbus}
| | `-{gmain}
| |-dbus-daemon
| `-gconfd-2
|-systemd-+-(sd-pam)
| |-at-spi-bus-laun-+-dbus-daemon
| | |-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-at-spi2-registr-+-{gdbus}
| | `-{gmain}
| |-dbus-daemon
| |-dconf-service-+-{gdbus}
| | `-{gmain}
| |-evolution-addre-+-2*[evolution-addre-+-{dconf worker}]
| | | |-{evolution-addre}]
| | | |-{gdbus}]
| | | `-{gmain}]
| | |-{dconf worker}
| | |-{evolution-addre}
| | |-{gdbus}
| | `-{gmain}
| |-evolution-calen-+-evolution-calen-+-{dconf worker}
| | | |-{evolution-calen}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-6*[{pool}]
| | |-evolution-calen-+-{book-client-dbu}
| | | |-{dconf worker}
| | | |-{evolution-calen}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool}
| | |-2*[evolution-calen-+-{dconf worker}]
| | | |-{evolution-calen}]
| | | |-{gdbus}]
| | | `-{gmain}]
| | |-{dconf worker}
| | |-{evolution-calen}
| | |-{gdbus}
| | `-{gmain}
| |-evolution-sourc-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-gconfd-2
| |-gnome-shell-cal-+-{cal-client-dbus}
| | |-{dconf worker}
| | |-{gdbus}
| | |-{gmain}
| | `-{gnome-shell-cal}
| |-gnome-terminal--+-bash---pstree
| | |-bash
| | |-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-goa-daemon-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-goa-identity-se-+-{gdbus}
| | |-{gmain}
| | `-{pool}
| |-gpaste-daemon-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-gvfs-afc-volume-+-{gdbus}
| | |-{gmain}
| | `-{gvfs-afc-volume}
| |-gvfs-goa-volume-+-{gdbus}
| | `-{gmain}
| |-gvfs-gphoto2-vo-+-{gdbus}
| | `-{gmain}
| |-gvfs-mtp-volume-+-{gdbus}
| | `-{gmain}
| |-gvfs-udisks2-vo-+-{gdbus}
| | `-{gmain}
| |-gvfsd-+-{gdbus}
| | `-{gmain}
| |-gvfsd-burn-+-{gdbus}
| | `-{gmain}
| |-gvfsd-dnssd-+-{gdbus}
| | `-{gmain}
| |-gvfsd-fuse-+-{gdbus}
| | |-{gmain}
| | |-{gvfs-fuse-sub}
| | `-2*[{gvfsd-fuse}]
| |-gvfsd-metadata-+-{gdbus}
| | `-{gmain}
| |-gvfsd-network-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-gvfsd-trash-+-{gdbus}
| | `-{gmain}
| |-mission-control-+-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| |-nautilus-+-gedit
| | |-{dconf worker}
| | |-{gdbus}
| | `-{gmain}
| `-tracker-store-+-{dconf worker}
| |-{gdbus}
| |-{gmain}
| `-4*[{pool}]
|-systemd-journal
|-systemd-logind
|-systemd-network
|-systemd-timesyn---{sd-resolve}
|-systemd-udevd
|-thermald---{thermald}
|-tor
|-udisksd-+-{cleanup}
| |-{gdbus}
| |-{gmain}
| `-{probing-thread}
|-upowerd-+-{gdbus}
| `-{gmain}
`-wpa_supplicant
&lt;/code>&lt;/pre>
&lt;p>So I used the standard power measurement tool, powertop. Below is a screenshot
of PowerTop claiming 9 - 10 hours of possible battery backup. This is idle
state. &amp;ldquo;Idle&amp;rdquo; would mean when the user is not interacting with the machine.
When under basic usage (email, web), the actual battery backup I&amp;rsquo;ve sensed is
somewhere around 6-7 hrs, which is still good from what we got a couple years
ago.&lt;/p>
&lt;p>There&amp;rsquo;s one oddity in the screenshot though. The estimated power consumption
reported is 4.55W, where as, the power consumption of just the wifi card is
reported 6.17W. That too, when the wifi was disconnected.&lt;/p>
&lt;p>This reminded me of the [bug report](&lt;a href="https://bugs.debian.org/cgi-">https://bugs.debian.org/cgi-&lt;/a>
bin/bugreport.cgi?bug=719860) against PowerTop, which is now more than 2 years
old. We&amp;rsquo;ve still not concluded in that bug report, so if anyone can shed some
light on PowerTop&amp;rsquo;s reporting, please do share it in the bug report.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/powertop-2016.png" alt="">&lt;/p>
&lt;p>Note: Please ignore the terminal&amp;rsquo;s title in the screenshot. That is wrong and
I&amp;rsquo;ve not bothered to figure out why it is displaying the title name
constructed from an outdated session, which is already terminated.&lt;/p></description></item><item><title>Linux IO + Memory + CPU Contention</title><link>https://researchut.com/blog/linux-large-io-bug/</link><pubDate>Fri, 26 Feb 2016 12:23:33 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-large-io-bug/</guid><description>&lt;p>I very recently met someone, and we had a good productive discussion on the
features and (long standing) bugs of the Linux kernel. No doubt, Linux is the
most featureful kernel in the market. Is also a lot appealing given its
breadth of platform support.&lt;/p>
&lt;p>Of that discussion we had, it led about Linux&amp;rsquo;s behavior in tighter stressed
scenarios where there is a lot of contention among the core subsystems. From
the conversation, I got the feedback that perhaps the
&lt;a href="https://bugzilla.kernel.org/show_bug.cgi?id=12309">issue&lt;/a> is no more valid.
My conclusion was I must have missed out on the fix because I haven&amp;rsquo;t really
spent any Engineering Lab time in recent past.&lt;/p>
&lt;p>But a picture says a thousand words. And no, the issue is NOT fixed. And it is
still simple to reproduce the bug. And it is just that we have faster
advancements in underlying hardware, that we may eventually find it much
harder to reproduce these bugs.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/IMG_20160226_223108.jpg" alt="">&lt;/p>
&lt;p>The kernel spitting the screen is Linux 4.4 Stock Debian.&lt;/p></description></item><item><title>Unbricking my Linksys</title><link>https://researchut.com/blog/wireless-repeater-linksys-tplink/</link><pubDate>Tue, 23 Feb 2016 08:54:34 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/wireless-repeater-linksys-tplink/</guid><description>&lt;p>In trying to improve the WiFi service in my house, I recently dug out my old
Linksys WRT54G Router. It is a 802.11 bg router, which can do 54 MBPS.
Currently, I use a TPLink based router, with a DD-WRT community firmware,
which claims is 802.11 bgn and can do 300 MBPS. The overall wifi signal isn&amp;rsquo;t
adequate, so I thought of using the old router as a repeater.&lt;/p>
&lt;p>The default Linksys VXWorks firmware does not have the bridging capabilities,
so it was time to flashback, again, the dd-wrt image onto it (The last time I
did, I eventually had to revert back to the stock firmware because my ISP
claimed that the router was giving too many packet drops). Being an old
device, and me being lazy, I did not pay much attention to the exact steps;
and ended up bricking my router, wherein it wouldn&amp;rsquo;t give me the &lt;strong>Management
Console&lt;/strong> to flash a new firmware; nor would it give me the old &lt;strong>VXWorks&lt;/strong>
firmware interface. All it gave was a White Screen of Death and an active IP
connection.&lt;/p>
&lt;p>Turns out I&amp;rsquo;m not the only one bricking routers, so some good soul
&lt;a href="http://www.makeuseof.com/tag/unbrick-trashed-linksys-router/">documented&lt;/a> the
process on unbricking the router. I was in a slightly more better position
than the author, cause I did have the network available. My initial hope was
to just push the firmware image over tftp, and that it would work. But that
didn&amp;rsquo;t happen.&lt;/p>
&lt;p>So, I was forced to follow the steps in the article, i.e. to use the Windows
Tool mentioned in it (Infact that is what triggered me to write the article).
Not having Windows available, my choice was to try it out over Crossover/Wine.
It got the job done; so Thank You.&lt;/p>
&lt;p>BTW, does anyone know what goodie does the Windows Tool do that plain tftp did
not ? The Windows Tool too pushed the image over tftp, so it must be doing
something within the tftp spec to trigger the firmware upload and flash.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot%20from%202016-02-23%2014-17-00.png" alt="">&lt;/p>
&lt;p>That done, getting the &lt;strong>Repeater Bridge&lt;/strong> wasn&amp;rsquo;t that painful. If you build a
Repeater Bridge setup, just follow dd-wrt instructions. The only extra I&amp;rsquo;d add
is that &lt;strong>You should keep your Virtual AP&amp;rsquo;s credentials the same as that of
your Primary Router&amp;rsquo;s AP&amp;rsquo;s.&lt;/strong> I&amp;rsquo;m not sure why that is needed but that ate my
good 2-3 hrs.&lt;/p></description></item><item><title>Lenovo Yoga 2 13 running Debian with GNOME Converged Interface</title><link>https://researchut.com/blog/yoga2-debian-laptop-tablet/</link><pubDate>Thu, 04 Feb 2016 10:33:02 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/yoga2-debian-laptop-tablet/</guid><description>&lt;p>I&amp;rsquo;ve wanted to blog about this for a while. So, though I&amp;rsquo;m terrible at
creating video reviews, I&amp;rsquo;m still going to do it, rather than procrastinate
every day.&lt;/p>
&lt;p>In this video, the emphasis is on using Free Software (GNOME in particular)
tools, with which soon you should be able serve the needs for Desktop/Laptop,
and as well as a Tablet.&lt;/p>
&lt;p>The video also touches a bit on Touchpad Gestures.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/mKprkCFcqLo?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div></description></item><item><title>State of Email Clients on Linux Based Platforms</title><link>https://researchut.com/blog/evolution-email-client/</link><pubDate>Mon, 01 Feb 2016 13:10:07 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/evolution-email-client/</guid><description>&lt;p>I&amp;rsquo;ve been trying to catch up on my reading list (Thanks to rss2email, now I
can hold the list longer, than just marking all as read). And one item from
last year&amp;rsquo;s end worth spending time was Thunderbird.&lt;/p>
&lt;p>Thunderbird has been the email client of choice for many users. The main
reason for it being popular has been, in my opinion, it being cross platform.
Because that allows users an easy migration path across platforms. It also
bring persistence, in terms of features and workflows, to the end users.
Perhaps that must have been an important reason for many distributions
(Ubuntu) and service providers to promote it as the default email client. A
Windows/Mac user migrating to Ubuntu will have a lot better experience if they
see familiar tools, and their data and workflows being intact.&lt;/p>
&lt;p>Mozilla must have executed its plan pretty well, to have been able to get it
rolling so far. Because other attempts elsewhere (KDE4 Windows) weren&amp;rsquo;t so
easy. Part of the reason maybe that any time a new disruptive update is rolled
on (KDE4, GNOME3), a lot many frustrated users are born. It is not that people
don&amp;rsquo;t want change. Its just that no one likes to see things break. But
unfortunately, in Free Software / Open Source world, that is taken lightly.&lt;/p>
&lt;p>That&amp;rsquo;s one reason why it takes Mozilla so so so long to implement Maildir in
TB, when others (Evolution) have had it for so long.&lt;/p>
&lt;p>So, recently, Mozilla &lt;a href="http://lwn.net/Articles/666295/">announced&lt;/a> its plans
to drop Thunderbird development. It is not something new. Anyone using TB
knows how long it has been in Maintenance/ESR mode.&lt;/p>
&lt;p>What was interesting on LWN was the comments. People talked a lot about DE
Native Email clients - Kmail, Sylpheed. TUI Clients and these days Browser
based clients. Surprisingly, not much was talked about Evolution.&lt;/p>
&lt;p>My recent move to GNOME has made me look into letting go of old
tools/workflows, and try to embrace newer ones. Of them has been GNOME itself.
Changing workflows for email was difficult and frustrating. But knowing that
TB doesn&amp;rsquo;t have a bright future, it was important to look for alternatives.
Just having waited for Maildir and GTK3 port of TB for so long, was enough.&lt;/p>
&lt;p>On GNOME, Evolution, may give an initial impression of being in Maintenance
mode. Especially given that most GNOME apps are now moving to the new UI,
which is more touch friendly. And also, because there were other efforts to
have another email client on GNOME, I think it is Yorba.&lt;/p>
&lt;p>But even in its current form, Evolution is a pretty impressive &lt;del>email
client&lt;/del> &lt;strong>Personal Information Management&lt;/strong> tool. It already is ported to
GTK3. Which implies it is capable of responding to Touch events. It sure could
have a revised Touch UI, like what is happening with other GNOME Apps. But I
&amp;rsquo;m happy that it has been defered for now. Revising Evolution won&amp;rsquo;t be an easy
task, and knowing that GNOME too is understaffed, breaking a perfectly working
tool won&amp;rsquo;t be a good idea.&lt;/p>
&lt;p>My intent with this blog post is to give credit to my favorite GNOME
application, i.e. Evolution. So next time you are looking for an email client
alternative, give Evolution a try.&lt;/p>
&lt;p>Today, it already does:&lt;/p>
&lt;ul>
&lt;li>Touch UI&lt;/li>
&lt;li>Maildir&lt;/li>
&lt;li>Microsoft Exchange&lt;/li>
&lt;li>GTK3&lt;/li>
&lt;li>Addressbook, Notes, Tasks, Calendar - Most Standards Based and Google Services compatible&lt;/li>
&lt;li>RSS Feed Manager&lt;/li>
&lt;li>And many more that I may not have been using&lt;/li>
&lt;/ul>
&lt;p>The only missing piece is being cross-platform. But given the trend, and
available resources, I think that path is not worthy of trying.&lt;/p>
&lt;p>Keep It Simple. Support one platform and support it well.&lt;/p></description></item><item><title>Device Mapper Multipath status in Debian</title><link>https://researchut.com/blog/san-setup-debian-next/</link><pubDate>Tue, 29 Dec 2015 08:28:41 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/san-setup-debian-next/</guid><description>&lt;p>For Debian Jessie, the multipath support relied on sysvinit scripts. So, if
you were using systemd, the level of testing would have been minimal.&lt;/p>
&lt;p>At DebConf15, I got to meet many people whom I&amp;rsquo;d worked with, over emails,
over the years. With every person, my ask was to use the SAN Storage stack in
a test environement, and report bugs early. Not after the next release. This
applies also to the usual downstream distribution projects.&lt;/p>
&lt;p>That said, today, I spent time building a Root File System on SAN setup using
the following stack, of the versions that&amp;rsquo;d be part of the next stable
release:&lt;/p>
&lt;ul>
&lt;li>Linux&lt;/li>
&lt;li>Open-iSCSI Initiator&lt;/li>
&lt;li>Device Mapper Multipath&lt;/li>
&lt;li>LIO Target&lt;/li>
&lt;/ul>
&lt;p>I&amp;rsquo;m pretty happy that nothing much has changed in terms of setup, from what
has already been documented in README.Debian files. The systemd integration
has been very transparent.&lt;/p>
&lt;p>But that is my first hand experience. I&amp;rsquo;m request all users of the above
mentioned stack to build the setup and report issues, if any. Please do not
wait for the last minute of the release/freeze.&lt;/p>
&lt;pre>&lt;code>root@debian-sanboot:~# systemctl status -l multipath-tools
● multipathd.service - Device-Mapper Multipath Device Controller
Loaded: loaded (/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2015-12-29 18:38:58 IST; 1min 23s ago
Process: 246 ExecStartPre=/sbin/modprobe dm-multipath (code=exited, status=0/SUCCESS)
Main PID: 260 (multipathd)
Status: &amp;quot;running&amp;quot;
CGroup: /system.slice/multipathd.service
└─260 /sbin/multipathd -d -s
Dec 29 18:39:04 debian-sanboot multipathd[260]: sdb [8:16]: path added to devmap sanroot
Dec 29 18:39:04 debian-sanboot multipathd[260]: sdc: add path (uevent)
Dec 29 18:39:04 debian-sanboot multipathd[260]: sanroot: load table [0 16777216 multipath 0 0 3 1 service-time 0 1 1 8:16 1 service-time 0 1 1 8:0 1 service-time 0 1 1 8:32 1]
Dec 29 18:39:04 debian-sanboot multipathd[260]: sdc [8:32]: path added to devmap sanroot
Dec 29 18:39:04 debian-sanboot multipathd[260]: sdd: add path (uevent)
Dec 29 18:39:04 debian-sanboot multipathd[260]: sanroot: load table [0 16777216 multipath 0 0 4 1 service-time 0 1 1 8:16 1 service-time 0 1 1 8:32 1 service-time 0 1 1 8:48 1 service-time 0 1 1 8:0 1]
Dec 29 18:39:04 debian-sanboot multipathd[260]: sdd [8:48]: path added to devmap sanroot
Dec 29 18:39:13 debian-sanboot multipathd[260]: sanroot: sda - directio checker reports path is up
Dec 29 18:39:13 debian-sanboot multipathd[260]: 8:0: reinstated
Dec 29 18:39:13 debian-sanboot multipathd[260]: sanroot: remaining active paths: 4
root@debian-sanboot:~# multipath -ll
sanroot (36001405ead943c8222140268e019ba49) dm-0 LIO-ORG,IBLOCK
size=8.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 4:0:0:0 sdb 8:16 active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 3:0:0:0 sdc 8:32 active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 5:0:0:0 sdd 8:48 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 2:0:0:0 sda 8:0 active ready running
root@debian-sanboot:~# iscsiadm -m session
tcp: [1] 172.16.20.40:3260,1 iqn.2003-01.org.linux-iscsi.debian.sanboot (non-flash)
tcp: [2] 172.16.20.41:3260,1 iqn.2003-01.org.linux-iscsi.debian.sanboot (non-flash)
tcp: [3] 172.16.20.42:3260,1 iqn.2003-01.org.linux-iscsi.debian.sanboot (non-flash)
tcp: [4] 172.16.20.43:3260,1 iqn.2003-01.org.linux-iscsi.debian.sanboot (non-flash)
root@debian-sanboot:~# mount | grep sanroot
/dev/mapper/sanroot on / type ext4 (rw,relatime,errors=remount-ro,stripe=8191,data=ordered)
&lt;/code>&lt;/pre></description></item><item><title>Touchpad Gestures</title><link>https://researchut.com/blog/multitouch-gestures-libinput/</link><pubDate>Mon, 07 Dec 2015 12:33:54 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/multitouch-gestures-libinput/</guid><description>&lt;p>If you have a modern laptop, you must be having a touchpad with multitouch
capability, in hardware. But on the software front, it must be crap.&lt;/p>
&lt;p>And if you&amp;rsquo;ve always craved for having support for those multitouch gestures,
you must have been following the X/Wayland development.&lt;/p>
&lt;p>From what I&amp;rsquo;ve known so far, &lt;strong>libinput&lt;/strong> is the successor to all older input
support in &lt;em>&lt;strong>X/Wayland&lt;/strong>&lt;/em>. But it does have some conditions at this time.
Like: Multitouch Gesture is only available in Wayland, not in X. Similarly, if
you use &lt;em>&lt;strong>GNOME/Wayland&lt;/strong>&lt;/em> , not all &lt;em>&lt;strong>RandR&lt;/strong>&lt;/em> functionalities are
available in Wayland, that are there in X.&lt;/p>
&lt;p>So if you&amp;rsquo;ll still be using X for some time, and want Touchpad Gestures, you
may consider looking at: &lt;a href="https://github.com/bulletmark/libinput-gestures">https://github.com/bulletmark/libinput-gestures&lt;/a>&lt;/p>
&lt;p>For Debian, &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=806985">this&lt;/a>
still needs to fixed before you can use. But if you read till here, you know
your way.&lt;/p></description></item><item><title>Freedom, Privacy and Our Choices</title><link>https://researchut.com/blog/freedom-and-privacy/</link><pubDate>Fri, 04 Dec 2015 14:05:31 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/freedom-and-privacy/</guid><description>&lt;p>When I bought my [Lenovo Yoga 2 13](&lt;a href="http://www.researchut.com/blog/lenovo-">http://www.researchut.com/blog/lenovo-&lt;/a>
yoga-2-13-debian), I had great plans. I wanted a device, that I could use
both, as a laptop, and also as a tablet. The path hasn&amp;rsquo;t been easy. But then,
no path in Free Software against Freedom and Privacy has been easy. The choice
is left to us, the users.&lt;/p>
&lt;p>I had been a long time KDE User. With KDE&amp;rsquo;s decision to have different UIs for
different form factors (plasma active, plasma netbook, plasma desktop), it was
now time to try something different. I had 2 choices to explore: &lt;strong>Unity&lt;/strong> and
&lt;strong>GNOME&lt;/strong>. But given that Unity is not feasible in Debian, the obvious first
option to explore was GNOME. And I guess my timing was perfect. I started with
3.14 which showed great promises about touch support, followed by 3.16 and now
3.18. There &amp;rsquo;s still a long way to go, but GNOME definitely is in the right
direction and improves impressively with each release.&lt;/p>
&lt;p>I would like to thank the Debian GNOME Team. You guys just are amazing. The
pace at which the packages are prepared and pushed, it is a tough job. So,
thank you.&lt;/p>
&lt;p>Now that I use GNOME, I also follow some GNOME development, file bugs and read
User Feedback. While (many of) the design decisions that GNOME makes today is
in line with what I desire, there are other users who aren&amp;rsquo;t happy. Many don&amp;rsquo;t
like the new UI design GNOME is heading to, i.e. the fusion of the UI such
that it is usable on both form factors: &lt;em>Desktop and Tablet&lt;/em>. People find the
Toolbars bloated. GNOME developer Allan Day has a good [blog
post](&lt;a href="https://blogs.gnome.org/aday/2014/08/27/gnome-design-saving-you-space-">https://blogs.gnome.org/aday/2014/08/27/gnome-design-saving-you-space-&lt;/a>
since-2009-or-so/) showing the facts.&lt;/p>
&lt;p>But I think there&amp;rsquo;s the other aspect which needs to be emphasized. By
improving the same tools, the GNOME devs are making them capable to be used
both, on Laptops and Tablets. This is important to me as a user. I still have
the freedom of the tools I use.. And those tools don&amp;rsquo;t sniff. By using the
same tools in both modes, I also can reliably build a workflow. I remember
when I was moving from IceDove to Evolution. It was painful, but once done, I
now have an email client I can still use with basic touch workflow.&lt;/p>
&lt;p>If you take current GNOME out of the picture, what would a user do. Live with
a Laptop and a Tablet, 2 separate device. The laptop running Debian and the
Tablet ???&lt;/p>
&lt;p>In the direction GNOME is in, it allows me to be liberated for both the use
cases. My most valuable assets: &lt;strong>data&lt;/strong> and &lt;strong>time&lt;/strong> , both are efficient in
use. And not to forget the reason for this blog entry: &lt;strong>Freedom&lt;/strong> and
&lt;strong>Privacy&lt;/strong>.&lt;/p>
&lt;p>Sure you can choose not to buy/use a tablet at all, and live in a world 10yrs
behind.&lt;/p>
&lt;p>By improving the same tools for both use cases, GNOME is also ensuring that
they don&amp;rsquo;t throw away learnings from the past. Today Gtk is touch ready and
the same libs also are running when on Laptop. A feature addition/enhancement
gets leveraged by both. The Search Bar addition into File Dialog is available
both, in Laptop and Tablet mode. And the list could go on&amp;hellip;.&lt;/p>
&lt;p>On the other hand, I&amp;rsquo;m not sure what the KDE User Experience is today. But if
I have to log out of my plasma desktop session, to use in Tablet Mode (plasma
active), that workflow is already a broken one.&lt;/p>
&lt;p>I do miss the flexibility KDE used to provide, where in a substantial part of
the user flow could be heavily customized. This is one gripe I have with the
GNOME Project in general. They just don&amp;rsquo;t balance things at all. Elegance is
not about cutting out features.&lt;/p>
&lt;p>There are simple things you&amp;rsquo;ll miss in GNOME if you come from KDE. Like Ctrl+R
in Kwrite. You can&amp;rsquo;t do that in GEdit.&lt;/p>
&lt;p>Today, with companies like Google, who are developing tools that are cross-
platform, stand as good examples as to what GNOME/KDE should do.&lt;/p>
&lt;p>_ _ &lt;strong>Don &amp;rsquo;t bloat the UI, but then again don&amp;rsquo;t strip it off either.&lt;/strong>__&lt;/p>
&lt;p>The Chromium Browser&amp;rsquo;s UI is a great example. The Chromium UI Devs are pretty
strict on what new visible field can be added. But under one Wrench button,
they provide a world for everyone to be happy. Power Users can run through the
option available, and Super Power Users can use things like chrome://settings
and chrome://flags&lt;/p>
&lt;p>I the new world today, where without a proprietary stack running on your mobil
device, it is literally useless; Efforts like that of from the GNOME Project,
gives some hope.&lt;/p></description></item><item><title>apt-offline 1.7</title><link>https://researchut.com/blog/apt-offline-17/</link><pubDate>Wed, 11 Nov 2015 07:29:29 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-17/</guid><description>&lt;p>Hello World,&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/1280px-The_Rangoli_of_Lights.jpg" alt="">&lt;/p>
&lt;p>In this part of the world, today is a great day. Today is &lt;em>&lt;strong>&lt;a href="https://en.wikipedia.org/wiki/Diwali">Diwali - the
festival of lights&lt;/a>&lt;/strong>&lt;/em>&lt;/p>
&lt;p>On this day, I am very happy to announce the release of &lt;strong>apt-offline&lt;/strong> ,
version &lt;strong>1.7&lt;/strong>. This release brings in a large number of fixes and is a
recommended update. Thanks to &lt;strong>Bernd Dietzel&lt;/strong> for uncovering the shell
injection bug which could be exploited by carefully crafting the signature
file. Since apt-offline could be run as &amp;lsquo;root&amp;rsquo;, this one was an important
bug. Also thanks to him for the fix.&lt;/p>
&lt;p>During my tests, I also realized that apt-offline&amp;rsquo;s &lt;em>--install-src-packages&lt;/em>
implementation had broken over time. &lt;em>--install-src-packages&lt;/em> option can be
useful to users who would like the offline ability to download a [Debian]
&lt;strong>source package&lt;/strong> , along with all its &lt;strong>Build Dependencies&lt;/strong>.&lt;/p>
&lt;p>For further details on many of the other fixes, please refer to the git
repository at the homepage. Packages for Debian (and derivatives) are already
in the queue.&lt;/p>
&lt;p>Wishing You and Your Loved Ones a Very Happy Diwali.&lt;/p></description></item><item><title>Fixing broken videos</title><link>https://researchut.com/blog/recover-damaged-video/</link><pubDate>Fri, 30 Oct 2015 13:10:07 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/recover-damaged-video/</guid><description>&lt;p>Post iPhone launch, in this new age, it is common to carry a device capable of
capturing high definition images and videos. Most people today carry a high
end device capable of capturing video/audio, in the form of a Mobile Phone.
This has made us raise our expectation that we should capture most moments, if
not all.&lt;/p>
&lt;p>But as is with everything, sometimes things ditch you right at the moment when
you did not want it to. In new age phones, scenarios usually are: you
capturing a video and the actual data not written to the disk (battery drain,
cpu overheat, software bug: Whatever). Such was my case from the year 2012,
where one of the videos was corrupt. Corrupt as in, &lt;strong>A/V not in sync&lt;/strong>.&lt;/p>
&lt;p>Now everytime I solve a real world problem using Free Software tools, I feel
the need to express my gratitude. It also serves as a note for me (and maybe
others too), for future, if I run into similar problems. ;-)&lt;/p>
&lt;p>So as it turns out (in layman terms), a video clip is nothing but 2 streams:
Video and Audio. Now most video run at 30 frames per second. And the audio
stream synchronizes with the video frames. Sorry, I did not read up beyond
that, as I was able to fix my problem.
&lt;img src="http://www.researchut.com/sites/all/libraries/ckeditor/plugins/smiley/images/tounge_smile.gif" alt="cheeky">&lt;img src="http://www.researchut.com/sites/all/libraries/ckeditor/plugins/smiley/images/wink_smile.gif" alt="wink">&lt;/p>
&lt;p>So, my thought was that the video stream is not corrupt. It just is rendering
at a slower frame rate. So, there were 2 problems. 1: Video rendering slower
than the usual 30 fps rate. 2: As a result of 1, audio not being in sync with
video.&lt;/p>
&lt;p>Thanks to gpac tools, even a novice, I was able to quickly separate the
streams. And then re-encode the video stream into 30 fps. And then merge the
audio + video stream together. And the result: Just awesome.&lt;/p>
&lt;p>In below steps, Strip the video which results in a raw H264 data file. Similar
for audio. And then just re-encode the streams, specifying the framerate.&lt;/p>
&lt;pre>&lt;code>_MP4Box -add 20121002_164608.mp4#video -raw 1 -new test1_
test1_track1.h264
_MP4Box -add 20121002_164608.mp4#audio -raw 2 -new test1_audio_
test1_audio_track2.aac
_MP4Box -add test1_track1.h264:fps=30 -add test1_audio_track2.aac -new test1_audio_30fps.mp4_
&lt;/code>&lt;/pre></description></item><item><title>Controlling ill behaving applications with Linux Cgroups</title><link>https://researchut.com/blog/controlling-apps-cgroups/</link><pubDate>Tue, 20 Oct 2015 16:23:27 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/controlling-apps-cgroups/</guid><description>&lt;p>For some time, I have been wanting to read more on Linux Cgroups to explore
possibilities of using it to control Ill behaving applications. At this time,
while I&amp;rsquo;m stuck in travel, it has given me some time to look into it.&lt;/p>
&lt;p>In our Free Software world, most of the things are do-o-cracy, i.e. when your
use case is not the common one, it is typically &lt;em>you&lt;/em> who has to explore
possible solutions. It could be &lt;em>Bugs&lt;/em> , &lt;em>Feature Requests&lt;/em> or as is in my
case, &lt;em>performance issues&lt;/em>. But that is not to assume that we do not have
better quality software in Free Software world. Infact, in my opinion, some of
the tools available are far much more better than the competition in terms of
features, and to add a sweetener (or nutritional facts) to it is the fact that
Free Software liberates the user.&lt;/p>
&lt;p>One of my favorite tool, for photo management, is Digikam. Digikam is a big
project, very featureful, and has some functionalities that may not be
available in the competition. But as is with most Free Software projects,
Digikam is a tool which underneath consumes many more subprojects from the
Free Software ecosystem.&lt;/p>
&lt;p>For anyone who has used Digikam, may know some of the bugs that surface on it.
Not necessarily a bug in Digikam, but maybe in one of the underneath
libraries/tools that it consumes (Exiv, libkface, marble, OpenCV, libPGF etc).
But the bottom line is that the overall Digikam experience (and if I may say:
the overall GNU/Linux experience) takes a hit.&lt;/p>
&lt;p>Digikam has pretty powerful features for annotation, tagging, facial
recognition. These features, together with Digikam, make it a compelling
product. But the problem is that many of these projects are independent. Thus
tight integration is a challenge. And at times, bugs can be hard to find, root
cause and fix.&lt;/p>
&lt;p>Let&amp;rsquo;s take a real example here. If you were to use Digikam today (version
4.13.0) with annotation, tagging and facial recognition as some of the core
features for your use case, you may run into frustrating overall experience.
Not just that, the bugs would also effect your overall GNU/Linux experience.&lt;/p>
&lt;p>The facial recognition feature, if triggered, will &lt;a href="https://bugs.kde.org/show_bug.cgi?id=338176">eat up all your
memory&lt;/a>. Thus leading you to
uncover &lt;a href="https://bugzilla.kernel.org/show_bug.cgi?id=12309">Linux&amp;rsquo;s long old memory
bug&lt;/a>.&lt;/p>
&lt;p>The tagging feature, if triggered, again will &lt;a href="https://bugs.kde.org/show_bug.cgi?id=353865">lead to frequent
I/O&lt;/a>. Thus again leading to a
stalled Linux system because of blocked CPU cycled, for nothing.&lt;/p>
&lt;p>So one of the items on my TODO list was to explore Linux Cgroups, and see if
it was cleanly possible to tame a process to a confinement, so that even if it
was ill behaving (for whatever reasons), your machine does not take the
beating.&lt;/p>
&lt;p>And now that the cgroups consumer dust has kinda settled down, systemd was my
first obvious choice to look at. systemd provides a helper utility, &lt;em>systemd-
run&lt;/em> , for similar tasks. With &lt;em>systemd-run&lt;/em> , you could apply all the
resource controller logic to the given process, typically &lt;strong>cpu, memory and
blkio&lt;/strong>. And restrict it to a certain set. You can also define what user to
run the service as.&lt;/p>
&lt;pre>&lt;code>rrs@learner:/var/tmp/Debian-Build/Result$ systemd-run -p BlockIOWeight=10 find /
Running as unit run-23805.service.
2015-10-20 / 21:37:44 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ systemctl status -l run-23805.service
● run-23805.service - /usr/bin/find /
Loaded: loaded
Drop-In: /run/systemd/system/run-23805.service.d
└─50-BlockIOWeight.conf, 50-Description.conf, 50-ExecStart.conf
Active: active (running) since Tue 2015-10-20 21:37:44 CEST; 6s ago
Main PID: 23814 (find)
Memory: 12.2M
CPU: 502ms
CGroup: /system.slice/run-23805.service
└─23814 /usr/bin/find /
Oct 20 21:37:45 learner find[23814]: /proc/3/net/raw6
Oct 20 21:37:45 learner find[23814]: /proc/3/net/snmp
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat/rt_cache
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat/arp_cache
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat/ndisc_cache
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat/ip_conntrack
Oct 20 21:37:45 learner find[23814]: /proc/3/net/stat/nf_conntrack
Oct 20 21:37:45 learner find[23814]: /proc/3/net/tcp6
Oct 20 21:37:45 learner find[23814]: /proc/3/net/udp6
2015-10-20 / 21:37:51 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>But, out of the box, graphical applications do not work. I haven&amp;rsquo;t looked, but
it should be doable by giving it the correct environment details.&lt;/p>
&lt;p>Underneath, systemd is using the same &lt;em>&lt;strong>Linux Control Groups&lt;/strong>&lt;/em> to limit
resources for individual applications. So, in cases where you have a
requirement and do not have systemd, or you directly want to make use of
cgroups, it could be easily done with basic cgroups tools like &lt;strong>cgroup-
tools&lt;/strong>.&lt;/p>
&lt;p>With cgroup-tools, I now have a simple cgroups hierarchy set for my current
use case, i.e. Digikam&lt;/p>
&lt;pre>&lt;code>rrs@learner:/var/tmp/Debian-Build/Result$ ls /sys/fs/cgroup/memory/rrs_customCG/
cgroup.clone_children memory.kmem.tcp.limit_in_bytes memory.numa_stat
cgroup.event_control memory.kmem.tcp.max_usage_in_bytes memory.oom_control
cgroup.procs memory.kmem.tcp.usage_in_bytes memory.pressure_level
digikam/ memory.kmem.usage_in_bytes memory.soft_limit_in_bytes
memory.failcnt memory.limit_in_bytes memory.stat
memory.force_empty memory.max_usage_in_bytes memory.swappiness
memory.kmem.failcnt memory.memsw.failcnt memory.usage_in_bytes
memory.kmem.limit_in_bytes memory.memsw.limit_in_bytes memory.use_hierarchy
memory.kmem.max_usage_in_bytes memory.memsw.max_usage_in_bytes notify_on_release
memory.kmem.slabinfo memory.memsw.usage_in_bytes tasks
memory.kmem.tcp.failcnt memory.move_charge_at_immigrate
2015-10-20 / 21:45:38 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ ls /sys/fs/cgroup/memory/rrs_customCG/digikam/
cgroup.clone_children memory.kmem.tcp.max_usage_in_bytes memory.oom_control
cgroup.event_control memory.kmem.tcp.usage_in_bytes memory.pressure_level
cgroup.procs memory.kmem.usage_in_bytes memory.soft_limit_in_bytes
memory.failcnt memory.limit_in_bytes memory.stat
memory.force_empty memory.max_usage_in_bytes memory.swappiness
memory.kmem.failcnt memory.memsw.failcnt memory.usage_in_bytes
memory.kmem.limit_in_bytes memory.memsw.limit_in_bytes memory.use_hierarchy
memory.kmem.max_usage_in_bytes memory.memsw.max_usage_in_bytes notify_on_release
memory.kmem.slabinfo memory.memsw.usage_in_bytes tasks
memory.kmem.tcp.failcnt memory.move_charge_at_immigrate
memory.kmem.tcp.limit_in_bytes memory.numa_stat
2015-10-20 / 21:45:53 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/cpu/rrs_customCG/cpu.shares
1024
2015-10-20 / 21:48:44 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/cpu/rrs_customCG/digikam/cpu.shares
512
2015-10-20 / 21:49:05 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/memory/rrs_customCG/memory.limit_in_bytes
9223372036854771712
2015-10-20 / 22:20:14 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/memory/rrs_customCG/digikam/memory.limit_in_bytes
2764369920
2015-10-20 / 22:20:27 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/blkio/rrs_customCG/blkio.weight
500
2015-10-20 / 21:51:43 ♒♒♒ ☺
rrs@learner:/var/tmp/Debian-Build/Result$ cat /sys/fs/cgroup/blkio/rrs_customCG/digikam/blkio.weight
10
2015-10-20 / 21:51:50 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>The base group, $USER_customCG needs super admin privileges. Which once set
appropriately, allows the user to further self-define sub-groups. And users
can then also define separate limits per sub-group.&lt;/p>
&lt;p>With the resource limitations set in place, my overall experience on very
recent hardware (Intel Haswell Core i7, 8 GiB RAM, 500 GB SSHD, 128 GB SSD)
has improved considerably. It still is not perfect, but it definitely is a
huge improvement over what I had to go through ealire: &lt;em>&lt;strong>A stalled machine
for hours&lt;/strong>&lt;/em>.&lt;/p>
&lt;pre>&lt;code>top - 21:54:38 up 1 day, 6:46, 1 user, load average: 7.22, 7.51, 7.37
Tasks: 299 total, 1 running, 298 sleeping, 0 stopped, 0 zombie
%Cpu0 : 7.1 us, 3.0 sy, 1.0 ni, 11.1 id, 77.8 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 6.0 us, 4.0 sy, 2.0 ni, 49.0 id, 39.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 5.0 us, 2.0 sy, 0.0 ni, 24.8 id, 68.3 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 5.9 us, 5.0 sy, 0.0 ni, 21.8 id, 67.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7908.926 total, 96.449 free, 4634.922 used, 3177.555 buff/cache
MiB Swap: 8579.996 total, 3454.746 free, 5125.250 used. 2753.324 avail Mem
PID to signal/kill [default pid = 8879]
PID PPID nTH USER PR NI S %CPU %MEM TIME+ COMMAND UID
8879 8868 18 rrs 20 0 S 8.2 31.2 37:44.64 digikam 1000
10255 9960 4 rrs 39 19 S 1.0 0.8 19:47.73 tracker-miner-f 1000
10157 9960 7 rrs 20 0 S 0.5 3.0 32:29.76 gnome-shell 1000
7 2 1 root 20 0 S 0.2 0:53.48 rcu_sched 0
401 1 1 root 20 0 S 0.2 1.3 0:54.93 systemd-journal 0
10269 9937 4 rrs 20 0 S 0.2 0.4 2:34.50 gnome-terminal- 1000
15316 1 14 rrs 20 0 S 0.2 3.7 30:05.96 evolution 1000
23777 2 1 root 20 0 S 0.2 0:05.73 kworker/u16:0 0
23814 1 1 root 20 0 D 0.2 0.0 0:02.00 find 0
24049 2 1 root 20 0 S 0.2 0:01.29 kworker/u16:3 0
24052 2 1 root 20 0 S 0.2 0:02.94 kworker/u16:4 0
1 0 1 root 20 0 S 0.1 0:18.24 systemd 0
&lt;/code>&lt;/pre>
&lt;p>The reporting tools may not be correct here. Because from what is being
reported above, I should be having a machine stalled, and heavily paging,
while the kernel scanning its list of processes to find the best process to
kill.&lt;/p>
&lt;p>From this approach of jailing processes, the major side effect I can see is
that the process (Digikam) is now starved of resources and will take much much
much more time than what it would have been usually. But in the usual cases,
it takes up all, and ends up starving (and getting killed) for consuming all
available resources.&lt;/p>
&lt;p>So I guess it is better to be on a balanced resource diet. :-)&lt;/p></description></item><item><title>Laptop Mode Tools 1.68.1</title><link>https://researchut.com/blog/laptop-mode-tools-1_68_1/</link><pubDate>Sun, 27 Sep 2015 04:57:48 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1_68_1/</guid><description>&lt;p>I am please to announce the release of Laptop Mode Tools &lt;strong>1.68.1&lt;/strong>.&lt;/p>
&lt;p>The last release (1.68) was mostly about systemd integration, and so is this
release. There were a couple of bugs reported, and most of them fixed, with
this release. All downstreams are requested to upgrade.&lt;/p>
&lt;p>For RPM packages for Fedora and OpenSUSE (Tumbleweed), please see the
&lt;a href="http://samwel.tk/laptop_mode">homepage.&lt;/a>&lt;/p>
&lt;pre>&lt;code>1.68.1 - Sun Sep 27 14:00:13 IST 2015
* Update details about runtime-pm in manpage
* Revert &amp;quot;Drop out reload&amp;quot;
* Log error more descriptively
* Write to common stderr. Do not hardcode a specific one
* Call lmt-udev in lmt-poll. Don't call the laptop_mode binary directly.
Helps in a lot of housekeeping
* Direct stderr/stdout to journal
* Fix stdout descriptor
* Install the new .timer and poll service
* Use _sbindir for RPM
&lt;/code>&lt;/pre></description></item><item><title>Google Take Action - Encryption</title><link>https://researchut.com/blog/google-take-action-encryption/</link><pubDate>Sat, 12 Sep 2015 07:15:11 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/google-take-action-encryption/</guid><description>&lt;p>So I got an email yesterday from Google&amp;rsquo;s Jess Hemerly, talking about how they
&lt;a href="https://www.google.com/takeaction/issue/encryption/">care about encryption&lt;/a>&lt;/p>
&lt;p>To quote a small snippet of the email:&lt;/p>
&lt;pre>&lt;code>We use locks to keep our homes and our possessions safe offline. But how can we protect our digital things, like photos on a smartphone or email traveling across the web? **[The answer is encryption.](https://takeaction.withgoogle.com/page/m/1439db80/19cdc98/22666ed/3ed584ff/875135400/VEsE/ &amp;quot;http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww%2Efacebook%2Ecom%2FGoogleTakeAction%2Fvideos%2Fvb%2E924932914232399%2F939211039471253%2F&amp;amp;utm_medium=email&amp;amp;utm_source=google&amp;amp;utm_content=2+-+The+answer+is+encryption&amp;amp;utm_campaign=20150910encryption1pm&amp;amp;source=20150910encryption1pm&amp;quot;)**
&lt;/code>&lt;/pre>
&lt;p>To change, it has to start from home. That means, add encryption support to
Gmail. Add encryption to Google Photos. To every service you provide. So that,
if tomorrow, your service is compromised, you don&amp;rsquo;t public our data.&lt;/p>
&lt;p>What all the service providers need to realize, is that it is not the tool
that needs encryption, but the data. You could claim that newer Androids are
safer because encryption is enabled by default. But the data that you are
backing up on your cloud, is not encrypted. It only makes sense to have an
end-to-end encryption, or rather, encryption at source.&lt;/p>
&lt;p>Had you just stacked the interface to have write() transparently call
encrypt() for any and all data, there&amp;rsquo;d be no worry about privacy. But wait,
then how&amp;rsquo;d you munch.&lt;/p></description></item><item><title>Laptop Mode Tools - 1.68</title><link>https://researchut.com/blog/laptop-mode-tools-1_68/</link><pubDate>Thu, 27 Aug 2015 13:39:15 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1_68/</guid><description>&lt;p>I am please to announce the release of Laptop Mode Tools, version 1.68.&lt;/p>
&lt;p>This release is mainly focused on integration with the newer init system,
systemd. Without the help from the awesome Debian systemd maintainers, this
would not have been possible. Thank you folks.&lt;/p>
&lt;p>While the focus now is on systemd, LMT will still support the older SysV Init.&lt;/p>
&lt;p>With this new release, there are some new files: &lt;em>laptop-mode.service, laptop-
mode.timer and lmt-poll.service&lt;/em>. All the files should be documented well
enough for users. &lt;em>lmt-poll.service&lt;/em> is the equivalent of the module &lt;em>battery-
level-polling&lt;/em> , should you need it.&lt;/p>
&lt;p>Filtered git log:&lt;/p>
&lt;pre>&lt;code>1.68 - Thu Aug 27 22:36:43 IST 2015
* Fix all instances for BATTERY_LEVEL_POLLING
* Group kill the polling daemon so that its child process get the same signal
* Release the descriptor explicitly
* Add identifier about who's our parent
* Narrow down our power_supply subsystem event check condition
* Fine tune the .service file
* On my ultrabook, AC as reported as ACAD
* Enhance lmt-udev to better work with systemd
* Add a timer based polling for LMT. It is the equivalent of battery-polling-daemon,
using systemd
* Disable battery level polling by default, because most systems will have systemd running
* Add documentation reference in systemd files
&lt;/code>&lt;/pre>
&lt;p>The tarball is available @ &amp;lt;http://samwel.tk/laptop_mode/tools/downloads
/laptop-mode-tools_1.68.tar.gz&amp;gt;&lt;/p>
&lt;p>The md5 checksum for the tarball is 15edf643990e08deaebebf66b128b270&lt;/p></description></item><item><title>Micro DD meetup</title><link>https://researchut.com/blog/linux-containers-with-systemd/</link><pubDate>Mon, 20 Jul 2015 07:26:35 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-containers-with-systemd/</guid><description>&lt;p>A couple of us DDs met here on the weekend. It is always a fun time, being
part of these meetings. We talked briefly about the status of Cross
Compilation in Debian, on the tools that simplify the process.&lt;/p>
&lt;p>Next we touched upon licensing, discussing the benefits of particular licenses
(BSD, Apache, GPL) from the point of view of the consumer. The consumer being
an individual just wanting to use/improve software, to a consumer who&amp;rsquo;s
building a (free / non-free) product on top of it. I think the overall
conclusion was that there are 2 major licenses at a high level: Ones those
allow you take the code and not give back, and the others which allow you to
take code only if you are ready to share the enhancements back and forward.&lt;/p>
&lt;p>Next we briefly touched upon systemd. Given that I recently spent a good
amount of time talking to the systemd maintainer while fixing bugs in my
software, it was natural for me to steer that topic. At the end, more people
are now enthused to learn the paradigm shift.&lt;/p>
&lt;p>The other topic where we spent time was on Containers. It is impressive to see
how quick, and how many, products have now spun out of cgroups. The topic
moved to cgroups, thanks to systemd, one of the prime consumers of cgroups.
While demonstrating the functionalities of Linux Containers (LXC), I realized
that systemd has a tool in place to serve the same use case.&lt;/p>
&lt;p>So, once back home, I spent some time figuring out the possibility to replace
my lxc setup, with that of systemd-nspawn. Apart from a &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792882">minor
bug&lt;/a>, almost
everything else seems to work find with &lt;em>systemd-nspawn&lt;/em>.&lt;/p>
&lt;p>So, following is the config detail of my container, as used in lxc. And to
replace lxc, I need to fill is almost all of it with systemd-nspawn.&lt;/p>
&lt;pre>&lt;code>rrs@learner:~$ sudo cat /var/lib/lxc/deb-template/config
# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
# CPU
lxc.cgroup.cpuset.cpus = 0,1
lxc.cgroup.cpu.shares = 1234
# Mem
lxc.cgroup.memory.limit_in_bytes = 2000M
lxc.cgroup.memory.soft_limit_in_bytes = 1500M
# Network
lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:0c:c5:d4
lxc.network.flags = up
lxc.network.link = lxcbr0
# Root file system
lxc.rootfs = /var/lib/lxc/deb-template/rootfs
# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
# Container specific configuration
lxc.mount = /var/lib/lxc/deb-template/fstab
lxc.utsname = deb-template
lxc.arch = amd64
# For apt
lxc.mount.entry = /var/cache/apt/archives var/cache/apt/archives none defaults,bind 0 0
lxc.mount.entry = /var/tmp/lxc var/tmp/lxc none defaults,bind 0 0
2015-07-20 / 16:28:58 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>The equivalent of the above, in systemd-nspawn is:&lt;/p>
&lt;pre>&lt;code>sudo systemd-nspawn -n -b --machine deb-template --network-bridge=lxcbr0 --bind /var/cache/apt/archives/
&lt;/code>&lt;/pre>
&lt;p>The only missing bit is CPU and Memory, which I&amp;rsquo;m yet to try, is documented as
doable with the &lt;em>systemctl &amp;ndash;property=&lt;/em> interface&lt;/p>
&lt;pre>&lt;code> --property=
Set a unit property on the scope unit to register for the machine. This only
applies if the machine is run in its own scope unit, i.e. if --keep-unit is not
used. Takes unit property assignments in the same format as systemctl
set-property. This is useful to set memory limits and similar for machines.
&lt;/code>&lt;/pre>
&lt;p>With all this in place, using containers under systemd is a breeze.&lt;/p>
&lt;pre>&lt;code>rrs@learner:~/Community/Packaging/multipath-tools (experimental)$ sudo machinectl list
MACHINE CLASS SERVICE
deb-template container nspawn
1 machines listed.
2015-07-20 / 16:44:07 ♒♒♒ ☺
rrs@learner:~/Community/Packaging/multipath-tools (experimental)$ sudo machinectl status deb-template
deb-template
Since: Mon 2015-07-20 16:13:58 IST; 30min ago
Leader: 9064 (systemd)
Service: nspawn; class container
Root: /var/lib/lxc/deb-template/rootfs
Iface: lxcbr0
Address: 172.16.10.12
fe80::706d:e4ff:fec5:bfc8%3
OS: Debian GNU/Linux stretch/sid
Unit: machine-deb\x2dtemplate.scope
├─9064 /lib/systemd/systemd --system --deserialize 14
└─system.slice
├─systemd-journald.service
│ └─9092 /lib/systemd/systemd-journald
├─ssh.service
│ └─9160 /usr/sbin/sshd -D
└─console-getty.service
├─9166 /bin/login --
├─9171 -bash
└─9226 dhclient host0
Jul 20 16:13:58 learner systemd[1]: Started Container deb-template.
Jul 20 16:13:58 learner systemd[1]: Starting Container deb-template.
2015-07-20 / 16:44:15 ♒♒♒ ☺
&lt;/code>&lt;/pre></description></item><item><title>VirtualBox 5.x</title><link>https://researchut.com/blog/debian-vbox-5/</link><pubDate>Wed, 15 Jul 2015 08:37:33 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/debian-vbox-5/</guid><description>&lt;p>We just pushed VirtualBox 5.0.0 into Debian Experimental. It should land up on
your mirrors very soon.&lt;/p>
&lt;p>Since this is a major release, we are looking for some testing and feedback.
If you use VBox, or have your business depend on it, please give it a test.
For details about what is new in 5.x, please check out the [release
announcement](&lt;a href="http://www.oracle.com/corporate/pressrelease/oracle-vm-">http://www.oracle.com/corporate/pressrelease/oracle-vm-&lt;/a>
virtualbox-5-070915.html)&lt;/p></description></item><item><title>Apport Integration with Debian - GSoC Update</title><link>https://researchut.com/blog/gsoc-apport-for-debian/</link><pubDate>Mon, 06 Jul 2015 03:49:52 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/gsoc-apport-for-debian/</guid><description>&lt;p>For this year&amp;rsquo;s Google Summer of Code, I have been mentoring Yuru Roy Shao, on
&lt;a href="https://wiki.debian.org/SummerOfCode2015/Projects#SummerOfCode2015.2FProjects.2FApportForDebian.Apport_for_Debian">&lt;strong>Integrating Apport with
Debian&lt;/strong>&lt;/a>.
Yuru is a CS student studying at University of Michigan, USA completing his
PhD.&lt;/p>
&lt;p>For around 2+ years, Apport was packaged for Debian, but remained in
Experimental. While we did have a separate (Debian BTS aware) crashdb, the
general concerns (bug spam, too many duplicates etc) were the reason we held
its inclusion.&lt;/p>
&lt;p>With this GSoC, Yuru has been bringing some of the missing integration pieces
of Debian. For example, we are now using debianbts to to talk to the Debian
BTS Server, and fetch bug reports for the user.&lt;/p>
&lt;p>While apport&amp;rsquo;s Bug Report data collection itself is very comprehensive, still
for Debian, it will have the option to use native as well as reportbug. This
will allow us to use the many hooks people have integrated so far with
reportbug. Both Bug Report data collectors will be available.&lt;/p>
&lt;p>Yuru has blogged about his GSoC progress so far,
&lt;a href="http://blog.yurushao.info/2015/07/Debian-Apport-GSoC/">here&lt;/a>. Please do have
a read, and let us know your views. If the travel formalities work out well, I
intend to attend Debconf this year, and can talk in more detail.&lt;/p></description></item><item><title>Laptop Mode Tools 1.67</title><link>https://researchut.com/blog/laptop-mode-tools-167/</link><pubDate>Thu, 02 Jul 2015 08:11:06 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-167/</guid><description>&lt;p>I am pleased to announce the release of &lt;a href="http://samwel.tk/laptop_mode">Laptop Mode
Tools&lt;/a>, version
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/releases/tag/1.67">1.67&lt;/a>.&lt;/p>
&lt;p>This release has many important bug fixes, and everyone is recommended to
upgrade. Of the many, one important fix is to, more reliably check for Device
Mapper based devices, which is common these days with Crypt and LVM.&lt;/p>
&lt;p>For the summary of changes to quote from git log:&lt;/p>
&lt;pre>&lt;code>1.67 - Thu Jul 2 17:05:07 IST 2015
* Relax minimum window size to accomodate low res screens
* Fix variable name to comply with our &amp;quot;constants&amp;quot; assuptions
* Get more aggressive in power saving for Intel HD Audio
* Account Device Mapper devices
* Add swsusp freeze support
* Switch battery-level-polling default to True
* Detect ethernet carrier, early and relibaly
* changes the boolean setting *_ACTIVATE_SATA_POWER to a customizable
*_SATA_POLICY, with backward-compatible defaults and documentation
Thanks Yuir D'Elia
&lt;/code>&lt;/pre>
&lt;p>PS: On a side note, over the years, Linux&amp;rsquo;s power savings functionality has
improved a lot, all thanks to its use in the mobile worlds. At the same time,
because of more companies shipping drivers depending on external firmware,
stability has become less reliable. And to add to that, bare functionality of
devices typically ask for disabling, you know what, LPM.&lt;/p>
&lt;p>So, at the end, the result is the same.&lt;/p></description></item><item><title>Proprietary Medicine</title><link>https://researchut.com/post/222/</link><pubDate>Sun, 28 Jun 2015 09:07:56 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/222/</guid><description>&lt;pre>&lt;code>**http://dictionary.reference.com/cite.html?qh=proprietary%20medicine &amp;amp;ia=ahsmd
proprietary medicine ** _n. _
A medicinal compound whose formula and often mode of manufacture are owned by an individual or a corporation under a trademark or patent.
The American Heritage® Stedman's Medical Dictionary
Copyright (C) 2002, 2001, 1995 by Houghton Mifflin Company. Published by Houghton Mifflin Company.
&lt;/code>&lt;/pre>
&lt;p>This is a topic which has gotten me wondering about what the practices are,
that governments in different regions follow. And on what grounds.&lt;/p>
&lt;p>Witchcraft, Unani, Ayurveda etc&lt;/p>
&lt;p>Sid, Australia Judiciary sentence for Homoeopathy, Own father.&lt;/p></description></item><item><title>Lenovo Yoga 2 13 with Debian</title><link>https://researchut.com/blog/lenovo-yoga-2-13-debian/</link><pubDate>Tue, 19 May 2015 07:55:22 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/lenovo-yoga-2-13-debian/</guid><description>&lt;p>I recently acquired a [Lenovo Yoga 2 13](&lt;a href="http://www.cnet.com/products/lenovo-">http://www.cnet.com/products/lenovo-&lt;/a>
yoga-2-13-inch/). While, at the time, the Yoga 3 was available, I decided to
go for Yoga 2 13. The Yoga 3 comes with the newer Core M Broadwell family,
which, in my opinion, &lt;em>[doesn&amp;rsquo;t really bring any astounding
benefits](&lt;a href="http://www.digitalversus.com/laptop/lenovo-ideapad-">http://www.digitalversus.com/laptop/lenovo-ideapad-&lt;/a>
yoga-2-13-3-p18512/test.html)&lt;/em>.&lt;/p>
&lt;p>The Yoga 2 13 comes in mulitple variants worldwide. Infact these hardware
variations have different effets when run under Linux.&lt;/p>
&lt;p>My varaint of &lt;em>&lt;strong>Yoga 2 13&lt;/strong>&lt;/em> is:&lt;/p>
&lt;pre>&lt;code>**CPU** : Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz
**RAM** : 8 GiB - Occupying 2 slots
Memory Controller Information
Supported Interleave: One-way Interleave
Current Interleave: One-way Interleave
Maximum Memory Module Size: 8192 MB
Maximum Total Memory Size: 16384 MB
Handle 0x0006, DMI type 6, 12 bytes
Handle 0x0007, DMI type 6, 12 bytes
The usual PCI devices:
rrs@learner:~$ **lspci**
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 0b)
00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 4 (rev e4)
00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter
17:37 ♒♒♒ ☺
And the storage devices
Device Model: WDC WD5000M22K-24Z1LT0-SSHD-16GB
Device Model: KINGSTON SM2280S3120G
&lt;/code>&lt;/pre>
&lt;p>_ &lt;strong>Storage&lt;/strong>_&lt;/p>
&lt;p>The drive runs into serious performance problems when its SSHD&amp;rsquo;s NCQ
(mis)feature is under use in Linux &amp;lt;= 4.0.&lt;/p>
&lt;pre>&lt;code>[28974.232550] ata2.00: configured for UDMA/133
[28974.232565] ahci 0000:00:1f.2: port does not support device sleep
[28983.680955] ata1.00: exception Emask 0x10 SAct 0x7fffffff SErr 0x400100 action 0x6 frozen
[28983.681000] ata1.00: irq_stat 0x08000000, interface fatal error
[28983.681027] ata1: SError: { UnrecovData Handshk }
[28983.681052] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.681082] ata1.00: cmd 61/40:00:b8:84:88/05:00:0a:00:00/40 tag 0 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.681152] ata1.00: status: { DRDY }
[28983.681171] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.681202] ata1.00: cmd 61/40:08:f8:89:88/05:00:0a:00:00/40 tag 1 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.681271] ata1.00: status: { DRDY }
[28983.681289] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.681316] ata1.00: cmd 61/40:10:38:8f:88/05:00:0a:00:00/40 tag 2 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.681387] ata1.00: status: { DRDY }
[28983.681407] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.681435] ata1.00: cmd 61/40:18:78:94:88/05:00:0a:00:00/40 tag 3 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697642] ata1.00: status: { DRDY }
[28983.697643] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697646] ata1.00: cmd 61/40:c8:38:65:88/05:00:0a:00:00/40 tag 25 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697647] ata1.00: status: { DRDY }
[28983.697648] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697651] ata1.00: cmd 61/40:d0:78:6a:88/05:00:0a:00:00/40 tag 26 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697651] ata1.00: status: { DRDY }
[28983.697652] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697656] ata1.00: cmd 61/40:d8:b8:6f:88/05:00:0a:00:00/40 tag 27 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697657] ata1.00: status: { DRDY }
[28983.697658] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697661] ata1.00: cmd 61/40:e0:f8:74:88/05:00:0a:00:00/40 tag 28 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697662] ata1.00: status: { DRDY }
[28983.697663] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697666] ata1.00: cmd 61/40:e8:38:7a:88/05:00:0a:00:00/40 tag 29 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697667] ata1.00: status: { DRDY }
[28983.697668] ata1.00: failed command: WRITE FPDMA QUEUED
[28983.697672] ata1.00: cmd 61/40:f0:78:7f:88/05:00:0a:00:00/40 tag 30 ncq 688128 out
res 40/00:3c:78:a9:88/00:00:0a:00:00/40 Emask 0x10 (ATA bus error)
[28983.697672] ata1.00: status: { DRDY }
[28983.697676] ata1: hard resetting link
[28984.017356] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[28984.022612] ata1.00: configured for UDMA/133
[28984.022740] ata1: EH complete
[28991.611732] Suspending console(s) (use no_console_suspend to debug)
[28992.183822] sd 1:0:0:0: [sdb] Synchronizing SCSI cache
[28992.186569] sd 1:0:0:0: [sdb] Stopping disk
[28992.186604] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[28992.189594] sd 0:0:0:0: [sda] Stopping disk
[28992.967426] PM: suspend of devices complete after 1351.349 msecs
[28992.999461] PM: late suspend of devices complete after 31.990 msecs
[28993.000058] ehci-pci 0000:00:1d.0: System wakeup enabled by ACPI
[28993.000306] xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI
[28993.016463] PM: noirq suspend of devices complete after 16.978 msecs
[28993.017024] ACPI: Preparing to enter system sleep state S3
[28993.017349] PM: Saving platform NVS memory
[28993.017357] Disabling non-boot CPUs ...
[28993.017389] intel_pstate CPU 1 exiting
[28993.018727] kvm: disabling virtualization on CPU1
[28993.019320] smpboot: CPU 1 is now offline
[28993.019646] intel_pstate CPU 2 exiting
&lt;/code>&lt;/pre>
&lt;p>In the interim, to overcome this problem, we can force the device to run in
degraded mode. I&amp;rsquo;m not sure if it is really the degraded mode, or the device
was falsely advertised as a 6 GiB capable device. Time will tell, but for now,
force it to run in 3 GiB mode, and so far, I haven&amp;rsquo;t run into the above
mentioned probems. To force 3 GiB speed, apply the following.&lt;/p>
&lt;pre>&lt;code>rrs@learner:~$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-4.0.4+ root=/dev/mapper/sdb_crypt ro cgroup_enable=memory swapaccount=1 rootflags=data=writeback **libata.force=1:3** quiet
16:42 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>And then verify it&amp;hellip; As you can see below, I&amp;rsquo;ve forced it for ata1 because I
want my SSD drive to run at full-speed. I&amp;rsquo;ve done enough I/O, which earlier
resulted in the kernel spitting the SATA errors. With this workaround, the
kernel does not spit any error messages.&lt;/p>
&lt;pre>&lt;code>[ 1.273365] libata version 3.00 loaded.
[ 1.287290] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 4 ports 6 Gbps 0x3 impl SATA mode
[ 1.288238] ata1: FORCE: PHY spd limit set to 3.0Gbps
[ 1.288240] ata1: SATA max UDMA/133 abar m2048@0xb051b000 port 0xb051b100 irq 41
[ 1.288242] ata2: SATA max UDMA/133 abar m2048@0xb051b000 port 0xb051b180 irq 41
[ 1.288244] ata3: DUMMY
[ 1.288245] ata4: DUMMY
[ 1.606971] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[ 1.607906] ata1.00: ATA-9: WDC WD5000M22K-24Z1LT0-SSHD-16GB, 02.01A03, max UDMA/133
[ 1.607910] ata1.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA
[ 1.608856] ata1.00: configured for UDMA/133
[ 1.609106] scsi 0:0:0:0: Direct-Access ATA WDC WD5000M22K-2 1A03 PQ: 0 ANSI: 5
[ 1.927167] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 1.928980] ata2.00: ATA-8: KINGSTON SM2280S3120G, S8FM06.A, max UDMA/133
[ 1.928983] ata2.00: 234441648 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[ 1.929616] ata2.00: configured for UDMA/133
&lt;/code>&lt;/pre>
&lt;p>And the throughput you get out of your WD SATA SSHD drive, with capability set
to 3.0 GiB is:&lt;/p>
&lt;pre>&lt;code>rrs@learner:/media/SSHD/tmp$ while true; do dd if=/dev/zero of=foo.img bs=1M count=20000; sync; rm -rf foo.img; sync; done
20000+0 records in
20000+0 records out
20971520000 bytes (21 GB) copied, 202.014 s, 104 MB/s
20000+0 records in
20000+0 records out
20971520000 bytes (21 GB) copied, 206.111 s, 102 MB/s
&lt;/code>&lt;/pre>
&lt;p>Hannes Reinecke has submitted patches for NCQ enhancements, for Linux 4.1,
&lt;del>which I hope will resolve these problems. Another option is to disable NCQ
for the drive, or else blacklist the make/model in &lt;em>driver/ata/libata-
core.c&lt;/em>&lt;/del>&lt;/p>
&lt;p>By the time I finished this blog entry draft, I had tests to conclude that
this did not look like an NCQ problem. Because in degraded mode too, it runs
with NCQ enabled (check above).&lt;/p>
&lt;pre>&lt;code>rrs@learner:~$ sudo fstrim -vv /media/SSHD
/media/SSHD: 268.2 GiB (287930949632 bytes) trimmed
16:58 ♒♒♒ ☺
rrs@learner:~$ sudo fstrim -vv /
[sudo] password for rrs:
/: 64 GiB (68650749952 bytes) trimmed
16:56 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>Another interesting feature of this drive is support for TRIM / DISCARD. This
drive&amp;rsquo;s FTL accepts the TRIM command. Ofcourse, you need to ensure that you
have discard enabled in all the layers. In my case, SATA + Device Mapper
(Crypt and LVM) + File System (ext4)&lt;/p>
&lt;p>_ &lt;strong>Display&lt;/strong>_&lt;/p>
&lt;p>The overall display of this device is amazing. It is large enough to give you
vibrant look. At 1920x1080 resolution, things look good. The display support
was available out-of-the-box.&lt;/p>
&lt;p>There were some suspend / resume hangs that occured with kernels &amp;lt; 4.x,
during suspend / resume. The issue was root caused and fixed for Linux 4.0.&lt;/p>
&lt;p>You may still notice the following kernel messages, though not problematic to
me so far.&lt;/p>
&lt;pre>&lt;code>[28977.518114] PM: thaw of devices complete after 3607.979 msecs
[28977.590389] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.590582] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.591095] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.591185] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.591368] acpi device:30: Cannot transition to power state D3cold for parent in (unknown)
[28977.591911] pci_bus 0000:01: Allocating resources
[28977.591933] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.592093] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[28977.592401] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
&lt;/code>&lt;/pre>
&lt;p>You may need to disable the Intel Management Engine Interface (mei.ko), incase
you run into suspend/resume problems.&lt;/p>
&lt;pre>&lt;code>rrs@learner:/media/SSHD/tmp$ cat /etc/modprobe.d/intel-mei-blacklist.conf
blacklist mei
blacklist mei-me
17:01 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>You may also run into the following Kernel Oops during suspend/resume. Below,
you see 2 interation of sleep because it first hibernates and then sleeps
(s2both).&lt;/p>
&lt;pre>&lt;code>[ 180.470206] Syncing filesystems ... done.
[ 180.473337] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 180.475210] PM: Marking nosave pages: [mem 0x00000000-0x00000fff]
[ 180.475213] PM: Marking nosave pages: [mem 0x0006f000-0x0006ffff]
[ 180.475215] PM: Marking nosave pages: [mem 0x00088000-0x000fffff]
[ 180.475220] PM: Marking nosave pages: [mem 0x97360000-0x97b5ffff]
[ 180.475274] PM: Marking nosave pages: [mem 0x9c36f000-0x9cffefff]
[ 180.475356] PM: Marking nosave pages: [mem 0x9d000000-0xffffffff]
[ 180.476877] PM: Basic memory bitmaps created
[ 180.477003] PM: Preallocating image memory... done (allocated 380227 pages)
[ 180.851800] PM: Allocated 1520908 kbytes in 0.37 seconds (4110.56 MB/s)
[ 180.851802] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 180.853355] Suspending console(s) (use no_console_suspend to debug)
[ 180.853520] wlan0: deauthenticating from c4:6e:1f:d0:67:26 by local choice (Reason: 3=DEAUTH_LEAVING)
[ 180.864159] cfg80211: Calling CRDA to update world regulatory domain
[ 181.172222] PM: freeze of devices complete after 319.294 msecs
[ 181.196080] ------------[ cut here ]------------
[ 181.196124] WARNING: CPU: 3 PID: 3707 at drivers/gpu/drm/i915/intel_display.c:7904 hsw_enable_pc8+0x659/0x7c0 [i915]()
[ 181.196125] SPLL enabled
[ 181.196159] Modules linked in: rfcomm ctr ccm bnep pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) bridge stp llc xt_conntrack iptable_filter ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack xt_CHECKSUM xt_tcpudp iptable_mangle ip_tables x_tables nls_utf8 nls_cp437 vfat fat rtsx_usb_ms memstick snd_hda_codec_hdmi joydev mousedev hid_sensor_rotation hid_sensor_incl_3d hid_sensor_als hid_sensor_accel_3d hid_sensor_magn_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf industrialio hid_sensor_iio_common iTCO_wdt iTCO_vendor_support hid_multitouch x86_pkg_temp_thermal intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm btusb hid_sensor_hub bluetooth uvcvideo videobuf2_vmalloc videobuf2_memops
[ 181.196203] videobuf2_core v4l2_common videodev media pcspkr evdev mac_hid arc4 psmouse serio_raw efivars i2c_i801 rtl8723be btcoexist rtl8723_common rtl_pci rtlwifi mac80211 snd_soc_rt5640 cfg80211 snd_soc_rl6231 snd_hda_codec_realtek i915 snd_soc_core snd_hda_codec_generic ideapad_laptop ac snd_compress dw_dmac sparse_keymap drm_kms_helper rfkill battery dw_dmac_core snd_hda_intel snd_pcm_dmaengine snd_soc_sst_acpi snd_hda_controller video 8250_dw regmap_i2c snd_hda_codec drm snd_hwdep snd_pcm spi_pxa2xx_platform i2c_designware_platform soc_button_array snd_timer i2c_designware_core snd i2c_algo_bit soundcore shpchp lpc_ich button processor fuse ipv6 autofs4 ext4 crc16 jbd2 mbcache btrfs xor raid6_pq algif_skcipher af_alg dm_crypt dm_mod sg usbhid sd_mod rtsx_usb_sdmmc rtsx_usb crct10dif_pclmul
[ 181.196220] crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd ahci libahci libata xhci_pci ehci_pci xhci_hcd ehci_hcd scsi_mod usbcore usb_common thermal fan thermal_sys hwmon i2c_hid hid i2c_core sdhci_acpi sdhci mmc_core gpio_lynxpoint
[ 181.196224] CPU: 3 PID: 3707 Comm: kworker/u16:7 Tainted: G O 4.0.4+ #14
[ 181.196225] Hardware name: LENOVO 20344/INVALID, BIOS 96CN29WW(V1.15) 10/16/2014
[ 181.196230] Workqueue: events_unbound async_run_entry_fn
[ 181.196233] 0000000000000000 ffffffffa0706f68 ffffffff81522198 ffff880064debc88
[ 181.196235] ffffffff8106c5b1 ffff880251460000 ffff880250f83b68 ffff880250f83b78
[ 181.196237] ffff880250f83800 0000000000000001 ffffffff8106c62a ffffffffa071407c
[ 181.196238] Call Trace:
[ 181.196248] [&amp;lt;ffffffff81522198&amp;gt;] ? dump_stack+0x40/0x50
[ 181.196251] [&amp;lt;ffffffff8106c5b1&amp;gt;] ? warn_slowpath_common+0x81/0xb0
[ 181.196254] [&amp;lt;ffffffff8106c62a&amp;gt;] ? warn_slowpath_fmt+0x4a/0x50
[ 181.196278] [&amp;lt;ffffffffa06ae349&amp;gt;] ? hsw_enable_pc8+0x659/0x7c0 [i915]
[ 181.196289] [&amp;lt;ffffffffa0643ee0&amp;gt;] ? intel_suspend_complete+0xe0/0x6e0 [i915]
[ 181.196300] [&amp;lt;ffffffffa0644501&amp;gt;] ? i915_drm_suspend_late+0x21/0x90 [i915]
[ 181.196311] [&amp;lt;ffffffffa0644690&amp;gt;] ? i915_pm_poweroff_late+0x40/0x40 [i915]
[ 181.196318] [&amp;lt;ffffffff813fa7ba&amp;gt;] ? dpm_run_callback+0x4a/0x100
[ 181.196321] [&amp;lt;ffffffff813fb010&amp;gt;] ? __device_suspend_late+0xa0/0x180
[ 181.196324] [&amp;lt;ffffffff813fb10e&amp;gt;] ? async_suspend_late+0x1e/0xa0
[ 181.196326] [&amp;lt;ffffffff8108b973&amp;gt;] ? async_run_entry_fn+0x43/0x160
[ 181.196330] [&amp;lt;ffffffff81083a5d&amp;gt;] ? process_one_work+0x14d/0x3f0
[ 181.196332] [&amp;lt;ffffffff81084463&amp;gt;] ? worker_thread+0x53/0x480
[ 181.196334] [&amp;lt;ffffffff81084410&amp;gt;] ? rescuer_thread+0x300/0x300
[ 181.196338] [&amp;lt;ffffffff81089191&amp;gt;] ? kthread+0xc1/0xe0
[ 181.196341] [&amp;lt;ffffffff810890d0&amp;gt;] ? kthread_create_on_node+0x180/0x180
[ 181.196346] [&amp;lt;ffffffff81527898&amp;gt;] ? ret_from_fork+0x58/0x90
[ 181.196349] [&amp;lt;ffffffff810890d0&amp;gt;] ? kthread_create_on_node+0x180/0x180
[ 181.196350] ---[ end trace 8e339004db298838 ]---
[ 181.220094] PM: late freeze of devices complete after 47.936 msecs
[ 181.220972] PM: noirq freeze of devices complete after 0.875 msecs
[ 181.221577] ACPI: Preparing to enter system sleep state S4
[ 181.221886] PM: Saving platform NVS memory
[ 181.222702] Disabling non-boot CPUs ...
[ 181.222731] intel_pstate CPU 1 exiting
[ 181.224041] kvm: disabling virtualization on CPU1
[ 181.224680] smpboot: CPU 1 is now offline
[ 181.225121] intel_pstate CPU 2 exiting
[ 181.226407] kvm: disabling virtualization on CPU2
[ 181.227025] smpboot: CPU 2 is now offline
[ 181.227441] intel_pstate CPU 3 exiting
[ 181.227728] Broke affinity for irq 19
[ 181.227747] Broke affinity for irq 41
[ 181.228771] kvm: disabling virtualization on CPU3
[ 181.228793] smpboot: CPU 3 is now offline
[ 181.229624] PM: Creating hibernation image:
[ 181.563651] PM: Need to copy 379053 pages
[ 181.563655] PM: Normal pages needed: 379053 + 1024, available pages: 1697704
[ 182.472910] PM: Hibernation image created (379053 pages copied)
[ 181.232347] PM: Restoring platform NVS memory
[ 181.233171] Enabling non-boot CPUs ...
[ 181.233246] x86: Booting SMP configuration:
[ 181.233248] smpboot: Booting Node 0 Processor 1 APIC 0x1
[ 181.246771] kvm: enabling virtualization on CPU1
[ 181.249339] CPU1 is up
[ 181.249389] smpboot: Booting Node 0 Processor 2 APIC 0x2
[ 181.262313] kvm: enabling virtualization on CPU2
[ 181.264853] CPU2 is up
[ 181.264903] smpboot: Booting Node 0 Processor 3 APIC 0x3
[ 181.277831] kvm: enabling virtualization on CPU3
[ 181.280317] CPU3 is up
[ 181.288471] ACPI: Waking up from system sleep state S4
[ 182.340655] PM: noirq thaw of devices complete after 0.637 msecs
[ 182.378087] PM: early thaw of devices complete after 37.428 msecs
[ 182.378436] rtlwifi: rtlwifi: wireless switch is on
[ 182.451021] rtc_cmos 00:01: System wakeup disabled by ACPI
[ 182.697575] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[ 182.697617] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 182.699248] ata1.00: configured for UDMA/133
[ 182.699911] ata2.00: configured for UDMA/133
[ 182.699917] ahci 0000:00:1f.2: port does not support device sleep
[ 186.059539] PM: thaw of devices complete after 3685.338 msecs
[ 186.134292] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.134479] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.134992] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.135080] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.135266] acpi device:30: Cannot transition to power state D3cold for parent in (unknown)
[ 186.135950] pci_bus 0000:01: Allocating resources
[ 186.135974] pcieport 0000:00:1c.0: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 01] add_size 200000
[ 186.135980] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.136049] pcieport 0000:00:1c.0: res[15]=[mem 0x00100000-0x000fffff 64bit pref] get_res_add_size add_size 200000
[ 186.136072] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0x9fb00000-0x9fcfffff 64bit pref]
[ 186.136174] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 186.136490] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 199.454497] Suspending console(s) (use no_console_suspend to debug)
[ 200.024190] sd 1:0:0:0: [sdb] Synchronizing SCSI cache
[ 200.024356] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[ 200.025359] sd 1:0:0:0: [sdb] Stopping disk
[ 200.028701] sd 0:0:0:0: [sda] Stopping disk
[ 201.106085] PM: suspend of devices complete after 1651.336 msecs
[ 201.106591] ------------[ cut here ]------------
[ 201.106628] WARNING: CPU: 0 PID: 3725 at drivers/gpu/drm/i915/intel_display.c:7904 hsw_enable_pc8+0x659/0x7c0 [i915]()
[ 201.106628] SPLL enabled
[ 201.106656] Modules linked in: rfcomm ctr ccm bnep pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) bridge stp llc xt_conntrack iptable_filter ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack xt_CHECKSUM xt_tcpudp iptable_mangle ip_tables x_tables nls_utf8 nls_cp437 vfat fat rtsx_usb_ms memstick snd_hda_codec_hdmi joydev mousedev hid_sensor_rotation hid_sensor_incl_3d hid_sensor_als hid_sensor_accel_3d hid_sensor_magn_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf industrialio hid_sensor_iio_common iTCO_wdt iTCO_vendor_support hid_multitouch x86_pkg_temp_thermal intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm btusb hid_sensor_hub bluetooth uvcvideo videobuf2_vmalloc videobuf2_memops
[ 201.106694] videobuf2_core v4l2_common videodev media pcspkr evdev mac_hid arc4 psmouse serio_raw efivars i2c_i801 rtl8723be btcoexist rtl8723_common rtl_pci rtlwifi mac80211 snd_soc_rt5640 cfg80211 snd_soc_rl6231 snd_hda_codec_realtek i915 snd_soc_core snd_hda_codec_generic ideapad_laptop ac snd_compress dw_dmac sparse_keymap drm_kms_helper rfkill battery dw_dmac_core snd_hda_intel snd_pcm_dmaengine snd_soc_sst_acpi snd_hda_controller video 8250_dw regmap_i2c snd_hda_codec drm snd_hwdep snd_pcm spi_pxa2xx_platform i2c_designware_platform soc_button_array snd_timer i2c_designware_core snd i2c_algo_bit soundcore shpchp lpc_ich button processor fuse ipv6 autofs4 ext4 crc16 jbd2 mbcache btrfs xor raid6_pq algif_skcipher af_alg dm_crypt dm_mod sg usbhid sd_mod rtsx_usb_sdmmc rtsx_usb crct10dif_pclmul
[ 201.106711] crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd ahci libahci libata xhci_pci ehci_pci xhci_hcd ehci_hcd scsi_mod usbcore usb_common thermal fan thermal_sys hwmon i2c_hid hid i2c_core sdhci_acpi sdhci mmc_core gpio_lynxpoint
[ 201.106714] CPU: 0 PID: 3725 Comm: kworker/u16:25 Tainted: G W O 4.0.4+ #14
[ 201.106715] Hardware name: LENOVO 20344/INVALID, BIOS 96CN29WW(V1.15) 10/16/2014
[ 201.106720] Workqueue: events_unbound async_run_entry_fn
[ 201.106723] 0000000000000000 ffffffffa0706f68 ffffffff81522198 ffff880064dd7c88
[ 201.106725] ffffffff8106c5b1 ffff880251460000 ffff880250f83b68 ffff880250f83b78
[ 201.106727] ffff880250f83800 0000000000000002 ffffffff8106c62a ffffffffa071407c
[ 201.106728] Call Trace:
[ 201.106737] [&amp;lt;ffffffff81522198&amp;gt;] ? dump_stack+0x40/0x50
[ 201.106740] [&amp;lt;ffffffff8106c5b1&amp;gt;] ? warn_slowpath_common+0x81/0xb0
[ 201.106742] [&amp;lt;ffffffff8106c62a&amp;gt;] ? warn_slowpath_fmt+0x4a/0x50
[ 201.106765] [&amp;lt;ffffffffa06ae349&amp;gt;] ? hsw_enable_pc8+0x659/0x7c0 [i915]
[ 201.106776] [&amp;lt;ffffffffa0643ee0&amp;gt;] ? intel_suspend_complete+0xe0/0x6e0 [i915]
[ 201.106786] [&amp;lt;ffffffffa0644501&amp;gt;] ? i915_drm_suspend_late+0x21/0x90 [i915]
[ 201.106797] [&amp;lt;ffffffffa0644690&amp;gt;] ? i915_pm_poweroff_late+0x40/0x40 [i915]
[ 201.106802] [&amp;lt;ffffffff813fa7ba&amp;gt;] ? dpm_run_callback+0x4a/0x100
[ 201.106805] [&amp;lt;ffffffff813fb010&amp;gt;] ? __device_suspend_late+0xa0/0x180
[ 201.106809] [&amp;lt;ffffffff813fb10e&amp;gt;] ? async_suspend_late+0x1e/0xa0
[ 201.106811] [&amp;lt;ffffffff8108b973&amp;gt;] ? async_run_entry_fn+0x43/0x160
[ 201.106813] [&amp;lt;ffffffff81083a5d&amp;gt;] ? process_one_work+0x14d/0x3f0
[ 201.106815] [&amp;lt;ffffffff81084463&amp;gt;] ? worker_thread+0x53/0x480
[ 201.106818] [&amp;lt;ffffffff81084410&amp;gt;] ? rescuer_thread+0x300/0x300
[ 201.106821] [&amp;lt;ffffffff81089191&amp;gt;] ? kthread+0xc1/0xe0
[ 201.106824] [&amp;lt;ffffffff810890d0&amp;gt;] ? kthread_create_on_node+0x180/0x180
[ 201.106827] [&amp;lt;ffffffff81527898&amp;gt;] ? ret_from_fork+0x58/0x90
[ 201.106830] [&amp;lt;ffffffff810890d0&amp;gt;] ? kthread_create_on_node+0x180/0x180
[ 201.106832] ---[ end trace 8e339004db298839 ]---
[ 201.130052] PM: late suspend of devices complete after 23.960 msecs
[ 201.130725] ehci-pci 0000:00:1d.0: System wakeup enabled by ACPI
[ 201.130885] xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI
[ 201.146986] PM: noirq suspend of devices complete after 16.930 msecs
[ 201.147591] ACPI: Preparing to enter system sleep state S3
[ 201.147942] PM: Saving platform NVS memory
[ 201.147948] Disabling non-boot CPUs ...
[ 201.147999] intel_pstate CPU 1 exiting
[ 201.149324] kvm: disabling virtualization on CPU1
[ 201.149337] smpboot: CPU 1 is now offline
[ 201.149640] intel_pstate CPU 2 exiting
[ 201.151096] kvm: disabling virtualization on CPU2
[ 201.151108] smpboot: CPU 2 is now offline
[ 201.152017] intel_pstate CPU 3 exiting
[ 201.153250] kvm: disabling virtualization on CPU3
[ 201.153256] smpboot: CPU 3 is now offline
[ 201.156229] ACPI: Low-level resume complete
[ 201.156307] PM: Restoring platform NVS memory
[ 201.160033] CPU0 microcode updated early to revision 0x1c, date = 2014-07-03
[ 201.160190] Enabling non-boot CPUs ...
[ 201.160241] x86: Booting SMP configuration:
[ 201.160243] smpboot: Booting Node 0 Processor 1 APIC 0x1
[ 201.172665] kvm: enabling virtualization on CPU1
[ 201.174982] CPU1 is up
[ 201.175013] smpboot: Booting Node 0 Processor 2 APIC 0x2
[ 201.187569] CPU2 microcode updated early to revision 0x1c, date = 2014-07-03
[ 201.188796] kvm: enabling virtualization on CPU2
[ 201.191130] CPU2 is up
[ 201.191158] smpboot: Booting Node 0 Processor 3 APIC 0x3
[ 201.203297] kvm: enabling virtualization on CPU3
[ 201.205679] CPU3 is up
[ 201.210414] ACPI: Waking up from system sleep state S3
[ 201.224617] ehci-pci 0000:00:1d.0: System wakeup disabled by ACPI
[ 201.332523] xhci_hcd 0000:00:14.0: System wakeup disabled by ACPI
[ 201.332634] PM: noirq resume of devices complete after 121.623 msecs
[ 201.372718] PM: early resume of devices complete after 40.058 msecs
[ 201.372892] rtlwifi: rtlwifi: wireless switch is on
[ 201.373270] sd 0:0:0:0: [sda] Starting disk
[ 201.373271] sd 1:0:0:0: [sdb] Starting disk
[ 201.445954] rtc_cmos 00:01: System wakeup disabled by ACPI
[ 201.692510] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 201.694719] ata2.00: configured for UDMA/133
[ 201.694724] ahci 0000:00:1f.2: port does not support device sleep
[ 201.836724] usb 2-4: reset high-speed USB device number 2 using xhci_hcd
[ 201.890158] psmouse serio1: synaptics: queried max coordinates: x [..5702], y [..4730]
[ 201.930768] psmouse serio1: synaptics: queried min coordinates: x [1242..], y [1124..]
[ 202.076784] usb 2-5: reset full-speed USB device number 3 using xhci_hcd
[ 202.205100] usb 2-5: ep 0x2 - rounding interval to 64 microframes, ep desc says 80 microframes
[ 202.316799] usb 2-7: reset full-speed USB device number 5 using xhci_hcd
[ 202.444945] usb 2-7: No LPM exit latency info found, disabling LPM.
[ 202.556817] usb 2-8: reset full-speed USB device number 6 using xhci_hcd
[ 202.908691] usb 2-6: reset high-speed USB device number 4 using xhci_hcd
[ 203.932602] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[ 204.044890] ata1.00: configured for UDMA/133
[ 206.228698] PM: resume of devices complete after 4855.892 msecs
[ 206.380738] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.383152] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.385775] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.388066] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.390415] acpi device:30: Cannot transition to power state D3cold for parent in (unknown)
[ 206.393078] pci_bus 0000:01: Allocating resources
[ 206.393098] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.395470] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.397927] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[ 206.518516] Restarting kernel threads ... done.
[ 206.518812] PM: Basic memory bitmaps freed
[ 206.518816] Restarting tasks ... done.
&lt;/code>&lt;/pre>
&lt;p>There is one more occasional Kernel Oops (below), which I believe again has to
do with Intel.&lt;/p>
&lt;pre>&lt;code>[ 8770.745396] ------------[ cut here ]------------
[ 8770.745441] WARNING: CPU: 0 PID: 7206 at drivers/gpu/drm/i915/intel_display.c:9756 intel_check_page_flip+0xd2/0xe0 [i915]()
[ 8770.745444] Kicking stuck page flip: queued at 466186, now 466191
[ 8770.745445] Modules linked in: cpuid rfcomm ctr ccm bnep pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) bridge stp llc xt_conntrack iptable_filter ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack xt_CHECKSUM xt_tcpudp iptable_mangle ip_tables x_tables nls_utf8 nls_cp437 vfat fat rtsx_usb_ms memstick snd_hda_codec_hdmi joydev mousedev hid_sensor_rotation hid_sensor_incl_3d hid_sensor_als hid_sensor_accel_3d hid_sensor_magn_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf industrialio hid_sensor_iio_common iTCO_wdt iTCO_vendor_support hid_multitouch x86_pkg_temp_thermal intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm btusb hid_sensor_hub bluetooth uvcvideo videobuf2_vmalloc videobuf2_memops
[ 8770.745484] videobuf2_core v4l2_common videodev media pcspkr evdev mac_hid arc4 psmouse serio_raw efivars i2c_i801 rtl8723be btcoexist rtl8723_common rtl_pci rtlwifi mac80211 snd_soc_rt5640 cfg80211 snd_soc_rl6231 snd_hda_codec_realtek i915 snd_soc_core snd_hda_codec_generic ideapad_laptop ac snd_compress dw_dmac sparse_keymap drm_kms_helper rfkill battery dw_dmac_core snd_hda_intel snd_pcm_dmaengine snd_soc_sst_acpi snd_hda_controller video 8250_dw regmap_i2c snd_hda_codec drm snd_hwdep snd_pcm spi_pxa2xx_platform i2c_designware_platform soc_button_array snd_timer i2c_designware_core snd i2c_algo_bit soundcore shpchp lpc_ich button processor fuse ipv6 autofs4 ext4 crc16 jbd2 mbcache btrfs xor raid6_pq algif_skcipher af_alg dm_crypt dm_mod sg usbhid sd_mod rtsx_usb_sdmmc rtsx_usb crct10dif_pclmul
[ 8770.745536] crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd ahci libahci libata xhci_pci ehci_pci xhci_hcd ehci_hcd scsi_mod usbcore usb_common thermal fan thermal_sys hwmon i2c_hid hid i2c_core sdhci_acpi sdhci mmc_core gpio_lynxpoint
[ 8770.745561] CPU: 0 PID: 7206 Comm: icedove Tainted: G W O 4.0.4+ #14
[ 8770.745563] Hardware name: LENOVO 20344/INVALID, BIOS 96CN29WW(V1.15) 10/16/2014
[ 8770.745565] 0000000000000000 ffffffffa0706f68 ffffffff81522198 ffff88025f203dc8
[ 8770.745569] ffffffff8106c5b1 ffff880250f83800 ffff880254dcc000 0000000000000000
[ 8770.745572] 0000000000000000 0000000000000000 ffffffff8106c62a ffffffffa0709d50
[ 8770.745575] Call Trace:
[ 8770.745577] &amp;lt;IRQ&amp;gt; [&amp;lt;ffffffff81522198&amp;gt;] ? dump_stack+0x40/0x50
[ 8770.745592] [&amp;lt;ffffffff8106c5b1&amp;gt;] ? warn_slowpath_common+0x81/0xb0
[ 8770.745595] [&amp;lt;ffffffff8106c62a&amp;gt;] ? warn_slowpath_fmt+0x4a/0x50
[ 8770.745616] [&amp;lt;ffffffffa06a0bb3&amp;gt;] ? __intel_pageflip_stall_check+0x113/0x120 [i915]
[ 8770.745634] [&amp;lt;ffffffffa06af042&amp;gt;] ? intel_check_page_flip+0xd2/0xe0 [i915]
[ 8770.745652] [&amp;lt;ffffffffa067cde1&amp;gt;] ? ironlake_irq_handler+0x2e1/0x1010 [i915]
[ 8770.745657] [&amp;lt;ffffffff81092d1a&amp;gt;] ? check_preempt_curr+0x5a/0xa0
[ 8770.745663] [&amp;lt;ffffffff812d66c2&amp;gt;] ? timerqueue_del+0x22/0x70
[ 8770.745668] [&amp;lt;ffffffff810bb7d5&amp;gt;] ? handle_irq_event_percpu+0x75/0x190
[ 8770.745672] [&amp;lt;ffffffff8101b945&amp;gt;] ? read_tsc+0x5/0x10
[ 8770.745676] [&amp;lt;ffffffff810bb928&amp;gt;] ? handle_irq_event+0x38/0x50
[ 8770.745680] [&amp;lt;ffffffff810be841&amp;gt;] ? handle_edge_irq+0x71/0x120
[ 8770.745685] [&amp;lt;ffffffff810153bd&amp;gt;] ? handle_irq+0x1d/0x30
[ 8770.745689] [&amp;lt;ffffffff8152a866&amp;gt;] ? do_IRQ+0x46/0xe0
[ 8770.745694] [&amp;lt;ffffffff8152866d&amp;gt;] ? common_interrupt+0x6d/0x6d
[ 8770.745695] &amp;lt;EOI&amp;gt; [&amp;lt;ffffffff8152794d&amp;gt;] ? system_call_fastpath+0x16/0x1b
[ 8770.745701] ---[ end trace 8e339004db29883a ]---
&lt;/code>&lt;/pre>
&lt;p>&lt;em>&lt;strong>Network&lt;/strong>&lt;/em>&lt;/p>
&lt;p>In my case, the laptop came with the Realtek Wireless device (details above in
lspci output). Note: The machine has no wired interface.&lt;/p>
&lt;p>While the Intel Wifi devices shipped with this laptop have their own share of
problems, this device (rtl8723be) works out of the box. But only for a while.
There is no certain pattern on what triggers the bug, but once triggered, the
network just freezes. Nothing is logged.&lt;/p>
&lt;p>If your Yoga 2 13 came with the RTL chip, the following workaround may help
avoid the network issues.&lt;/p>
&lt;pre>&lt;code>rrs@learner:/media/SSHD/tmp$ cat /etc/modprobe.d/rtl8723be.conf
options rtl8723be fwlps=0
17:06 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>MCE&lt;/p>
&lt;p>Almost every boot, eventually, the kernel reports MCE errors. Not something I
understand well, but so far, it hasn&amp;rsquo;t caused any visible issues. And from
what I have googled so far,
&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=1082211">nobody&lt;/a>
&lt;a href="http://forums.fedoraforum.org/showthread.php?t=299533">seems&lt;/a>
&lt;a href="https://bbs.archlinux.org/viewtopic.php?id=188479">to&lt;/a>
&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=1152717">have&lt;/a>
[fixed](&lt;a href="https://forums.lenovo.com/t5/Linux-Discussion/G50-70-arch-linux-mce-">https://forums.lenovo.com/t5/Linux-Discussion/G50-70-arch-linux-mce-&lt;/a>
Processor-Context-Corrupt-after-wakeup/td-p/1843132)
[it](&lt;a href="https://forums.lenovo.com/t5/Linux-Discussion/BUG-BIOS-ACPI-">https://forums.lenovo.com/t5/Linux-Discussion/BUG-BIOS-ACPI-&lt;/a>
issues/m-p/1774245) [anywhere](&lt;a href="http://h30434.www3.hp.com/t5/Notebook-Hardware">http://h30434.www3.hp.com/t5/Notebook-Hardware&lt;/a>
/HP-Pavilion-Laptop-Machine-Check-Error-on-Linux-when-Waking/td-p/3552461)&lt;/p>
&lt;p>So, with fingers crossed, lets just hope this never translates into a real
problem.&lt;/p>
&lt;p>What the kernel reports of the CPU&amp;rsquo;s capabilities.&lt;/p>
&lt;pre>&lt;code>[ 0.041496] mce: CPU supports 7 MCE banks
[ 299.540930] mce: [Hardware Error]: Machine check events logged
&lt;/code>&lt;/pre>
&lt;p>The MCE logs extracted from the buffer.&lt;/p>
&lt;pre>&lt;code>mcelog: failed to prefill DIMM database from DMI data
Hardware event. This is not a software error.
MCE 0
CPU 0 BANK 5
MISC 38a0000086 ADDR fef81880
TIME 1432455005 Sun May 24 13:40:05 2015
MCG status:
MCi status:
Error overflow
Uncorrected error
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: corrected filtering (some unreported errors in same region)
Generic CACHE Level-2 Generic Error
STATUS ee0000000040110a MCGSTATUS 0
MCGCAP c07 APICID 0 SOCKETID 0
CPUID Vendor Intel Family 6 Model 69
Hardware event. This is not a software error.
MCE 1
CPU 0 BANK 6
MISC 78a0000086 ADDR fef81780
TIME 1432455005 Sun May 24 13:40:05 2015
MCG status:
MCi status:
Uncorrected error
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: corrected filtering (some unreported errors in same region)
Generic CACHE Level-2 Generic Error
STATUS ae0000000040110a MCGSTATUS 0
MCGCAP c07 APICID 0 SOCKETID 0
CPUID Vendor Intel Family 6 Model 69
Hardware event. This is not a software error.
MCE 2
CPU 0 BANK 5
MISC 38a0000086 ADDR fef81880
TIME 1432455114 Sun May 24 13:41:54 2015
MCG status:
MCi status:
Error overflow
Uncorrected error
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: corrected filtering (some unreported errors in same region)
Generic CACHE Level-2 Generic Error
STATUS ee0000000040110a MCGSTATUS 0
MCGCAP c07 APICID 0 SOCKETID 0
CPUID Vendor Intel Family 6 Model 69
Hardware event. This is not a software error.
MCE 3
CPU 0 BANK 6
MISC 78a0000086 ADDR fef81780
TIME 1432455114 Sun May 24 13:41:54 2015
MCG status:
MCi status:
Uncorrected error
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: corrected filtering (some unreported errors in same region)
Generic CACHE Level-2 Generic Error
STATUS ae0000000040110a MCGSTATUS 0
MCGCAP c07 APICID 0 SOCKETID 0
CPUID Vendor Intel Family 6 Model 69
&lt;/code>&lt;/pre></description></item><item><title>Drupal maintenance with Drush</title><link>https://researchut.com/blog/drupal-drush-sky/</link><pubDate>Thu, 14 May 2015 09:10:14 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/drupal-drush-sky/</guid><description>&lt;p>Another of my articles for self. Writing it down on the website is much better
than pushing it on a 3rd party social site. Your data is yours.&lt;/p>
&lt;p>My site runs on Drupal. Given I&amp;rsquo;m not a web designer, it is not my core area.
Thus I&amp;rsquo;ve always wanted to have minimal engagement with it. My practices have
paid me well so far. And I should thank all the free tools that help do that.
I like to keep a running snapshot of my website on my local laptop, to keep it
handy when trying anything new. This means that the setup has to be almost
identical to what is running remotely.&lt;/p>
&lt;p>Thanks to Drush, managing Drupal is very easy. It allows me to easily try to
out changes and push them from &lt;strong>dev = &amp;gt; staging =&amp;gt; live&lt;/strong> withtout too much
effort. It also helps me control the environment well. And since the whole
transport is over SSH, no separate exceptions are required.&lt;/p>
&lt;p>For long, the theme on my site had some issues. The taxonomy terms did not
have proper spacing. See &lt;a href="https://www.drupal.org/node/1856814">bug&lt;/a> for
details.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Drupal-Sky-Theme-Before.png" alt="">&lt;/p>
&lt;p>With the &lt;a href="https://www.drupal.org/node/1856814#comment-9921244">fix&lt;/a>, this
transformed into:&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Drupal-Sky-Theme-After.png" alt="">&lt;/p>
&lt;p>I wish Drush had support for revision control. Or maybe it already has, and I
need to check ? Bug Fixes and Customizations would have been well recorded
with a revision control system.&lt;/p></description></item><item><title>Gitolite and Gitweb</title><link>https://researchut.com/post/219/</link><pubDate>Wed, 13 May 2015 04:29:27 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/219/</guid><description>&lt;p>This article is for self, so that I don&amp;rsquo;t again forget the specifics. The last
time I did the same setup, it wasn&amp;rsquo;t very important in terms of security.
gitolite(3) + gitweb can give an impressive git tool with very simple user
acls. After you setup gitolite, ensure that the umask value in gitolite is
approriate, i.e. the gitolite group has r-x privilege. This is needed for the
web view. Add your apache user to the gitolite group. With the umask changes,
and the group association, apache&amp;rsquo;s user will now be able to read gitolite
repos.&lt;/p>
&lt;p>Now, imagine a repo setting like the following:&lt;/p>
&lt;pre>&lt;code>repo virtualbox
RW+ = admin
R = gitweb
&lt;/code>&lt;/pre>
&lt;p>This allows &amp;lsquo;R&amp;rsquo;ead for gitweb. But by Unix ACLs, now even www-data will have
&amp;lsquo;RX&amp;rsquo; on all (the ones created after the UMASK) the repositories.&lt;/p>
&lt;pre>&lt;code>rrs@chutzpah:~$ sudo ls -l /var/lib/gitolite3/repositories/
[sudo] password for rrs:
total 20
drwxr-x--- 7 gitolite3 gitolite3 4096 May 12 17:13 foo.git
drwx------ 8 gitolite3 gitolite3 4096 May 13 12:06 gitolite-admin.git
drwxr-x--- 7 gitolite3 gitolite3 4096 May 13 12:06 linux.git
drwx------ 7 gitolite3 gitolite3 4096 May 12 16:38 testing.git
drwxr-x--- 7 gitolite3 gitolite3 4096 May 12 17:20 virtualbox.git
13:10 ♒♒♒ ☺
&lt;/code>&lt;/pre>
&lt;p>But just www-data. No other users. Because for &amp;lsquo;O&amp;rsquo;, there is no &amp;lsquo;rwx&amp;rsquo;. And
below shows gitolite&amp;rsquo;s ACL in picture&amp;hellip;&lt;/p>
&lt;pre>&lt;code>test@chutzpah:~$ git clone gitolite3@chutzpah:virtualbox
Cloning into 'virtualbox'...
Enter passphrase for key '/home/test/.ssh/id_rsa':
FATAL: R any virtualbox test DENIED by fallthru
(or you mis-spelled the reponame)
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
&lt;/code>&lt;/pre></description></item><item><title>Debian GNU/Hurd on VirtualBox</title><link>https://researchut.com/blog/debian-hurd-on-virtualbox/</link><pubDate>Sun, 01 Feb 2015 05:51:20 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/debian-hurd-on-virtualbox/</guid><description>&lt;p>One of the great things about Debian is the wide range of kernels it
&lt;del>supports&lt;/del> can run. This gives the user the flexibility to not spend time on
the common userland stuff. For example, most apps, package management and
system admin tasks are common across all Debian platforms.&lt;/p>
&lt;p>These platforms may not be optimal at par to Linux, but still, &lt;strong>choice is
good&lt;/strong>.&lt;/p>
&lt;p>For long, I had used Debian GNU/Hurd, only on a KVM hypervisor. Recently being
involved in VirtualBox maintenance, I&amp;rsquo;ve almost beeing using VirtualBox for
all my virtualization tasks. So it was time to try out Hurd on VirtualBox.&lt;/p>
&lt;p>All praises to the work the Debian Hurd team has put, it just works
wonderfully.&lt;/p>
&lt;p>To try out Hurd on VirtualBox:&lt;/p>
&lt;ol>
&lt;li>You could download ready to use VirtualBox images from &lt;a href="https://people.debian.org/~sthibault/hurd-i386/">here&lt;/a>.&lt;/li>
&lt;li>These are raw images. For VirtualBox, I&amp;rsquo;d recommend you convert the image to VDI format.
1.
rrs@learner:~/VirtualBox VMs$ VBoxManage convertdd debian-hurd-20150105.img debian-hurd-20150105.vdi &amp;ndash;format VDI
Converting from raw image file=&amp;ldquo;debian-hurd-20150105.img&amp;rdquo; to file=&amp;ldquo;debian-hurd-20150105.vdi&amp;rdquo;&amp;hellip;
Creating dynamic image with size 3146776576 bytes (3001MB)&amp;hellip;&lt;/li>
&lt;/ol>
&lt;pre>&lt;code>2. The VDI format may help in with some of the goodies VirtualBox has to offer, like efficient snapshots.
&lt;/code>&lt;/pre>
&lt;ol start="3">
&lt;li>The rest remains the same. You need to configure the VM just as else. Currently supported arch is x86 only, so make the selections accordingly.&lt;/li>
&lt;li>The final VM config may look something like the following screenshot.
1. &lt;img src="https://researchut.com/images/hurd-vbox.jpg" alt="">&lt;/li>
&lt;li>And here&amp;rsquo;s the result in a &lt;a href="http://youtu.be/K5RmNAGmucI">video&lt;/a> captured on VirtualBox running Debian GNU/Hurd.&lt;/li>
&lt;/ol></description></item><item><title>Apport in Debian</title><link>https://researchut.com/blog/debian-apport-help/</link><pubDate>Wed, 14 Jan 2015 05:47:57 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/debian-apport-help/</guid><description>&lt;p>Looking at the &lt;a href="https://packages.qa.debian.org/a/apport.html">PTS&lt;/a> entries, I
realized that it has been more than 2 yrs, since I pushed the first Apport
packages into Debian.&lt;/p>
&lt;p>We have talked about it [in the past](&lt;a href="http://www.researchut.com/blog/report-">http://www.researchut.com/blog/report-&lt;/a>
bugs-with-apport-3), and do not see a direct need for apport yet. That is one
reason why it still resides (and will continue to) in Experimental.&lt;/p>
&lt;p>Even though not used as a bug reporting tool, Apport can still be a great tool
for (end) users to detect crashes. It can also be used to find further details
about program crashes and pointers to look further.&lt;/p>
&lt;p>This post is a call for help if there is anybody, who&amp;rsquo;d be interested to work
on maintaining Apport in Debian. Most work include maintaining new upstream
releases, and porting the Debian CrashDB to newer versions, as and when
necessary.&lt;/p>
&lt;p>As said above, it is not going to be a bug reporting tool, but rather a bug
monitoring tool.&lt;/p></description></item><item><title>apt-offline 1.6</title><link>https://researchut.com/blog/apt-offline-16/</link><pubDate>Wed, 14 Jan 2015 05:32:07 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-16/</guid><description>&lt;p>I am pleased to announce the release of apt-offline - 1.6&lt;/p>
&lt;p>This release is mostly a bug fix release, which every user should upgrade to.
It also fixes a major bug in the way we limited the validation of GPG
integrity, for the APT repository lists ( &lt;strong>Thank you Paul Wise&lt;/strong> ).&lt;/p>
&lt;p>Also, In the last release, we migrated from custom magic library to the
python shipped ctype python-magic library. That allowed some bugs to creep,
and hopefully now, all those bugs should be fixed. A big thanks to &lt;strong>Roland
Summers&lt;/strong> for his bug reports and continuous feedback.&lt;/p>
&lt;p>_ &lt;strong>What is apt-offline ?&lt;/strong>_&lt;/p>
&lt;pre>&lt;code>Description-en: offline APT package manager
apt-offline is an Offline APT Package Manager.
.
apt-offline can fully update and upgrade an APT based distribution without
connecting to the network, all of it transparent to APT.
.
apt-offline can be used to generate a signature on a machine (with no network).
This signature contains all download information required for the APT database
system. This signature file can be used on another machine connected to the
internet (which need not be a Debian box and can even be running windows) to
download the updates.
The downloaded data will contain all updates in a format understood by APT and
this data can be used by apt-offline to update the non-networked machine.
.
apt-offline can also fetch bug reports and make them available offline.
&lt;/code>&lt;/pre>
&lt;p>Debian changelog for the 1.6 release.&lt;/p>
&lt;pre>&lt;code>apt-offline (1.6) experimental; urgency=medium
* [2a4a7f1] Don't abuse exception handlers.
Thanks to R-Sommer
* [afc51b3] MIME type for a deb package.
Thanks to R-Sommer
* [ec2d539] Also include debian-archive-keyring.
Thanks to Hans-Christoph Steiner (Closes: #748082)
* [dc602ac] Update MIME type for .gpg
* [c4f9b71] Cycle through possible apt keyrings.
Thanks to Paul Wise (Closes: #747163)
* [de0fe4d] Clarify manpage for install
* [b5e1075] Update manpage with some doc about argparse positional
values to arguments
* [c22d64d] Port is data type integer.
Thanks to Roland Sommer
* [67edebe] autodetect release name
* [5803141] Disable python-apt support
-- Ritesh Raj Sarraf &amp;lt;rrs@debian.org&amp;gt; Wed, 14 Jan 2015 15:34:45 +0530
&lt;/code>&lt;/pre>
&lt;p>[1] &lt;a href="https://alioth.debian.org/projects/apt-offline/">https://alioth.debian.org/projects/apt-offline/&lt;/a>&lt;/p></description></item><item><title>What firmware</title><link>https://researchut.com/blog/what-firmware/</link><pubDate>Mon, 12 Jan 2015 14:04:57 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/what-firmware/</guid><description>&lt;p>Dear Lazy Web,&lt;/p>
&lt;p>I have an [HP Envy J104TS](&lt;a href="http://www8.hp.com/us/en/ads/envy-">http://www8.hp.com/us/en/ads/envy-&lt;/a>
touchsmart-15/specs.html) laptop. Recently I saw an interesting message in the
kernel log.&lt;/p>
&lt;p>[99360.969652] [Firmware Bug]: battery: (dis)charge rate invalid.&lt;/p>
&lt;p>Does anybody know what firmware is it referring to here ? I don&amp;rsquo;t think the
current set of firmwares shiped by linux are involved in battery related
information. Is it the BIOS ?&lt;/p>
&lt;pre>&lt;code>[95474.561491] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[95474.803578] r8169 0000:0f:00.0 eth0: link down
[95474.803627] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[95474.933797] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[95477.111599] wlan0: authenticate with 00:03:7f:fe:00:02
[95477.127389] wlan0: send auth to 00:03:7f:fe:00:02 (try 1/3)
[95477.129315] wlan0: authenticated
[95477.131352] wlan0: associate with 00:03:7f:fe:00:02 (try 1/3)
[95477.133605] wlan0: RX AssocResp from 00:03:7f:fe:00:02 (capab=0x411 status=0 aid=3)
[95477.133686] wlan0: associated
[95477.133703] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[99125.123138] device vethNLAABF entered promiscuous mode
[99125.123377] IPv6: ADDRCONF(NETDEV_UP): vethNLAABF: link is not ready
[99125.188568] IPv6: ADDRCONF(NETDEV_CHANGE): vethNLAABF: link becomes ready
[99125.188615] lxcbr0: port 1(vethNLAABF) entered forwarding state
[99125.188631] lxcbr0: port 1(vethNLAABF) entered forwarding state
[99140.239301] lxcbr0: port 1(vethNLAABF) entered forwarding state
**[99360.969652] [Firmware Bug]: battery: (dis)charge rate invalid.**
[99361.729291] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[99361.864205] EXT4-fs (dm-2): re-mounted. Opts: errors=remount-ro,data=writeback,commit=0
[99361.905210] EXT4-fs (sda6): re-mounted. Opts: data=ordered,commit=0
[102236.267648] lxcbr0: port 1(vethNLAABF) entered disabled state
[102236.556452] lxcbr0: port 1(vethNLAABF) entered disabled state
[102236.557476] device vethNLAABF left promiscuous mode
[102236.557483] lxcbr0: port 1(vethNLAABF) entered disabled state
&lt;/code>&lt;/pre></description></item><item><title>Linux Containers and Productization</title><link>https://researchut.com/blog/linux-containers-2014/</link><pubDate>Fri, 26 Dec 2014 12:16:40 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-containers-2014/</guid><description>&lt;p>Linux has improved many many things over the last couple of years. Of the many
improvements, the one that I&amp;rsquo;ve started leveraging the most today, are Control
Groups.&lt;/p>
&lt;p>In the past, when there was a need to build a prototype for a solution, we
needed hardware.&lt;/p>
&lt;p>Then came the virtualization richness to Linux. It came in 2 major flavors,
KVM ( &lt;strong>Full Virtualization&lt;/strong> ) and Xen ( &lt;strong>Para Virtualization&lt;/strong> ). Over the
years, the difference of para vs full, for both the implementations, is almost
none. KVM now has support for Para-Virtualizaiton, with para-virtualized
drviers for most resource intensive tasks, like network and I/O. Similarly,
Xen has Full Virtualization support with the help of Qemu-KVM.&lt;/p>
&lt;p>But, if you had to build a prototype implementation comprising of a multi node
setup, virtualization could still be resource hungry. Otherwise too, if your
focus was an application (say like a web framework), virtualization was an
overkill.&lt;/p>
&lt;p>All thanks to Linux Containers, prototyping applicaiton based solutions, is
now a breeze in Linux. The &lt;a href="https://linuxcontainers.org/">LXC project&lt;/a> is very
well designed, and well balanced, in terms of features (as compared to the
recently introduced Docker implementation).&lt;/p>
&lt;p>From an application&amp;rsquo;s point of view, linux containers provide virtualization
for namespace, network and resources. Thus making more than 90% of your
application&amp;rsquo;s needs fulfilled. For some apps, where a dependency on the kernel
is needed, linux containers will not serve the need.&lt;/p>
&lt;p>Beyond the defaults provided by the distribution, I like to create a base
container with my customizations, as a template. This allows me to quickly
create environements, without too much housekeeping to do for the initial
setup.&lt;/p>
&lt;p>My base config, looks like:&lt;/p>
&lt;pre>&lt;code>_rrs@learner:~$ sudo cat /var/lib/lxc/deb-template/config
[sudo] password for rrs:
# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
# CPU
lxc.cgroup.cpuset.cpus = 0,1
lxc.cgroup.cpu.shares = 1234
# Mem
lxc.cgroup.memory.limit_in_bytes = 2000M
lxc.cgroup.memory.soft_limit_in_bytes = 1500M
# Network
lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:0c:c5:d4
lxc.network.flags = up
lxc.network.link = lxcbr0
# Root file system
lxc.rootfs = /var/lib/lxc/deb-template/rootfs
# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
# Container specific configuration
lxc.mount = /var/lib/lxc/deb-template/fstab
lxc.utsname = deb-template
lxc.arch = amd64
# For apt
lxc.mount.entry = /var/cache/apt/archives var/cache/apt/archives none defaults,bind 0 0
23:07 ♒♒♒ ☺
rrs@learner:~$_
&lt;/code>&lt;/pre>
&lt;p>Some of the important settings to have in the templace are the mount point, to
point to your local apt cache, and CPU and Memory limits.&lt;/p>
&lt;p>If there was one feature request to ask the LXC developers, I&amp;rsquo;d ask them to
provide a util-lxc tools suite. Currently, to know the memory (soft/hard)
allocation for the container, one needs to do the following:&lt;/p>
&lt;pre>&lt;code>rrs@learner:/sys/fs/cgroup/memory/lxc/deb-template$ cat memory.soft_limit_in_bytes memory.limit_in_bytes
1572864000
2097152000
23:21 ♒♒♒ ☺
rrs@learner:/sys/fs/cgroup/memory/lxc/deb-template$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1572864000/1024/1024
1500
quit
23:21 ♒♒♒ ☺
rrs@learner:/sys/fs/cgroup/memory/lxc/deb-template$
&lt;/code>&lt;/pre>
&lt;p>Tools like lxc-cpuinfo, lxc-free would be much better.&lt;/p>
&lt;p>Finally, there&amp;rsquo;s been a lot of buzz about Docker. Docker is an alternate
product offering, like LXC, for Linux Containers. From what I have briefly
looked at, docker doesn&amp;rsquo;t seem to be providing any ground breaking new
interface than what is already possible with LXC. It does take all the tidbit
tools, and presents you with a unified docker interface. But other than that,
I couldn&amp;rsquo;t find it much appealing. And the assumption that the profiles should
be pulled off the internet (Github ?) is not very exciting. I am hoping they
do have other options, where dependence on the network is not really required.&lt;/p></description></item><item><title>Linux Desktop in 2014</title><link>https://researchut.com/blog/linux-desktop-2014/</link><pubDate>Fri, 26 Dec 2014 11:32:01 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-desktop-2014/</guid><description>&lt;p>We are almost at the end of 2014. While 2014 has been a year with many mixed
experiences, I think it does warrant one blog entry ;-)&lt;/p>
&lt;p>Recently, I&amp;rsquo;ve again started spending more time on Linux products / solutions,
than spending time focused on a specfic subsystem. This change has been good.
It has allowed me to re-cap all the advancements that have happened in the
Linux world, umm&amp;hellip; in the last 5 years.&lt;/p>
&lt;p>Once upon a time, the Linux kernel
&lt;a href="https://bugzilla.kernel.org/show_bug.cgi?id=12309">sucked&lt;/a> on the Desktop. It
led to many desktop improvement related initiatives. Many accepted in kernel,
while others stood as it is (out-of-tree) still as of today. Over the years,
there are many people that advocate for such out-of-tree features, for example
the -ck patchset, claiming it has better performance. Most of the times, these
are patches not carried by your distribution vendor, which leads you to
alternate sources, if you want to try. Having some spare time, I tried the
&lt;a href="http://www.alternativekernel.ml/">Alternative Kernel&lt;/a> project. It is nothing
but a bunch of patchsets, on top of the stock kernel.&lt;/p>
&lt;p>After trying it out, I must say that these patchsets are out-of-tree, for
good. I hardly could make out any performance gain. But I did notice a
considerable increase in the power consumption. On my stock Debian kernel, the
power consumption lies around 15-18 W. That increased to 20+ W on the
alternate kernels. I guess most advocates for the out-of-tree patchsets, only
measure the 1-2% performance gain, where as completely neglect the fact that
that kernel sleeps less often.&lt;/p>
&lt;p>But back to the generic Linux kernel performance problem&amp;hellip;&amp;hellip;&lt;/p>
&lt;p>Recently, in the last 2 years, the performance suckiness of the Linux kernel
is hardly noticed. So what changed ?&lt;/p>
&lt;p>The last couple of years have seen a rise in high capacity RAM, at affordable
consumer price. &lt;em>8 - 16&lt;/em> GiB of RAM is common on laptops these days.&lt;/p>
&lt;p>If you go and look at the sucky bug report linked above, it is marked as
closed, justified Working as Designed. The core problem with the bug reported,
has to do with slow media. The Linux scheduler is (in?)efficient. It works
hard to give you the best throughput and performance (for server workloads).
I/O threads are a high priority task in the Linux kernel. Now map this scene
to the typical Linux desktop. If you end up with doing too much buffered I/O,
thus exhausting all your available cache, and trigger paging, you are in for
some sweet experience.&lt;/p>
&lt;p>Given that the kernel highly priotizes I/O tasks, and if your underneath
persistent storage device is slow (which is common if you have an external USB
disk, or even an internal rotating magnetic disk), you end up blocking all
your &lt;strong>CPU cycles&lt;/strong> against the slow media. Which further leads to no
available CPU cycles for your other desktop tasks. Hence, when you do I/O at
such level, you find your desktop go terribly sluggish.&lt;/p>
&lt;p>It is not that your CPU is slow or in-capable. It is just that all your CPU
slices are &lt;strong>blocked&lt;/strong>. Blocked waiting for your &lt;em>write()&lt;/em> to report a
completion.&lt;/p>
&lt;p>&lt;strong>So what exactly changed that we don &amp;rsquo;t notice that problem any more ????&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>_ &lt;em>RAM&lt;/em>_ - Increase in RAM has led to more I/O be accommodated in cache. The best way to see this in action is to do a copy of a large file, something almost equivalent to the amount of RAM you have. But make sure it is less than the overall amount. For example, if you have 4 GiB of RAM, try copying a file of size 3.5 GiB in your graphical file manager. And at the same time, on the terminal, keep triggering the &lt;code>**sync**&lt;/code> command. Check how long does it take for the &lt;code>sync&lt;/code> to complete. By being able to cache large amount of data, the Linux kernel has been better at improving the overall performance &lt;strong>in the eyes of the user&lt;/strong>.&lt;/li>
&lt;li>_ &lt;em>File System&lt;/em>_ - But RAM is not alone. The file system has played a very important role too. Earlier, with ext3 file system, we had a commit interval of (5?) 30 seconds. That led to the above mentioned &lt;code>**sync**&lt;/code> equivalent to get triggered every 30 secs. It was a safety measure to ensure, that at worst, you lose 30 secs worth of data. But it did hinder performance. With ext4, came delayed allocation. Delayed Allocation allowed the write() to return immediate while the data was in cache, and deferred the task of actual write() to the file system. This allowed for the allocator to find the best contiguous slot for the data to be written. Thus it improved the file system. It also brough corruption for some of the apps. :-)&lt;/li>
&lt;li>_ &lt;em>Solid State Drives&lt;/em>_ - The file system and RAM alone aren &amp;rsquo;t the sole factors that led to the drastic improvement in the overall experience of the Linux desktop. If you read through the bug report linked in this article, you&amp;rsquo;ll find the core root cause to be &lt;strong>slow persistent storage devices&lt;/strong>. Could the allocator have been improved (like Windows) to not be so pressing of the Linux desktop ? Maybe, yes. But that was a decision for the kernel devs and they believed (and believe) to keep those numbers to minimum. Thus for I/O, as for today, you have 3 schedulers and for CPU, just 1. What dramatically improved the overall Linux Desktop performance was the general availability of solid state devices. These device are real fast, which in effect made the &lt;em>write()&lt;/em> calls return immediate, and did not block the CPU.&lt;/li>
&lt;/ol>
&lt;p>So, it was the advancement in both hardware and software that led to better
overall desktop performance. Does the above mentioned bug still exist ? Yes.
Its just that it is much harder to trigger it now. You&amp;rsquo;ll have to ensure that
you max out your cache and trigger paging. And then try to do ask for some CPU
cycles.&lt;/p>
&lt;p>But it wasn&amp;rsquo;t that back then we didn&amp;rsquo;t use Linux on the desktop / laptop. It
sure did suck more than, say, Windows. But hey, sometimes we have to eat our
own dog food. Even then, there sure were some efforts to overcome the then
limitations. The first and obvious one is the out-of-tree patchset. But ther
were also some other efforts to improve the situation.&lt;/p>
&lt;p>The first such effort, that I can recollect, was ulatency. With Linux adding
support for Control Groups, there were multiple avenues open on how to tackle
and tame the resource starvation problem. The crux of the problem was that
Linux gave way too much priority to the I/O tasks. I still wish Linux has a
profile mechanism, where in on the kernel command line, we could specify what
profile should Linux boot into. Anyways, with ulatency, we saw improvements in
the Linux Desktop experience. ulatency had in-built policies to whitelist /
blacklist a set of profiles. For example, KDE was a profile. Thus, ulatency
would club all KDE processes into a group and give that group a higher
precedence to ensure that it had its fair share of CPU cycles.&lt;/p>
&lt;p>Today, at almost the end of 2014, there are many more consumer of Linux&amp;rsquo;s
control groups. Prominent names would be: LXC and systemd.&lt;/p>
&lt;p>ulatency has hardly seen much development in the last year. Probably it is
time for systemd to take over.&lt;/p>
&lt;p>systemd is expected to bring lots of features to the Linux world, thus
bridging the (many) gap Linux has had on the desktop. It makes extensive use
of Control Groups for a variety of (good) reasons, which has led it to be a
linux-only product. I think it should have never marketed itself as the
&lt;strong>init&lt;/strong> daemon. It rather fits better when called as the &lt;strong>System Management
Daemon.&lt;/strong>&lt;/p>
&lt;p>The path to Linux Desktop looks much brighter in 2015 and beyond thanks to all
the advancements that have happened so far. The other important players, who
should be thanked are Mobile and Low Latency products (Android, ChromeBook),
whose engagement to productize Linux has led to better features overall.&lt;/p></description></item><item><title>Laptop Mode Tools 1.66</title><link>https://researchut.com/blog/laptop-mode-tools-1-66/</link><pubDate>Sat, 27 Sep 2014 05:09:30 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1-66/</guid><description>&lt;p>I am pleased to announce the release of &lt;a href="http://samwel.tk/laptop_mode">&lt;strong>Laptop Mode
Tools&lt;/strong>&lt;/a> at version &lt;strong>1.66&lt;/strong>.&lt;/p>
&lt;p>This release fixes an important bug in the way Laptop Mode Tools is invoked.
Users, now when disable it in the config file, the tool will be disabled.
Thanks to &lt;strong>bendlas&lt;/strong> @github for narrowing it down. The GUI configuration
tool has been improved, thanks to &lt;strong>Juan&lt;/strong>. And there is a new power saving
module for users with ATI Radeon cards. Thanks to &lt;strong>M. Ziebell&lt;/strong> for
submitting the patch.&lt;/p>
&lt;p>Laptop Mode Tools development can be tracked @
&lt;a href="https://github.com/rickysarraf/laptop-mode-tools/">GitHub&lt;/a>&lt;/p>
&lt;p>![](/images/LMT New GUI.jpg)&lt;/p></description></item><item><title>apt-offline 1.5</title><link>https://researchut.com/blog/apt-offline-15/</link><pubDate>Mon, 15 Sep 2014 14:17:12 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-15/</guid><description>&lt;p>I am very pleased to announce the release of apt-offline, version 1.5.&lt;/p>
&lt;p>In version 1.4, the offline bug report functionality had to be dropped. In
version 1.5, it is back again. apt-offline now uses the new Debian native BTS
library. Thanks to its developers, this library is much more slim and neat.
The only catch is that it depends on the SOAPpy library which currently is not
stock in Python. If you run apt-offline of Debian, you may not have to worry
as I will add a Recommends on that package. For users using it on Microsoft
Windows, please ensure that you have the SOAPpy library installed. It is
available on pypi.&lt;/p>
&lt;p>The old bundled magic library has been replaced with the version of python
magic library that Debian ships. This library is derived from the file package
and is portable on almost all Unixes. For Debian users, there will be a
Recommends on it too.&lt;/p>
&lt;p>There were also a bunch of old, outstanding, and annoying bugs that have been
fixed in this release. For a full list of changes, please refer to the git
logs.&lt;/p>
&lt;p>With this release, apt-offline should be in good shape for the Jessie release.&lt;/p>
&lt;p>apt-offline is available on Alioth @ &lt;a href="https://alioth.debian.org/projects/apt-">https://alioth.debian.org/projects/apt-&lt;/a>
offline/&lt;/p></description></item><item><title>apt-offline 1.4</title><link>https://researchut.com/blog/apt-offline-14/</link><pubDate>Sun, 31 Aug 2014 12:41:18 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-14/</guid><description>&lt;p>apt-offline 1.4 has been released [1]. This is a minor bug fix release. In
fact, one feature, offline bug reports (&amp;ndash;bug-reports), has been dropped for
now.&lt;/p>
&lt;p>The Debian BTS interface seems to have changed over time and the older
debianbts.py module (that used the CGI interface) does not seem to work
anymore. The current debbugs.py module seems to have switched to the SOAP
interface.&lt;/p>
&lt;p>There are a lot of changes going on personally, I just haven&amp;rsquo;t had the time to
spend. If anyone would like to help, please reach out to me. We need to use
the new debbugs.py module. And it should be cross-platform.&lt;/p>
&lt;p>Also, thanks to Hans-Christoph Steiner for providing the bash completion
script.&lt;/p>
&lt;p>[1] &lt;a href="https://alioth.debian.org/projects/apt-offline/">https://alioth.debian.org/projects/apt-offline/&lt;/a>&lt;/p></description></item><item><title>Fibre Channel over Ethernet</title><link>https://researchut.com/blog/debian-fcoe-status/</link><pubDate>Sun, 29 Jun 2014 06:24:57 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/debian-fcoe-status/</guid><description>&lt;p>&lt;strong>Fibre Channel over Ethernet&lt;/strong> ( &lt;strong>FCoE&lt;/strong> ) is a &lt;a href="http://en.wikipedia.org/wiki/Computer_network" title="Computer network">computer
network&lt;/a>
technology that encapsulates &lt;a href="http://en.wikipedia.org/wiki/Fibre_Channel" title="Fibre Channel">Fibre
Channel&lt;/a> frames
over &lt;a href="http://en.wikipedia.org/wiki/Ethernet" title="Ethernet">Ethernet&lt;/a> networks.
This allows Fibre Channel to use &lt;a href="http://en.wikipedia.org/wiki/10_Gigabit_Ethernet" title="10 Gigabit
Ethernet">10 Gigabit
Ethernet&lt;/a> networks (or higher speeds) while preserving the Fibre Channel
protocol. The specification was part of the &lt;a href="http://en.wikipedia.org/wiki/International_Committee_for_Information_Technology_Standards" title="International Committee for Information Technology Standards">International Committee for
Information Technology
Standards&lt;/a> T11 FC-BB-5
standard published in 2009 (As descripted on Wikipedia)&lt;/p>
&lt;p>I just orphaned the FCoE packages for Debian. I don&amp;rsquo;t really have the time and
enthusiasm to maintain FCoE any more. The packages may not be in top notch
shape, but FCoE as a technology, itself did not see many takers. The popcon
stats are low.&lt;/p>
&lt;p>In case anyone is interested to takeover the maintenance, there is a &lt;a href="https://alioth.debian.org/projects/pkg-fcoe/">pkg-
fcoe&lt;/a> group on alioth. There are
4 packages that build the stack:
&lt;a href="http://packages.qa.debian.org/l/lldpad.html">lldpad&lt;/a>,
&lt;a href="http://packages.qa.debian.org/libh/libhbaapi.html">libhbaapi&lt;/a>,
&lt;a href="http://packages.qa.debian.org/libh/libhbalinux.html">libhbalinux&lt;/a> and &lt;a href="http://packages.qa.debian.org/f/fcoe-utils.html">fcoe-
utils&lt;/a>.&lt;/p></description></item><item><title>Laptop Mode Tools 1.65</title><link>https://researchut.com/blog/laptop-mode-tools-1-65/</link><pubDate>Wed, 18 Jun 2014 10:39:35 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1-65/</guid><description>&lt;p>I am very pleased to announce the release of &lt;strong>Laptop Mode Tools&lt;/strong> , at
version &lt;strong>1.65&lt;/strong>&lt;/p>
&lt;p>This release took a toll given things have been changing for me, both
personally and professionally. &lt;strong>1.64&lt;/strong> was released on September 1st, 2013.
So it was a full 9 month period, of which a good 2-3 months were
procrastination. That said, this release has some pretty good bug fixes and I
urge all distribution packagers to push it to their repositories soon. While I
&amp;rsquo;d thank all contributors who have helped make this release, a special thank
you to &lt;strong>Stefan Huber&lt;/strong>. Stefan found/fixed many issues, did the messy code
clean up etc.. Thank you.&lt;/p>
&lt;p>Worthy changes are mentioned below. For full details, please refer to the git
commit logs.&lt;/p>
&lt;p>1.65 - Wed Jun 18 19:22:35 IST 2014&lt;br>
* fix grep error on missing $device/uevent&lt;br>
* ethernet: replace sysfs/enabled by &amp;lsquo;ip link down&amp;rsquo;&lt;br>
* wireless-iwl-power: sysfs attr enbable -&amp;gt; enabled&lt;br>
* wireless-iwl-power: Add iwlwifi support&lt;br>
* Use Runtime Power Managemet Framework is more robust now. &lt;em>&lt;strong>Deprecates module&lt;br>
usb-autosuspend&lt;/strong>&lt;/em>&lt;br>
* Fix multiple hibernate issue&lt;br>
* When resuming, run LMT in force initialization mode&lt;br>
* Add module for Intel PState driver&lt;br>
* GUI: Implement suspend/hibernate interface&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/LMT_CONF_TOOL.jpg" alt="">&lt;/p></description></item><item><title>Basis B1</title><link>https://researchut.com/blog/basis-b1/</link><pubDate>Tue, 22 Apr 2014 15:32:32 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/basis-b1/</guid><description>&lt;p>&lt;img src="https://researchut.com/images/Basis%20IMG_20140423_004242.jpg" alt="">&lt;/p>
&lt;p>Starting yesterday, I am a happy user of the &lt;a href="http://www.mybasis.com">Basis B1 (Carbon Edition) Smart
Watch&lt;/a>&lt;/p>
&lt;p>The company recently announced being acquired by Intel. Overall I like the
watch. The price is steep, but if you care of a watch like that, you may as
well try Basis. In case you want to go through the details, there&amp;rsquo;s a&lt;/p>
&lt;p>pretty comprehensive review
&lt;a href="http://www.dcrainmaker.com/2013/07/basis-b1-review.html">here&lt;/a>.&lt;/p>
&lt;p>Since I&amp;rsquo;ve been wearing it for just over 24hrs, there&amp;rsquo;s not much data to
showcase a trend. But the device was impressively precise in monitoring my
sleep.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Screenshot_2014-04-23-00-52-20.png" alt="">&lt;/p>
&lt;p>Pain points - For now, sync is the core of the pains. You need either a Mac or
a Windows PC. I have a Windows 7 VM with USB Passthru, but that doesn&amp;rsquo;t work.
There&amp;rsquo;s also an option to sync over mobile (iOS and Android). That again does
not work for my Chinese Mobile Handset running MIUI.&lt;/p></description></item><item><title>Laptop Mode Tools 1.64</title><link>https://researchut.com/blog/laptop-mode-tools-1-64/</link><pubDate>Sun, 01 Sep 2013 04:16:01 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-1-64/</guid><description>&lt;p>I just released &lt;strong>Laptop Mode Tools&lt;/strong> @ version &lt;strong>1.64&lt;/strong>. And am pleased to
introduce the new graphical utility to toggle individual power saving modules
in the package.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/LMT_GUI.jpg" alt="">&lt;/p>
&lt;p>The GUI is written using the &lt;strong>PyQT&lt;/strong> Toolkit and the options in the GUI are
generated at runtime, based on the list of available power saving modules.&lt;/p>
&lt;p>Apart from the GUI configuration tool, this release also includes some bug
fixes:&lt;/p>
&lt;ul>
&lt;li>Don&amp;rsquo;t touch USB Controller power settings. The individual devices, when plugged in, while on battery, inherit the power settings from the USB controller&lt;/li>
&lt;li>start-stop-programs: add support for systemd. Thanks to Alexander Mezin&lt;/li>
&lt;li>Replace hardcoded path to udevadm with &amp;ldquo;which udevadm&amp;rdquo;. Thanks to Alexander Mezin&lt;/li>
&lt;li>Honor .conf files only. Thanks to Sven Köhler&lt;/li>
&lt;li>Make &amp;lsquo;/usr/lib&amp;rsquo; path configurable. This is especially useful for systems that use /usr/lib64, or /lib64 directly. Thanks to Nicolas Braud-Santoni&lt;/li>
&lt;li>Don&amp;rsquo;t call killall with the -g argument. Thanks to Murray Campbell&lt;/li>
&lt;li>Fix RPM Spec file build errors&lt;/li>
&lt;/ul>
&lt;p>The Debian package will follow soon. I don&amp;rsquo;t intend to introduce a new package
for the GUI tool because the source is hardly 200 lines. So the dependencies
(pyqt packages) will go as &lt;strong>Recommeds&lt;/strong> or &lt;strong>Suggests&lt;/strong>&lt;/p></description></item><item><title>Power consumption on Linux 3.10</title><link>https://researchut.com/blog/linux-3-10-power-consumption/</link><pubDate>Tue, 23 Jul 2013 16:08:19 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/linux-3-10-power-consumption/</guid><description>&lt;p>The power consumption on the Linux kernel 3.10 is pretty bad.&lt;/p>
&lt;p>On kernel 3.10, with the follwing config, the PowerTop results are:&lt;/p>
&lt;p>&lt;em>#&lt;/em>&lt;/p>
&lt;p>&lt;em># Timers subsystem&lt;/em>&lt;/p>
&lt;p>&lt;em>#&lt;/em>&lt;/p>
&lt;p>&lt;em>CONFIG_TICK_ONESHOT=y&lt;/em>&lt;/p>
&lt;p>&lt;em>CONFIG_NO_HZ_COMMON=y&lt;/em>&lt;/p>
&lt;p>&lt;em># CONFIG_HZ_PERIODIC is not set&lt;/em>&lt;/p>
&lt;p>&lt;em>CONFIG_NO_HZ_IDLE=y&lt;/em>&lt;/p>
&lt;p>&lt;em># CONFIG_NO_HZ_FULL is not set&lt;/em>&lt;/p>
&lt;p>&lt;em>CONFIG_NO_HZ=y&lt;/em>&lt;/p>
&lt;p>&lt;em>CONFIG_HIGH_RES_TIMERS=y&lt;/em>&lt;/p>
&lt;p>PowerTOP v2.0 Overview Idle stats Frequency stats Device stats
Tunables&lt;/p>
&lt;p>The battery reports a discharge rate of &lt;em>&lt;strong>28.0 W&lt;/strong>&lt;/em>&lt;/p>
&lt;p>The estimated remaining time is 23 minutes&lt;/p>
&lt;p>Summary: 1785.5 wakeups/second, 0.0 GPU ops/second, 0.0 VFS ops/sec and 22.1%
CPU use&lt;/p>
&lt;p>Power est. Usage Events/s Category Description&lt;/p>
&lt;p>16.3 W 2915 rpm Device Laptop fan&lt;/p>
&lt;p>5.11 W 100.0% Device USB device: WALTON
Primo-X1 Primo-X1&lt;/p>
&lt;p>1.70 W 33.3% Device Display backlight&lt;/p>
&lt;p>849 mW 33.3% Device Display backlight&lt;/p>
&lt;p>425 mW 86.0 ms/s 330.7 Process /usr/bin/konsole&lt;/p>
&lt;p>316 mW 63.9 ms/s 66.1 Process /usr/bin/plasma-desktop&lt;/p>
&lt;p>142 mW 28.6 ms/s 396.8 Process /usr/bin/X :0 -auth
/var/run/lightdm/root/:0 -nolisten tcp vt7&lt;/p>
&lt;p>64.1 mW 13.0 ms/s 198.4 Process kwin -session
101261418fe3000136103713100000053880000_13746081&lt;/p>
&lt;p>53.6 mW 10.8 ms/s 0.00 Process powertop&lt;/p>
&lt;p>35.9 mW 7.3 ms/s 66.1 Process
/usr/lib/chromium/chromium &amp;ndash;type=plugin &amp;ndash;plugin-path=/usr/li&lt;/p>
&lt;p>24.3 mW 4.9 ms/s 396.8 Interrupt PS/2 Touchpad /
Keyboard / Mouse&lt;/p>
&lt;p>6.92 mW 1.4 ms/s 0.00 Interrupt [48] i915&lt;/p>
&lt;p>5.94 mW 1.2 ms/s 66.1 Interrupt [9] RCU(softirq)&lt;/p>
&lt;p>3.98 mW 0.8 ms/s 0.00 kWork flush_to_ldisc&lt;/p>
&lt;p>3.78 mW 0.8 ms/s 66.1 Process [ksoftirqd/2]&lt;/p>
&lt;p>3.33 mW 673.3 us/s 66.1 Process [rcu_sched]&lt;/p>
&lt;p>1.80 mW 363.1 us/s 66.1 Interrupt [1] timer(softirq)&lt;/p>
&lt;p>1.79 mW 363.0 us/s 0.00 Process [ksoftirqd/4]&lt;/p>
&lt;p>Where as on the 3.9 kernel:&lt;/p>
&lt;p>The battery reports a discharge rate of &lt;em>&lt;strong>13.2 W&lt;/strong>&lt;/em>&lt;/p>
&lt;p>The estimated remaining time is 43 minutes&lt;/p>
&lt;p>Summary: 611.5 wakeups/second, 0.0 GPU ops/second, 0.0 VFS ops/sec and 14.2%
CPU use&lt;/p>
&lt;p>Power est. Usage Events/s Category Description&lt;/p>
&lt;p>14.0 W 2722 rpm Device Laptop fan&lt;/p>
&lt;p>1.72 W 33.3% Device Display backlight&lt;/p>
&lt;p>862 mW 33.3% Device Display backlight&lt;/p>
&lt;p>255 mW 65.7 ms/s 58.0 Process /usr/bin/plasma-desktop&lt;/p>
&lt;p>91.9 mW 23.7 ms/s 27.5 Process
/usr/lib/chromium/chromium &amp;ndash;type=renderer &amp;ndash;lang=en-US &amp;ndash;forc&lt;/p>
&lt;p>60.1 mW 15.5 ms/s 96.1 Process
/usr/lib/chromium/chromium &amp;ndash;type=plugin &amp;ndash;plugin-path=/usr/li&lt;/p>
&lt;p>25.0 mW 6.4 ms/s 25.1 Process kwin -session
101261418fe3000136103713100000053880000_13746094&lt;/p>
&lt;p>21.5 mW 5.6 ms/s 34.2 Process /usr/bin/X :0 -auth
/var/run/lightdm/root/:0 -nolisten tcp vt7&lt;/p>
&lt;p>13.1 mW 3.4 ms/s 5.6 Process /usr/bin/konsole&lt;/p>
&lt;p>9.82 mW 2.5 ms/s 53.7 Process [irq/48-iwlwifi]&lt;/p>
&lt;p>9.11 mW 2.4 ms/s 2.2 Process /usr/bin/knemo&lt;/p>
&lt;p>8.62 mW 2.2 ms/s 12.3 Process
/usr/lib/chromium/chromium &amp;ndash;password-store=detect&lt;/p>
&lt;p>8.32 mW 2.1 ms/s 45.5 Interrupt [48] iwlwifi&lt;/p>
&lt;p>6.96 mW 1.8 ms/s 35.3 Interrupt [7] sched(softirq)&lt;/p>
&lt;p>5.13 mW 1.3 ms/s 57.1 Interrupt [47] i915&lt;/p>
&lt;p>4.24 mW 1.1 ms/s 0.4 Process powertop&lt;/p>
&lt;p>3.38 mW 0.9 ms/s 1.5 Timer tcp_keepalive_timer&lt;/p>
&lt;p>2.85 mW 0.7 ms/s 11.9 Process /usr/sbin/mysqld
&amp;ndash;basedir=/usr &amp;ndash;datadir=/var/lib/mysql &amp;ndash;plu&lt;/p></description></item><item><title>I am so indebted to the community</title><link>https://researchut.com/blog/indebted-to-community/</link><pubDate>Fri, 01 Mar 2013 13:37:20 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/indebted-to-community/</guid><description>&lt;p>As someone who learned computers on his own, I always acknowledged the value
that the Free Software movement has brought. The accessibility of these
topics, which are only supposed to be part of text books and schools, is
available for anyone and everyone who has the resource and passion to do it.&lt;/p>
&lt;p>But this past week, 2 things made me pretty impressed with the maturity and
quality of work that we do.&lt;/p>
&lt;p>rrs@zan:/media$ sudo lvextend -r -v -L 100G /dev/BackupDisk/DATA&lt;/p>
&lt;pre>&lt;code>Finding volume group BackupDisk
Executing: fsadm --verbose check /dev/BackupDisk/DATA
&lt;/code>&lt;/pre>
&lt;p>fsadm: &amp;ldquo;ext4&amp;rdquo; filesystem found on &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo;&lt;/p>
&lt;p>fsadm: Skipping filesystem check for device &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo; as
the filesystem is mounted on /media/DATA&lt;/p>
&lt;pre>&lt;code>fsadm failed: 3
Archiving volume group &amp;quot;BackupDisk&amp;quot; metadata (seqno 7).
&lt;/code>&lt;/pre>
&lt;p>Extending logical volume DATA to 100.00 GiB&lt;/p>
&lt;pre>&lt;code>Found volume group &amp;quot;BackupDisk&amp;quot;
Found volume group &amp;quot;BackupDisk&amp;quot;
Loading BackupDisk-DATA table (254:2)
Suspending BackupDisk-DATA (254:2) with device flush
Found volume group &amp;quot;BackupDisk&amp;quot;
Resuming BackupDisk-DATA (254:2)
Creating volume group backup &amp;quot;/etc/lvm/backup/BackupDisk&amp;quot; (seqno 8).
&lt;/code>&lt;/pre>
&lt;p>Logical volume DATA successfully resized&lt;/p>
&lt;pre>&lt;code>Executing: fsadm --verbose resize /dev/BackupDisk/DATA 104857600K
&lt;/code>&lt;/pre>
&lt;p>fsadm: &amp;ldquo;ext4&amp;rdquo; filesystem found on &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo;&lt;/p>
&lt;p>fsadm: Device &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo; size is 107374182400 bytes&lt;/p>
&lt;p>fsadm: Parsing tune2fs -l &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo;&lt;/p>
&lt;p>fsadm: Resizing filesystem on device &amp;ldquo;/dev/mapper/BackupDisk-DATA&amp;rdquo; to
107374182400 bytes (13107200 -&amp;gt; 26214400 blocks of 4096 bytes)&lt;/p>
&lt;p>fsadm: Executing resize2fs /dev/mapper/BackupDisk-DATA 26214400&lt;/p>
&lt;p>resize2fs 1.42.5 (29-Jul-2012)&lt;/p>
&lt;p>Filesystem at /dev/mapper/BackupDisk-DATA is mounted on /media/DATA; on-line
resizing required&lt;/p>
&lt;p>old_desc_blocks = 4, new_desc_blocks = 7&lt;/p>
&lt;p>The filesystem on /dev/mapper/BackupDisk-DATA is now 26214400 blocks long.&lt;/p>
&lt;p>I didn&amp;rsquo;t have much hope that this extend operation would succeed. But it did.
When I initiated this operation, in the background, I had the backups being
synced parallely (which actually made me resize my volume. :-)&lt;/p>
&lt;p>The other item which made me happy yesterday was &lt;strong>Audacity&lt;/strong>. Once upon a
time, when I needed to split a music file to cut a ringtone out of it, I &amp;rsquo;d go
looking for software that could do it. Then I would hope that one of those
software vendors have a fully working version and not a demo with just 5
seconds clipping. Cowon was one media player I can recollect I&amp;rsquo;ve used to
split audio files.&lt;/p>
&lt;p>But in this case, I had a different requirement. I needed to increase the dB
of my ringtone file so that it sounded really a ringtone (Example: Bourne
Ultimatum OST). Audacity, not only did it do the job, it did it for me in just
3-5 minutes. And all with just button clicks. For a n00b with no experience in
that domain, I was really impressed.&lt;/p></description></item><item><title>apt-offline - 1.3</title><link>https://researchut.com/blog/apt-offline-1.3</link><pubDate>Mon, 31 Dec 2012 12:16:07 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-1.3</guid><description>&lt;p>It is still 2012 in this part of the world and the world is still intact.
Since nothing major happened, I thought of spending the new gifted time to add
a long pending item to apt-offline. As shown in the screen shots, apt-
offline&amp;rsquo;s GUI now has support to detect and display the downloaded offline bug
reports. &lt;img src="https://researchut.com/images/bug%20report1.jpeg" alt="">&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/bug%20report2.jpeg" alt="">&lt;/p>
&lt;p>This is part of the just released, &lt;strong>version 1.3&lt;/strong>.&lt;/p></description></item><item><title>Debian Boot time</title><link>https://researchut.com/blog/w530-boot-time-with-debian/</link><pubDate>Sat, 20 Oct 2012 14:38:13 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/w530-boot-time-with-debian/</guid><description>&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/cTK3aIZbe2A?autoplay=1&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=1&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
In case, the video doesn&amp;rsquo;t show on the page,
&lt;a href="http://www.youtube.com/watch?v=cTK3aIZbe2A">http://www.youtube.com/watch?v=cTK3aIZbe2A&lt;/a> This blog post is to show-off the
impressive performance I saw with my machine.&lt;/p>
&lt;p>I recently switched to a ThinkPad W530 laptop. It is a fairly recent machine
with the following hardware config:&lt;/p>
&lt;ul>
&lt;li>Intel(R) Core(TM) i7-3720QM CPU @ 2.60GHz&lt;/li>
&lt;li>8 GiB RAM&lt;/li>
&lt;li>nVIDIA Optimus&lt;/li>
&lt;li>Samsung SSD Drive&lt;/li>
&lt;/ul>
&lt;p>On the software front, I decided to take my chances. Hence:&lt;/p>
&lt;ul>
&lt;li>BTRFS File System&lt;/li>
&lt;li>SystemD Init&lt;/li>
&lt;/ul>
&lt;p>The rest is in the video. It is impressive to see how drastically the
experience has changed with this combination.&lt;/p>
&lt;p>From my limited time spent exploring the machine, all credit goes to the SSD
technology.&lt;/p></description></item><item><title>Reporting bugs with Apport - III</title><link>https://researchut.com/blog/report-bugs-with-apport-3/</link><pubDate>Fri, 19 Oct 2012 16:31:01 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/report-bugs-with-apport-3/</guid><description>&lt;p>Hello World. This is the follow-up to the last [2](http://blog/report-bugs-
with-apport) &lt;a href="http://blog/report-bugs-with-apport-2">updates&lt;/a> on the state of
apport in Debian.&lt;/p>
&lt;p>A lot has changed since the last update on Apport. Currently, in Experimental,
we have version 2.6.1-2. With this version, and going forward, there will be
no hacks to make it work for Debian. Thanks to Martin Pitt, with his
assistance, Apport now has a very basic crashdb in place for Debian. The
Debian crashdb provides Apport the interface to interact with the Debian BTS.&lt;/p>
&lt;p>This change is already upstream as part of the 2.6.1 release. So for Debian,
the packaging is a mere change of the crashdb from &amp;lsquo;default&amp;rsquo; to &amp;lsquo;debian&amp;rsquo;.
Being Just Another CrashDB inside Apport, it leverage full support of future
Apport releases, fixes and enhancements.&lt;/p>
&lt;p>I would like to highlight some points, and some concerns, I have heard in my
previous blog posts.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://comment/960#comment-960">Direct email reports to the developer:&lt;/a> This was a concern from the last blog post. There will be no such pop-up anymore. It has been knocked off.&lt;/li>
&lt;li>&lt;a href="http://comment/934#comment-934">Useless/Incomplete bug reports:&lt;/a> With no proper backtrace, it is worried that the bug report will be useless. Apport has intellignece to check if the backtrace is complete. If it is not, it will not report the bug.&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://lh4.googleusercontent.com/-uSpT56j_AhA/UH6ncujHnVI/AAAAAAAAB4E/nOsVpWG4ePY/s144/apport.jpeg">&lt;img src="https://researchut.com/images/apport.jpeg" alt="Pop-up for Incomplete
backtrace">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://comment/935#comment-935">Opt-Out:&lt;/a> What if the maintainer is not interested in apport reports? The maintainer can ship a blacklist hook into /etc/apport/blacklist.d/. See /etc/apport/blacklist.d/README.blacklist for details.&lt;/li>
&lt;/ul></description></item><item><title>Reporting bugs with Apport - II</title><link>https://researchut.com/blog/report-bugs-with-apport-2/</link><pubDate>Tue, 17 Jul 2012 09:11:51 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/report-bugs-with-apport-2/</guid><description>&lt;p>This is a follow up to the previous post regarding &lt;a href="http://www.researchut.com/site/blog/report-bugs-with-apport">Reporting bugs with
Apport&lt;/a>&lt;/p>
&lt;p>Apport, version 2.2.3-2, has been pushed to experimental. There were some nice
feedback that led to some more changes that I will talk here.&lt;/p>
&lt;p>**Opt out: **As a developer, if you see the volume of reports to be
annoying, you have the option to opt out of apport reports. To do this, you
should specify the &lt;strong>XBS-Apport: No&lt;/strong> field in your package &amp;rsquo;s control file.
When your application crashes, apport first checks for that field in your
package&amp;rsquo;s description and acts based on what you chose.&lt;/p>
&lt;p>Following image is that the user sees for packages where the developer has
opted out.&lt;img src="https://researchut.com/images/apport%203.png" alt="opt out">&lt;/p>
&lt;p>**Repetition: **Repetition of the same crash could lead to multiple reports
on the same buggy behavior. For this, apport, if senses that you have already
filed a bug, it provides you with the option to further ignore all crashes for
that particular type.&lt;/p>
&lt;p>Following image should explain it better.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apport%201.png" alt="ignore report">&lt;/p>
&lt;p>My initial thought regarding defaults was to make apport a default opt out
tool for the entire archive and only file reports for packages where the
developer has manually enabled to opt-in for apport reports. But that&amp;rsquo;d have
been very slow in terms of adoption, hence, for now, instead, the version in
experimental does it the other way around. It will file bug reports for all
packages. If you need to opt out, you will have to add the above expalined
control field.&lt;/p>
&lt;p>That&amp;rsquo;s it for this post. Please provide feedback once you spend some time with
apport.&lt;/p>
&lt;p>PS: Please take conscious steps when filing bug reports with apport. I think
it is a great tool. It just needs great users. :-)&lt;/p></description></item><item><title>Reporting bugs with Apport</title><link>https://researchut.com/blog/report-bugs-with-apport/</link><pubDate>Thu, 12 Jul 2012 07:43:34 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/report-bugs-with-apport/</guid><description>&lt;p>So yet another bug reporting tool. :-)&lt;/p>
&lt;p>When I prepared Apport for Debian, I wasn&amp;rsquo;t sure how it will look going
forward. If you look at the current one lying in experimental, it just detects
your crashes and pops up in your systray. It doesn&amp;rsquo;t have the mechanism to
interact with BTS.&lt;/p>
&lt;p>So, like the title of this post says, this is the first worthy feature for
Apport in the context of Debian.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apport-bug.png" alt="Apport Detail Report">&lt;/p>
&lt;p>Nothing special here. You would have seen a similar window before if you have
installed apport.&lt;/p>
&lt;p>What changes with this release is, that now, when you check the &lt;strong>Send an
error report to help fix this problem&lt;/strong> , it will really file a bug report on
the BTS.&lt;/p>
&lt;p>Here&amp;rsquo;s what the emailed bug report will look like:&lt;/p>
&lt;pre>&lt;code>Package: leafnode
Version: 2.0.0.alpha20090406a-1
=============================
ProblemType: Crash
Architecture: amd64
Date: Tue Jul 3 00:08:02 2012
Dependencies:
adduser 3.113+nmu3
base-passwd 3.5.24
cron 3.0pl1-123
debconf 1.5.44
debianutils 4.3.1
dpkg 1.16.4.3
gcc-4.7-base 4.7.1-2
libbz2-1.0 1.0.6-3
libc-bin 2.13-33
libc6 2.13-33
libclass-isa-perl 0.36-3
libdb5.1 5.1.29-4
libfile-copy-recursive-perl 0.38-1
libgcc1 1:4.7.1-2
libgdbm3 1.8.3-11
liblzma5 5.1.1alpha+20120614-1
libpam-modules 1.1.3-7.1
libpam-modules-bin 1.1.3-7.1
libpam-runtime 1.1.3-7.1
libpam0g 1.1.3-7.1
libpcre3 1:8.30-5
libpopt0 1.16-7
libselinux1 2.1.9-5
libsemanage-common 2.1.6-6
libsemanage1 2.1.6-6
libsepol1 2.1.4-3
libswitch-perl 2.16-2
libustr-1.0-1 1.0.4-3
libwrap0 7.6.q-23
logrotate 3.8.1-4
lsb-base 4.1+Debian7 [modified: lib/lsb/init-functions]
multiarch-support 2.13-33
netbase 5.0
openbsd-inetd 0.20091229-2
passwd 1:4.1.5.1-1
perl 5.14.2-12
perl-base 5.14.2-12
perl-modules 5.14.2-12
sensible-utils 0.0.7
tar 1.26-4
tcpd 7.6.q-23
update-inetd 4.43
zlib1g 1:1.2.7.dfsg-13
Disassembly:
=&amp;gt; 0x7f8e69738475 &amp;lt;*__GI_raise+53&amp;gt;: cmp $0xfffffffffffff000,%rax
0x7f8e6973847b &amp;lt;*__GI_raise+59&amp;gt;: ja 0x7f8e69738492 &amp;lt;*__GI_raise+82&amp;gt;
0x7f8e6973847d &amp;lt;*__GI_raise+61&amp;gt;: repz retq
0x7f8e6973847f &amp;lt;*__GI_raise+63&amp;gt;: nop
0x7f8e69738480 &amp;lt;*__GI_raise+64&amp;gt;: test %eax,%eax
0x7f8e69738482 &amp;lt;*__GI_raise+66&amp;gt;: jg 0x7f8e69738465 &amp;lt;*__GI_raise+37&amp;gt;
0x7f8e69738484 &amp;lt;*__GI_raise+68&amp;gt;: test $0x7fffffff,%eax
0x7f8e69738489 &amp;lt;*__GI_raise+73&amp;gt;: jne 0x7f8e697384a2 &amp;lt;*__GI_raise+98&amp;gt;
0x7f8e6973848b &amp;lt;*__GI_raise+75&amp;gt;: mov %esi,%eax
0x7f8e6973848d &amp;lt;*__GI_raise+77&amp;gt;: nopl (%rax)
0x7f8e69738490 &amp;lt;*__GI_raise+80&amp;gt;: jmp 0x7f8e69738465 &amp;lt;*__GI_raise+37&amp;gt;
0x7f8e69738492 &amp;lt;*__GI_raise+82&amp;gt;: mov 0x34e97f(%rip),%rdx # 0x7f8e69a86e18
0x7f8e69738499 &amp;lt;*__GI_raise+89&amp;gt;: neg %eax
0x7f8e6973849b &amp;lt;*__GI_raise+91&amp;gt;: mov %eax,%fs:(%rdx)
0x7f8e6973849e &amp;lt;*__GI_raise+94&amp;gt;: or $0xffffffff,%eax
0x7f8e697384a1 &amp;lt;*__GI_raise+97&amp;gt;: retq
DistroRelease: Debian 7.0
ExecutablePath: /usr/sbin/fetchnews
ExecutableTimestamp: 1265584779
Package: leafnode 2.0.0.alpha20090406a-1
PackageArchitecture: amd64
ProcCmdline: /usr/sbin/fetchnews
ProcCwd: /
ProcEnviron:
LANGUAGE=en_US:en
LC_TIME=en_IN.UTF-8
LC_MONETARY=en_IN.UTF-8
PATH=(custom, no user)
LC_ADDRESS=en_IN.UTF-8
LANG=en_US.UTF-8
LC_TELEPHONE=en_IN.UTF-8
LC_NAME=en_IN.UTF-8
SHELL=/bin/sh
LC_MEASUREMENT=en_IN.UTF-8
LC_NUMERIC=en_IN.UTF-8
LC_PAPER=en_IN.UTF-8
ProcMaps:
00400000-00421000 r-xp 00000000 08:06 4464934 /usr/sbin/fetchnews
00621000-00622000 rw-p 00021000 08:06 4464934 /usr/sbin/fetchnews
00622000-00623000 rw-p 00000000 00:00 0
00be4000-00c05000 rw-p 00000000 00:00 0 [heap]
7f8e68edc000-7f8e68eef000 r-xp 00000000 08:06 1179776 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f8e68eef000-7f8e690ee000 ---p 00013000 08:06 1179776 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f8e690ee000-7f8e690ef000 r--p 00012000 08:06 1179776 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f8e690ef000-7f8e690f0000 rw-p 00013000 08:06 1179776 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f8e690f0000-7f8e690f2000 rw-p 00000000 00:00 0
7f8e690f2000-7f8e690f7000 r-xp 00000000 08:06 1180036 /lib/x86_64-linux-gnu/libnss_dns-2.13.so
7f8e690f7000-7f8e692f6000 ---p 00005000 08:06 1180036 /lib/x86_64-linux-gnu/libnss_dns-2.13.so
7f8e692f6000-7f8e692f7000 r--p 00004000 08:06 1180036 /lib/x86_64-linux-gnu/libnss_dns-2.13.so
7f8e692f7000-7f8e692f8000 rw-p 00005000 08:06 1180036 /lib/x86_64-linux-gnu/libnss_dns-2.13.so
7f8e692f8000-7f8e692fa000 r-xp 00000000 08:06 1183392 /lib/libnss_mdns4_minimal.so.2
7f8e692fa000-7f8e694f9000 ---p 00002000 08:06 1183392 /lib/libnss_mdns4_minimal.so.2
7f8e694f9000-7f8e694fa000 rw-p 00001000 08:06 1183392 /lib/libnss_mdns4_minimal.so.2
7f8e694fa000-7f8e69505000 r-xp 00000000 08:06 1180055 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f8e69505000-7f8e69704000 ---p 0000b000 08:06 1180055 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f8e69704000-7f8e69705000 r--p 0000a000 08:06 1180055 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f8e69705000-7f8e69706000 rw-p 0000b000 08:06 1180055 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f8e69706000-7f8e69883000 r-xp 00000000 08:06 1179700 /lib/x86_64-linux-gnu/libc-2.13.so
7f8e69883000-7f8e69a83000 ---p 0017d000 08:06 1179700 /lib/x86_64-linux-gnu/libc-2.13.so
7f8e69a83000-7f8e69a87000 r--p 0017d000 08:06 1179700 /lib/x86_64-linux-gnu/libc-2.13.so
7f8e69a87000-7f8e69a88000 rw-p 00181000 08:06 1179700 /lib/x86_64-linux-gnu/libc-2.13.so
7f8e69a88000-7f8e69a8d000 rw-p 00000000 00:00 0
7f8e69a8d000-7f8e69a95000 r-xp 00000000 08:06 1180031 /lib/x86_64-linux-gnu/libcrypt-2.13.so
7f8e69a95000-7f8e69c94000 ---p 00008000 08:06 1180031 /lib/x86_64-linux-gnu/libcrypt-2.13.so
7f8e69c94000-7f8e69c95000 r--p 00007000 08:06 1180031 /lib/x86_64-linux-gnu/libcrypt-2.13.so
7f8e69c95000-7f8e69c96000 rw-p 00008000 08:06 1180031 /lib/x86_64-linux-gnu/libcrypt-2.13.so
7f8e69c96000-7f8e69cc4000 rw-p 00000000 00:00 0
7f8e69cc4000-7f8e69cc6000 r-xp 00000000 08:06 1180047 /lib/x86_64-linux-gnu/libdl-2.13.so
7f8e69cc6000-7f8e69ec6000 ---p 00002000 08:06 1180047 /lib/x86_64-linux-gnu/libdl-2.13.so
7f8e69ec6000-7f8e69ec7000 r--p 00002000 08:06 1180047 /lib/x86_64-linux-gnu/libdl-2.13.so
7f8e69ec7000-7f8e69ec8000 rw-p 00003000 08:06 1180047 /lib/x86_64-linux-gnu/libdl-2.13.so
7f8e69ec8000-7f8e69ed5000 r-xp 00000000 08:06 1179893 /lib/x86_64-linux-gnu/libpam.so.0.83.0
7f8e69ed5000-7f8e6a0d4000 ---p 0000d000 08:06 1179893 /lib/x86_64-linux-gnu/libpam.so.0.83.0
7f8e6a0d4000-7f8e6a0d5000 r--p 0000c000 08:06 1179893 /lib/x86_64-linux-gnu/libpam.so.0.83.0
7f8e6a0d5000-7f8e6a0d6000 rw-p 0000d000 08:06 1179893 /lib/x86_64-linux-gnu/libpam.so.0.83.0
7f8e6a0d6000-7f8e6a112000 r-xp 00000000 08:06 1182916 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
7f8e6a112000-7f8e6a312000 ---p 0003c000 08:06 1182916 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
7f8e6a312000-7f8e6a313000 rw-p 0003c000 08:06 1182916 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
7f8e6a313000-7f8e6a333000 r-xp 00000000 08:06 1180134 /lib/x86_64-linux-gnu/ld-2.13.so
7f8e6a503000-7f8e6a507000 rw-p 00000000 00:00 0
7f8e6a530000-7f8e6a532000 rw-p 00000000 00:00 0
7f8e6a532000-7f8e6a533000 r--p 0001f000 08:06 1180134 /lib/x86_64-linux-gnu/ld-2.13.so
7f8e6a533000-7f8e6a534000 rw-p 00020000 08:06 1180134 /lib/x86_64-linux-gnu/ld-2.13.so
7f8e6a534000-7f8e6a535000 rw-p 00000000 00:00 0
7fffbc06e000-7fffbc08f000 rw-p 00000000 00:00 0 [stack]
7fffbc1ff000-7fffbc200000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
ProcStatus:
Name: fetchnews
State: S (sleeping)
Tgid: 6872
Pid: 6872
PPid: 6871
TracerPid: 0
Uid: 9 9 9 9
Gid: 9 9 9 9
FDSize: 64
Groups: 9
VmPeak: 21440 kB
VmSize: 21276 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 984 kB
VmRSS: 984 kB
VmData: 380 kB
VmStk: 136 kB
VmExe: 132 kB
VmLib: 2132 kB
VmPTE: 64 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/23227
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 6
nonvoluntary_ctxt_switches: 1
Registers:
rax 0x0 0
rbx 0x0 0
rcx 0xffffffffffffffff -1
rdx 0x6 6
rsi 0x1ad8 6872
rdi 0x1ad8 6872
rbp 0x0 0x0
rsp 0x7fffbc08d4f8 0x7fffbc08d4f8
r8 0x7f8e6a504700 140249645729536
r9 0x6d6f642064656966 7885631562835126630
r10 0x8 8
r11 0x246 582
r12 0x0 0
r13 0x7fffbc08d920 140736348084512
r14 0x0 0
r15 0x0 0
rip 0x7f8e69738475 0x7f8e69738475 &amp;lt;*__GI_raise+53&amp;gt;
eflags 0x246 [ PF ZF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
Signal: 6
SourcePackage: leafnode
Stacktrace:
#0 0x00007f8e69738475 in *__GI_raise (sig=&amp;lt;optimized out&amp;gt;) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
pid = &amp;lt;optimized out&amp;gt;
selftid = &amp;lt;optimized out&amp;gt;
#1 0x00007f8e6973b6f0 in *__GI_abort () at abort.c:92
act = {__sigaction_handler = {sa_handler = 0x7f8e69850d3d, sa_sigaction = 0x7f8e69850d3d}, sa_mask = {__val = {140736348083740, 140249634747968, 0, 0, 140736348084512, 140249631083424, 140249645738440, 0, 4294967295, 206158430232, 1, 6427272, 0, 0, 0, 0}}, sa_flags = 1781664242, sa_restorer = 0x1}
sigs = {__val = {32, 0 &amp;lt;repeats 15 times&amp;gt;}}
#2 0x0000000000416292 in ?? ()
No symbol table info available.
#3 0x0000000000411c80 in ?? ()
No symbol table info available.
#4 0x0000000000406952 in ?? ()
No symbol table info available.
#5 0x00007f8e69724ead in __libc_start_main (main=&amp;lt;optimized out&amp;gt;, argc=&amp;lt;optimized out&amp;gt;, ubp_av=&amp;lt;optimized out&amp;gt;, init=&amp;lt;optimized out&amp;gt;, fini=&amp;lt;optimized out&amp;gt;, rtld_fini=&amp;lt;optimized out&amp;gt;, stack_end=0x7fffbc08d918) at libc-start.c:228
result = &amp;lt;optimized out&amp;gt;
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 498162418289285118, 4206480, 140736348084512, 0, 0, -498021567843461122, -435434157313288194}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x418360, 0x7fffbc08d928}, data = {prev = 0x0, cleanup = 0x0, canceltype = 4293472}}}
not_first_call = &amp;lt;optimized out&amp;gt;
#6 0x0000000000402fb9 in ?? ()
No symbol table info available.
#7 0x00007fffbc08d918 in ?? ()
No symbol table info available.
#8 0x000000000000001c in ?? ()
No symbol table info available.
#9 0x0000000000000001 in ?? ()
No symbol table info available.
#10 0x00007fffbc08ee96 in ?? ()
No symbol table info available.
#11 0x0000000000000000 in ?? ()
No symbol table info available.
StacktraceTop:
?? ()
?? ()
?? ()
__libc_start_main (main=&amp;lt;optimized out&amp;gt;, argc=&amp;lt;optimized out&amp;gt;, ubp_av=&amp;lt;optimized out&amp;gt;, init=&amp;lt;optimized out&amp;gt;, fini=&amp;lt;optimized out&amp;gt;, rtld_fini=&amp;lt;optimized out&amp;gt;, stack_end=0x7fffbc08d918) at libc-start.c:228
?? ()
ThreadStacktrace:
.
Thread 1 (LWP 6872):
#0 0x00007f8e69738475 in *__GI_raise (sig=&amp;lt;optimized out&amp;gt;) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
pid = &amp;lt;optimized out&amp;gt;
selftid = &amp;lt;optimized out&amp;gt;
#1 0x00007f8e6973b6f0 in *__GI_abort () at abort.c:92
act = {__sigaction_handler = {sa_handler = 0x7f8e69850d3d, sa_sigaction = 0x7f8e69850d3d}, sa_mask = {__val = {140736348083740, 140249634747968, 0, 0, 140736348084512, 140249631083424, 140249645738440, 0, 4294967295, 206158430232, 1, 6427272, 0, 0, 0, 0}}, sa_flags = 1781664242, sa_restorer = 0x1}
sigs = {__val = {32, 0 &amp;lt;repeats 15 times&amp;gt;}}
#2 0x0000000000416292 in ?? ()
No symbol table info available.
#3 0x0000000000411c80 in ?? ()
No symbol table info available.
#4 0x0000000000406952 in ?? ()
No symbol table info available.
#5 0x00007f8e69724ead in __libc_start_main (main=&amp;lt;optimized out&amp;gt;, argc=&amp;lt;optimized out&amp;gt;, ubp_av=&amp;lt;optimized out&amp;gt;, init=&amp;lt;optimized out&amp;gt;, fini=&amp;lt;optimized out&amp;gt;, rtld_fini=&amp;lt;optimized out&amp;gt;, stack_end=0x7fffbc08d918) at libc-start.c:228
result = &amp;lt;optimized out&amp;gt;
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 498162418289285118, 4206480, 140736348084512, 0, 0, -498021567843461122, -435434157313288194}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x418360, 0x7fffbc08d928}, data = {prev = 0x0, cleanup = 0x0, canceltype = 4293472}}}
not_first_call = &amp;lt;optimized out&amp;gt;
#6 0x0000000000402fb9 in ?? ()
No symbol table info available.
#7 0x00007fffbc08d918 in ?? ()
No symbol table info available.
#8 0x000000000000001c in ?? ()
No symbol table info available.
#9 0x0000000000000001 in ?? ()
No symbol table info available.
#10 0x00007fffbc08ee96 in ?? ()
No symbol table info available.
#11 0x0000000000000000 in ?? ()
No symbol table info available.
Title: fetchnews crashed with SIGABRT in __libc_start_main()
Uname: Linux 3.4-trunk-amd64 x86_64
UserGroups:
&lt;/code>&lt;/pre>
&lt;p>The first 2 lines should be enough for the BTS server to file the bug report
to the correct package and against the correct version.&lt;/p>
&lt;p>If you paid attention in the screen shot and the email report, you will notice
that the email report does not include the &lt;strong>CoreDump&lt;/strong> section. This was
knocked off intentionally as we currently might not need it. If there is a
need, the data is always available on the user &amp;rsquo;s apport database, and the
dev/user and seek it on a need basis.&lt;/p>
&lt;p>But in case, if a day comes when we really want it, that too is possible. The
same email report will have the CoreDump seciton with a section like the
following:&lt;/p>
&lt;pre>&lt;code>CoreDump: base64
H4sICAAAAAAC/0NvcmVEdW1wAOx9C0AU1f7/7LLAggirouF7VDQ0xcVXWGqLoq4Kur6KMmV5CoqwwqJYVquggYqhlVm3B3mt7OWlbnXtZeubHtfobc9Lb6xUemiU5f7PmfkcmBl3VMzbvff3Px89fPb7nfOeM2fOOfOdMzeNT5pgNBgEBpMwRmiRBMEmnA6bEC8MbfYvI6eN4BePBfvX0zQC6Q9RJyULY6NKpuGC6A8rO56uE07wH44lI7YynINlc6cmnFE3n1L5nNB7j+Ssv8lPelbDaeEkuBCu8ag6HENjz9PCmZTh6sNz/aanVz4PS6+V4aoQTohQhxM1rK2XGoQTI/yn5xD814sX4VyacGerFxbOObh15atj6Z17OKl89Qjn0Qkn6pSvEeGqB59z+YKU4aqmtS6fQgDS0wlXo5NPC8I5HK07DyyczdW68yCy9FytK58V4Zw64eou8l8+G8JZy/2Xj51Abfmaw21Th7Np+LTrD+Fc21p5/SGcRxPOoX8dye0T4ep00vPotU92Hh5u3Xln4Wwvt6587A7jaGU4C8I5X/afz3qd/pqFs73WuutWZOm91rr20hzuu9aVz4pwru9adz3YEM6jE65Op3wOdh6OtO68s3C2tgtaVT4nS+/cw0nlc7H61AnnDfBfPg/Cie0WnOv5C1KFi2tdPqsQzqoTTtAZ91SzcI4Frepf6tlIbeaCc71PyyECcXxm686fBeGsrQwnIpytleGsCFcX9IJPVT6jmrXnwRHM2q863NnOn5MNbJ0+irOFo2EcBjn8uGkzxgvN/ZuMID8t7lAXQXiPuHfhLjTE983qMmswAVVmhpydm5UpZhYsEiaq254PCFLkW8nfQF9cViT1HUM18Te9LefjEhahJv6zgV3DtI7LMaJhdSzMwMFo+cIIgdPWbXaWOyMnP2tpEbwPLi4qHFyUnps/uPmI+EfqOhBD/SBF3nq19J1S+VmT8Z389iVVm8CBdhAzwQHNl 7xNNReLV6SpPH/NUzH0OWZNHkPAVYPl+Npo9GEaua1GDtfIF2ni7wz+5QP5fOOOIXxxTJYjWPgP/bfLQHSLRkUd3hTgv749PWm7FP7r0FcDP15U/cmO9fL4jLFNgzkaiBr4zwWL//QaYtey3vH/NtBrxEbbBHFJk6bOTuFt4v9cmwj4N/vn4ODg4ODg4ODg4OD4/wE3aZ7/G/H8n60B2aDfFmVs9kOf/5vJ325CV2n+HSgol59tKvYiasZmxRzNJCeIhG0q7gY1Y4OCA1UlsKl4b5hRxWxhu2Vdmq0Dp6vYi8UxS5SgCmdEuBiEi4F
Now, **Is this going to be useful? Will we get flooded with bug reports?**
Usefulness: I think this will uncover many bugs that might be getting unnoticed today. Take this example itself. This bug was detect against the leafnode package's fetchnews binary. That binary does a quiet job in the background, fetching news. I never was aware that it had been crashing. As a system-wide monitoring tool, apport was able to detect, trap and inform the user of the crash. So I think this will be useful and improve the overall quality.
Abuse/Flood: This is something I can't predict. Perhaps it will bring in challenges if people just blindly click on the **Send Report** button. One option can be to have the &amp;quot;Send Report&amp;quot; checkbox unchecked by default. That'll hopefully lower down the possibilities.
**What do you think?** Let me know your comments.
This change will soon be pushed to apport in experimental. Hopefully this weekend.
I want to wrap up this post with a **Thank You** note to **Martin Pitt** and his team who created Apport, and with such simplicity. It took me 30 lines of code to adapt it to Debian. My intent with Apport is to keep the changes to the minimum so that we can always leverage new features and fixes that Apport brings in. So, as far as I 'll try, there will be no drift from its original shape.
&lt;/code>&lt;/pre></description></item><item><title>Laptop Mode Tools - 1.61</title><link>https://researchut.com/blog/laptop-mode-tools-v161/</link><pubDate>Thu, 17 May 2012 08:56:29 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/laptop-mode-tools-v161/</guid><description>&lt;p>Laptop Mode Tools, version 1.61, has been released and will land up soon for
Debian. This is the version that would be targetting Wheezy.&lt;br>
This release includes many bug fixes and should make power savings much better
on your machines.&lt;/p>
&lt;p>This is mainly a bug fix release. Some parallel module execution approach has
been used which could show runtime improvements.&lt;/p>
&lt;p>Changelog:&lt;/p>
&lt;p>&lt;strong>1.61&lt;/strong> - Thu May 17 17:44:26 IST 2012&lt;br>
* Handle devices with persistent device naming. This fixes the issues where&lt;br>
you don&amp;rsquo;t have a disk referenced by a block name, the commit= value was&lt;br>
completely skipped&lt;br>
* Fix issue where hdparm skips SSDs for power management&lt;br>
* Add parallel execution for the modules. In theory this should speeden up the&lt;br>
execution. See git commit log comments for details&lt;br>
* Add support for non-deafult customized settings&lt;br>
* calculate design_capacity_warning on machines/arches where it is not readily&lt;br>
available&lt;/p>
&lt;p>We have switched the SCM to git. The current code repository is&lt;br>
available at [1] along with the changelog.&lt;/p>
&lt;p>The tarball is available here [2].&lt;br>
The md5 checksum for the tarball is 6685af5dbb34c3d51ca27933b58f484e&lt;/p>
&lt;p>[1] &lt;a href="https://github.com/rickysarraf/laptop-mode-tools">https://github.com/rickysarraf/laptop-mode-tools&lt;/a>&lt;br>
[2]&amp;lt;http://samwel.tk/laptop_mode/tools/downloads/laptop-mode-
tools_1.61.tar.gz&amp;gt;&lt;/p></description></item><item><title>Cancer cure drugs now more affordable</title><link>https://researchut.com/blog/cancer-drug-more-affordable/</link><pubDate>Sat, 05 May 2012 15:32:05 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/cancer-drug-more-affordable/</guid><description>&lt;p>Now these are the kind of moves that needs to happen more often. Whether this
will cause a negative impact on the overall market, and the further invention
of drugs (&lt;a href="patents-and-pharmaceutical-industries">including patent control&lt;/a>),
but the affordability of the medicatoin to an average citizen is a great move.&lt;/p>
&lt;p>The typical Chemotherapy can be on an average of 22 times. When summed up with
the dosage (somewhere around 250 mg IIRC), the cost comes to approx: (22/4) *
15000 = 82k, which now, will be affordable at 27k.&lt;/p>
&lt;p>I guess the price slash is only for India and am not sure what the impact to
the global market will look like.&lt;/p>
&lt;p>Quoting the article:&lt;/p>
&lt;p>&amp;lt;http://www.moneycontrol.com/news/business/cipla-drug-price-cut-not-to-hurt-
revenue-much-say-analysts_700380.html&amp;gt;&lt;/p>
&lt;blockquote>
&lt;p>Cipla cut price of its kidney cancer drug Sorafenib, which is sold under
brand name Nexavar by multi-national Bayer to Rs 6,840 for a month&amp;rsquo;s supply,
from around Rs 28,000 earlier. Its lung cancer drug Gestinib, which is sold
under brand name Iressa by AstraZeneca will cost Rs 4,250, versus Rs 10,200
earlier, and price of Temozolamide used to treat brain tumour, has been
reduced by Rs 15,000 to Rs 5,000.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>India&amp;rsquo;s Patent Office recently issued a compulsory licence allowing Natco to
make a generic copy of Sorafenib, on the payment of a royalty to Bayer, which
sells the drug at around Rs 2 lakh.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Domestic sales account for 46-47% of Cipla&amp;rsquo;s total sales and of that the
cancer drugs portfolio is a very small portion, so these price cuts are
unlikely to have any major impact on its revenue, Hitesh Mahida of Fortune
Equity Brokers told moneycontrol.com&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;Cipla&amp;rsquo;s idea seems to be to create disruption in the market, increase its
market share&amp;hellip;&amp;rdquo; the analyst says.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Swiss pharma major Roche had earlier this year signed a manufacturing deal
with India&amp;rsquo;s Emcure Pharma so that its anti-cancer drugs Herceptin and
MabThera could be made in India at affordable prices. Analysts say Cipla&amp;rsquo;s
move to slash prices could in future deter some MNCs from launching their
drugs in India at all, but some may also look at doing deals like the one
struck by Roche.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Meanwhile, shares of pharma major Cipla surged over 3% on Friday after
brokerage CLSA upgraded the stock to &amp;ldquo;outperform&amp;rdquo; from &amp;ldquo;underperform,&amp;rdquo; saying,
Cipla would be strongest beneficiaries of a weakening rupee.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>The rupee has been sliding sharply against the US dollar in recent days and
hit over four month low of around Rs 53.78 earlier in trade.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;We expect improving margins over the coming quarters on back of a weak
rupee and a low base. We expect strong operating profit growth over coming
quarters led by margin expansion and high margin product supplies,&amp;rdquo; CLSA&amp;rsquo;s
Hemant Bakhru said.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>The US Food and Drugs Administration has approved Meda&amp;rsquo;s drug Dymista for
allergic rhinitis and the product is widely expected to reach USD 300-500
million in annual sales over the coming years. The analyst says Cipla being a
partner, will benefit through product supplies over a longer term.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;Apart from approval (outside North America) related milestone payment
(US$5m), we expect gradual increase in Cipla&amp;rsquo;s sales from product related
supplies to Meda. Assuming Cipla supplies product at 10-15% of sales, it could
earn US$50-75m at peak sales,&amp;rdquo; Bakhru said.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Additionally, a low base in domestic formulations could result in reasonable
India growth, he adds.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Cipla shares were up 2.8% at Rs 326.60 on NSE in noon trade.&lt;/p>
&lt;/blockquote></description></item><item><title>Kscope 1.6</title><link>https://researchut.com/blog/kscope-kde4-debian/</link><pubDate>Sat, 07 Apr 2012 13:46:59 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/kscope-kde4-debian/</guid><description>&lt;p>In the 3.x days of KDE, there were some wonderful applications. One of them I
still admire, is kscope. Recently, I stumbled upon
&lt;a href="http://pl.atyp.us/wordpress/index.php/2010/01/they-killed-kscope/" title="How
they killed kscope">this&lt;/a> blog entry and thought of sharing my living with kscope.&lt;/p>
&lt;p>The move from KDE 3 to KDE 4 was a big one. During that move, the kscope
author decided to port kscope to a Qt only application. That is what we have
as the latest kscope, 1.9x version. But, on personal taste, it is not as good
as the 1.6x series.&lt;/p>
&lt;p>With no viable replacement to my knowledge, making use of kscope 1.6x on
Debian (and Ubuntu) was the choice. Thanks to the way it is all packaged by
the KDE, it is easy.&lt;/p>
&lt;p>Kscope depends on 2 packages for its functionlity: kdelibs4c2a and kate.
kdelibs4c2a is unsupported, but for the dire needs, you live with it. The
library can be easily pulled from the snapshot website, or just get the
package from the old distribution URLs. The same goes for kate and kscope
(1.6x)&lt;/p>
&lt;p>Install the kdelibs4c2a package.&lt;/p>
&lt;blockquote>
&lt;p>16:55:27 rrs@champaran:~$ apt-cache policy kdelibs4c2a&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>kdelibs4c2a:&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Installed: 4:3.5.10.dfsg.1-5&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Candidate: 4:3.5.10.dfsg.1-5&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Version table:&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>*** 4:3.5.10.dfsg.1-5 0&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;pre>&lt;code> 100 /var/lib/dpkg/status
&lt;/code>&lt;/pre>
&lt;/blockquote>
&lt;p>You can&amp;rsquo;t do the same with kate because the same package name is carried
forward. Simply unpack the old kate deb package and copy the following
libraries to /usr/local/:&lt;/p>
&lt;blockquote>
&lt;p>libkateinterfaces.so.0@ libkateutils.so.0@&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>libkateinterfaces.so.0.0.0 libkateutils.so.0.0.0&lt;/p>
&lt;/blockquote>
&lt;p>Since the kscope package has a dependency defined on the kate pacakge, use
equivs to create a dummy package to satisfy kscope.&lt;/p>
&lt;p>With that, it is all done. Just make sure to put your **kscope, kate **and
&lt;strong>kdelibs4c2a&lt;/strong> packages on hold.&lt;/p>
&lt;p>For the eyes:&lt;/p>
&lt;p>![kscope running on kde4 on debian](/images/kscope-
kde4-debian.png)&lt;/p></description></item><item><title>Debian SAN</title><link>https://researchut.com/blog/state-of-san-in-debian/</link><pubDate>Sat, 07 Apr 2012 13:10:00 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/state-of-san-in-debian/</guid><description>&lt;p>Many of the SAN components in Debian have me involved. So I think out to give
an update on what the state of SAN would be in Debian Wheezy.&lt;/p>
&lt;p>&lt;strong>Open-iSCSI&lt;/strong> : Just uploaded a newer version to experimental which
eventually will crawl into testing. It should fix all release goals for
Wheezy. Please give it a good test&lt;/p>
&lt;p>&lt;strong>iscsitarget&lt;/strong> : Same goes here. This one is already in testing. Please
test. It has some bugs reported, all in needinfo, as they haven&amp;rsquo;t been easily
reproducible or reported complete.&lt;/p>
&lt;p>&lt;strong>multipath-tools&lt;/strong> : It is in pretty good shape. Some minor bugs. But still,
please test. :-)&lt;/p>
&lt;p>&lt;strong>Open-FCoE&lt;/strong> : Being dependent on hardware, for which I couldn&amp;rsquo;t manage
resource commitment, this one is literally untested. It lies in testing,
untested.&lt;/p>
&lt;p>&lt;strong>LIO Target&lt;/strong> : The newest target implementation for Linux. It is also
available in testing, has had some minor bugs reported by users, and fixed. If
you use, or anticipate to use it in the Wheezy life cycle, now is the time to
test.&lt;/p></description></item><item><title>Apport for Debian</title><link>https://researchut.com/blog/apport-on-debian/</link><pubDate>Sat, 07 Apr 2012 12:47:05 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apport-on-debian/</guid><description>&lt;p>apport just cleared the new queue and is now available in
&lt;a href="http://packages.qa.debian.org/a/apport.html">experimental&lt;/a>. For those who do
not know what apport is:&lt;/p>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Debugging program crashes without any automated tools has been pretty time
consuming and hard for both developers and users. Many program crashes remain
unreported or unfixed because:&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>Many crashes are not easily reproducible.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>End users do not know how to prepare a report that is really useful for
developers, like building a package with debug symbols, operating &lt;code>gdb&lt;/code>, etc.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>A considerable part of bug triage is spent with collecting relevant
information about the crash itself, package versions, hardware architecture,
operating system version, etc.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>There is no easy frontend which allow users to submit detailed problem
reports.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>Existing solutions like bug-buddy or krash are specific to a particular
desktop environment, are nontrivial to adapt to the needs of a distribution
developer, do not work for crashes of background servers (like a database or
an email server), and do not integrate well with existing debug packages that
a distribution might provide.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Apport is a system which&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>intercepts crashes right when they happen the first time,&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>gathers potentially useful information about the crash and the OS
environment,&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>can be automatically invoked for unhandled exceptions in other
programming languages (e. g. in Ubuntu this is done for Python),&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>can be automatically invoked for other problems that can be
automatically detected (e. g. Ubuntu automatically detects and reports package
installation/upgrade failures from update-manager),&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>presents a UI that informs the user about the crash and instructs them
on how to proceed,&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;ul>
&lt;li>and is able to file non-crash bug reports about software, so that
developers still get information about package versions, OS version etc.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;blockquote>
&lt;/blockquote>
&lt;p>At this moment, it is quite broken. The crashes are not intercepted by update-
notifier on my box. With it now in experimental, my intent is to slowly
integrate it well with all dependent tools for Debian. It won&amp;rsquo;t be ready for
the Wheezy release, but hopefully for the one after that.&lt;/p>
&lt;p>On the Ubuntu side, Canonical hosts a retracing service that takes user
reported core dumps and generates a usable backtrace. For Debian, my plan is
to have a chroot kind interface, where in the user could opt-in to download
all debug packages to generate a valid backtrace. This could go as the debian
backend for apport in the future. On the bug reporting side, afaik, we do not
have a web interface to lodge bugs. To report bugs (minus the core dumps), we
will want a backend to submit it over email. The current apport report
gathering tool is pretty good (if compared to other tools like reportbug), so
here the low hanging fruit would be to just take the report and feed in email
to our BTS server.&lt;/p>
&lt;p>For the eyes:&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apport-debian.png" alt="Apport on Debian">&lt;/p></description></item><item><title>Seagate FreeAgent GoFlex</title><link>https://researchut.com/blog/seagate-freeagent-goflex/</link><pubDate>Mon, 07 Nov 2011 09:36:36 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/seagate-freeagent-goflex/</guid><description>&lt;p>I recently purchased a Seagate FreeAgent GoFlex 1 TB hard drive. It is a 2.5&amp;quot;
compact disk that you connect over USB. It draws its power from the USB
controller. My previous Extern HDDs were all 2.5&amp;quot; laptop drives, for which I
bought a USB enclosure. Those devices always worked perfect, as in:&lt;/p>
&lt;ul>
&lt;li>They were automatically detected&lt;/li>
&lt;li>Partitions/File Systems understood&lt;/li>
&lt;li>Desktop systems would prompt for actions&lt;/li>
&lt;/ul>
&lt;p>The typical kernel messages I got for these devices were:&lt;/p>
&lt;p>[56063.268107] usb 1-1: new high speed USB device number 13 using
ehci_hcd[56063.401635] usb 1-1: New USB device found, idVendor=14cd,
idProduct=6116[56063.401645] usb 1-1: New USB device strings: Mfr=1,
Product=3, SerialNumber=2[56063.401652] usb 1-1: Product: USB 2.0 SATA BRIDGE
[56063.401658] usb 1-1: Manufacturer: Super Top [56063.401663] usb 1-1:
SerialNumber: M6116018VF16[56063.402857] scsi8 : usb-storage
1-1:1.0[56064.400896] scsi 8:0:0:0: Direct-Access WDC WD50 00BEVT-24A0RT0
PQ: 0 ANSI: 0[56064.401576] sd 8:0:0:0: Attached scsi generic sg2 type
0[56064.402102] sd 8:0:0:0: [sdb] 976773168 512-byte logical blocks: (500
GB/465 GiB)[56064.402615] sd 8:0:0:0: [sdb] Write Protect is off[56064.402618]
sd 8:0:0:0: [sdb] Mode Sense: 03 00 00 00[56064.403101] sd 8:0:0:0: [sdb] No
Caching mode page present[56064.403105] sd 8:0:0:0: [sdb] Assuming drive
cache: write through[56064.404861] sd 8:0:0:0: [sdb] No Caching mode page
present[56064.404864] sd 8:0:0:0: [sdb] Assuming drive cache: write
through[56064.419657] sdb: sdb1[56064.421850] sd 8:0:0:0: [sdb] No Caching
mode page present[56064.421854] sd 8:0:0:0: [sdb] Assuming drive cache: write
through[56064.421857] sd 8:0:0:0: [sdb] Attached SCSI disk&lt;/p>
&lt;p>But for my Seagate FreeAgent GoFlex HDD, things were different. The kernel
would detect but then it would not mount. The error reported is that the
device is busy. My FreeAgent&amp;rsquo;s kernel messages look similar to what the
regular one has:&lt;/p>
&lt;p>[ 168.520140] usb 1-1: new high speed USB device number 5 using ehci_hcd[
168.657424] usb 1-1: New USB device found, idVendor=0bc2, idProduct=5021[
168.657433] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3[
168.657439] usb 1-1: Product: FreeAgent GoFlex[ 168.657444] usb 1-1:
Manufacturer: Seagate[ 168.657449] usb 1-1: SerialNumber: NA0C1BML[
168.659079] scsi5 : usb-storage 1-1:1.0[ 169.657136] scsi 5:0:0:0: Direct-
Access Seagate FreeAgent GoFlex 0148 PQ: 0 ANSI: 4[ 169.708786] sd
5:0:0:0: Attached scsi generic sg3 type 0[ 169.709079] sd 5:0:0:0: [sdc]
1953525167 512-byte logical blocks: (1.00 TB/931 GiB)[ 169.709954] sd
5:0:0:0: [sdc] Write Protect is off[ 169.709963] sd 5:0:0:0: [sdc] Mode
Sense: 1c 00 00 00[ 169.710567] sd 5:0:0:0: [sdc] Write cache: enabled, read
cache: enabled, doesn&amp;rsquo;t support DPO or FUA[ 169.759942] sdc: sdc1[
169.762050] sd 5:0:0:0: [sdc] Attached SCSI disk&lt;/p>
&lt;p>As the Device Mapper Multipath Debian Maintainer, I have multipath-tools
installed on my laptop. Turns out, for some reason, the device is consumer by
the device mapper multipath stack.&lt;/p>
&lt;p>20:12:58 rrs@champaran:~$ ls /dev/mapper/1Seagate@ 1Seagate FreeAgent GoFlex
N 1Seagate FreeAgent GoFlex Np1 control LocalDisk-ROOT@
LocalDisk-SWAP@&lt;/p>
&lt;p>Also the block device ID listing is enumerated as type SCSI.&lt;/p>
&lt;p>19:56:44 rrs@champaran:~$ ls /dev/disk/by-id/ata-
HITACHI_HTS723216L9SA60_091220FC1220NCJASEVG@
scsi-SATA_HITACHI_HTS7232091220FC1220NCJASEVG@ata-
HITACHI_HTS723216L9SA60_091220FC1220NCJASEVG-part1@
scsi-SATA_HITACHI_HTS7232091220FC1220NCJASEVG-part1@ata-
HITACHI_HTS723216L9SA60_091220FC1220NCJASEVG-part2@
scsi-SATA_HITACHI_HTS7232091220FC1220NCJASEVG-part2@ata-
HITACHI_HTS723216L9SA60_091220FC1220NCJASEVG-part3@
scsi-SATA_HITACHI_HTS7232091220FC1220NCJASEVG-part3@ata-HL-DT-
ST_DVDRAM_GU10N_M189CNI1127@ &lt;strong>scsi-
SSeagate_FreeAgent_GoFle_NA0C1BML@&lt;/strong> ata-ST1000LM010-9YH146_W1000ZD8@
&lt;strong>usb-WDC_WD12_00BEVE-11UYT0_ST_Killer-0:0@&lt;/strong> **dm-name-1Seagate@
usb-WDC_WD12_00BEVE-11UYT0_ST_Killer-0:0-part1@**dm-name-LocalDisk-ROOT@
wwn-0x5000c5003d19c8c2@dm-name-LocalDisk-SWAP@
wwn-0x5000cca586e112bc@dm-uuid-LVM-
buywwzKkpfKG2RegankA2nPkmFBBPFe3D5DepV8w8nLrHfoAjIIQVnakOQJZEqJX@ wwn-
0x5000cca586e112bc-part1@dm-uuid-LVM-
buywwzKkpfKG2RegankA2nPkmFBBPFe3k9aJfc9B7wRmVIwfoagffHUZjuN6c4cM@ wwn-
0x5000cca586e112bc-part2@ &lt;strong>dm-uuid-mpath-1Seagate@&lt;/strong>
wwn-0x5000cca586e112bc-part3@ &lt;strong>raid-1Seagate@&lt;/strong>&lt;/p>
&lt;p>But I&amp;rsquo;m not sure why the same doesn&amp;rsquo;t happend for my external laptop drive. It
gets properly tagged as device type USB.&lt;/p>
&lt;p>So Laptop or Server, if you have a FreeAgent that you want to connect to your
machine, and see the device busy error when accessing the device[&amp;rsquo;s] directly,
do the following:&lt;/p>
&lt;p>First, the ID of the device.&lt;/p>
&lt;p>20:17:43 rrs@champaran:~$ /lib/udev/scsi_id &amp;ndash;whitelisted &amp;ndash;page=0x83
&amp;ndash;device=/dev/sdc1Seagate FreeAgent GoFlex N&lt;/p>
&lt;p>Add the ID to /etc/multipath.conf under blacklist section&lt;/p>
&lt;p>blacklist { wwid &amp;ldquo;1Seagate FreeAgent GoFlex*&amp;rdquo; wwid &amp;ldquo;1Seagate FA
GoFlex Desk*&amp;rdquo;# devnode &amp;ldquo;^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]&lt;em>&amp;rdquo;#
devnode &amp;ldquo;^hd[a-z][[0-9]&lt;/em>]&amp;rdquo;# device {# vendor DEC.*#
product MSA[15]00# }}&lt;/p>
&lt;p>Run &lt;em>mulitpath -F&lt;/em> to flush the unused maps.&lt;/p>
&lt;p>Run &lt;em>multipath -v3&lt;/em> to ensure that now the device is blacklisted.&lt;/p>
&lt;p>Nov 03 20:19:02 | sdc: (Seagate:FreeAgent GoFlex) wwid blacklisted&lt;/p>
&lt;p>The front cause for the mis-behavior is:&lt;/p>
&lt;h1 id="coalesce-multipath-devices-before-multipathd-is-running-initramfs-early">Coalesce multipath devices before multipathd is running (initramfs, early#&lt;/h1>
&lt;p>boot)ACTION==&amp;ldquo;add|change&amp;rdquo;, SUBSYSTEM==&amp;ldquo;block&amp;rdquo;, RUN+=&amp;quot;/sbin/multipath -v0
/dev/$name&amp;quot;&lt;/p>
&lt;p>But something else, maybe the default blacklist table, needs the actual fix.&lt;/p></description></item><item><title>OpenXenManager</title><link>https://researchut.com/blog/open-xen-manager/</link><pubDate>Wed, 19 Oct 2011 08:08:46 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/open-xen-manager/</guid><description>&lt;p>OpenXenManager cleared the NEW queue and is now available in the archive.&lt;/p>
&lt;p>What it is:&lt;/p>
&lt;p>rrs@champaran:~$ apt-cache show openxenmanager Package: openxenmanagerVersion:
0.r80+dfsg-1Installed-Size: 3051Maintainer: Ritesh Raj Sarraf
&lt;a href="mailto:rrs@debian.org">rrs@debian.org&lt;/a>Architecture: allDepends: pythonDescription: &lt;strong>full-featured
graphical management tool for xen using xenapi&lt;/strong> OpenXenManager is a
graphical interface to manage XenServer / Xen Cloud Platform (XCP) hosts
through the network . OpenXenManager is an open-source multiplatform clone of
XenCenter (Citrix)Homepage:
&lt;a href="http://sourceforge.net/projects/openxenmanager/Section">http://sourceforge.net/projects/openxenmanager/Section&lt;/a>: adminPriority:
extraFilename: pool/main/o/openxenmanager/openxenmanager_0.r80+dfsg-
1_all.debSize: 396322MD5sum: 64df482dac6b99bc3403bcc0740f8718SHA1:
9c746f524c3c29eb88de7ae702c96cbca162f577SHA256:
454641eb26c57ba35ad573a3a8493ac6dbd82f7920c8b926049ef892724147e0&lt;/p>
&lt;p>It is written purely in Python so should work at most of the places. The
current consumer of OpenXenManager are users who have a Citrix XenServer
platfrom running as a hypervisor. Soon, once XCP efforts are completed for
Debian, OpenXenManager will also be able to manage Debian Xen Hypervisor
installations using this graphical tool.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/OpenXenManager.png" alt="OpenXenManager">&lt;/p></description></item><item><title>Laptop Mode Tools - 1.60</title><link>https://researchut.com/post/186/</link><pubDate>Fri, 14 Oct 2011 04:36:59 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/186/</guid><description>&lt;p>Hello World,&lt;/p>
&lt;p>I am very pleased to announce the release of Laptop Mode Tools, version 1.60.&lt;br>
This release includes lots of bug fixes and should make power savings much
better on your machines.The battery polling daemon now, more reliably, gets
triggered and killed based on power states.&lt;/p>
&lt;p>This release also includes 2 helper scripts to trigger suspend and hibernate,
in case anyone is interested.&lt;/p>
&lt;p>Given the advancements of Linux PM ( &lt;strong>All thanks to Rafael J. Wysocki&lt;/strong> ) in
recent years, the freezer/thawfunctionality really does a very good job of
handling suspend/hibernate, there is no need of a hacky
suspend/resumemechanism. Thus, you&amp;rsquo;ll notice the helper scripts just do a mere
echo into sysfs.&lt;/p>
&lt;p>I would also like to thank the Chromium project that has found and fixed many
bugs and added many enhancements to Laptop Mode Tools.&lt;/p>
&lt;p>Changelog:&lt;/p>
&lt;p>1.60 -- Fri Oct 14 13:08:09 IST 2011&lt;/p>
&lt;ul>
&lt;li>Use proper device reference for iwconfig (Debian BTS: #639388)&lt;/li>
&lt;li>Check for block device&amp;rsquo;s existence. Thanks to Simon Que&lt;/li>
&lt;li>Add suspend/resume helper tools: pm-helper, pm-suspend, pm-hibernate&lt;/li>
&lt;li>What laptop-mode-tools is stopped from init, also kill polling daemon&lt;/li>
&lt;li>Reliable and much better locking mechanics&lt;/li>
&lt;li>Make polling dameon lock safe&lt;/li>
&lt;li>Make lmt-udev distro neutral. Thanks to Simon Que&lt;/li>
&lt;li>Change Intel HDA Audio&amp;rsquo;s default power save timeout to 2 seconds&lt;/li>
&lt;/ul>
&lt;p>We have switched the SCM to git. The current code repository is&lt;br>
available at [1] along with the changelog.&lt;/p>
&lt;p>The tarball is available here [2].&lt;br>
The md5 checksum for the tarball is 22bcc955c4e5d28e2f3a992b0efb50b4&lt;/p>
&lt;p>[1] &lt;a href="https://github.com/rickysarraf/laptop-mode-tools">https://github.com/rickysarraf/laptop-mode-tools&lt;/a>&lt;br>
[2]&amp;lt;http://samwel.tk/laptop_mode/tools/downloads/laptop-mode-
tools_1.60.tar.gz&amp;gt;&lt;/p></description></item><item><title>File System corruption and Recovery</title><link>https://researchut.com/blog/fat-data-recovery/</link><pubDate>Tue, 16 Aug 2011 16:29:49 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/fat-data-recovery/</guid><description>&lt;p>So this is the 2nd time I ran into a problem like this again. My FAT32 file
system on the external USB HDD, all of a sudden, started reporting:&lt;/p>
&lt;p>00:47:32 rrs@champaran:/tmp$ sudo dosfsck /dev/sdb1dosfsck 3.0.9, 31 Jan 2010,
FAT32, LFNLogical sector size is zero.&lt;/p>
&lt;p>I had been taking a lot of care to ensure that I don&amp;rsquo;t run into situation like
this. No body likes losing data. The good part is that I&amp;rsquo;ve been lucky enough
that, even without backups (now who&amp;rsquo;s gonna backup a backup disk), I have
recovered all my data. All thanks to Christophe GRENIER for Testdisk.&lt;/p>
&lt;h2 id="so-what-caused-the-problem">So what caused the problem&lt;/h2>
&lt;p>I don&amp;rsquo;t know. I do remember what I did last that must have triggered the
problem. I started 5 copy operations from my Laptop HDD to the External HDD
(FAT32 which got corrupted) using the File Manager, effectively triggering a
random write for the I/O Scheduler.&lt;/p>
&lt;p>And at the very same time, I was also running Handbrake to try re-encode a
corrupted MP4 video from my camera - CPU Intensive task.&lt;/p>
&lt;p>Well nothing RTOS or Mission critical, but unfortunately, the linux kernel
couldn&amp;rsquo;t take much. The moment it ran out of VM, it started paging. And looks
like paging is the ugliest state for the linux kernel. Because the moment it
starts paging, you have a very high probability of hitting an OOM. And that&amp;rsquo;s
what happened in my case.&lt;/p>
&lt;p>I wish Linux actually thawed processes instead of trying to give every a fair
share, and thus ending up in an OOM situation. But anyways, having become good
at predicting Linux&amp;rsquo;s behavior, I decided to not touch the laptop at all. Left
it as it is over night thinking it would eventually trigger OOM and the prime
candidate would be Handbrake. And once Handbrake is killed, everything would
recover.&lt;/p>
&lt;p>In the morning, every thing was back to normal. The HDD was idle and showed no
more signs of the paging abuse the kernel did last night. The only evidence
was syslog which did impress me for my predictability of Linux&amp;rsquo;s OOM. The
kernel did trigger OOM and just kill the most abusive (CPU intensive) process,
Handbrake, and everything else had recovered to normal.&lt;/p>
&lt;p>Well. All good. I did not have to reboot my laptop. So just hibernated and
pushed to work.&lt;/p>
&lt;h2 id="why-fat32-is-that-the-best">Why FAT32? Is that the best?&lt;/h2>
&lt;p>My beautiful Playstation 3, with which I like to share some of the files, does
not understand anything else apart from FAT32.&lt;/p>
&lt;p>So back to home, plugged-in the External HDD and&amp;hellip;&amp;hellip;&amp;hellip;.. sigh!!! Does not
detect.&lt;/p>
&lt;p>Plugged it into my laptop &amp;hellip;&amp;hellip; No KDE automount&amp;hellip;&lt;/p>
&lt;p>Something wrong&amp;hellip;.&lt;/p>
&lt;p>00:47:32 rrs@champaran:/tmp$ sudo dosfsck /dev/sdb1dosfsck 3.0.9, 31 Jan 2010,
FAT32, LFNLogical sector size is zero.&lt;/p>
&lt;p>I wonder why does a file system have to get corrupted for extensive I/O on
it..&lt;/p>
&lt;h2 id="the-recovery">The Recovery..&lt;/h2>
&lt;p>Done is done. Having run into similar problems before, I looked back at
testdisk.&lt;/p>
&lt;p>It started off with a disappointment stating that the file system was
damaged.&lt;img src="https://researchut.com/images/testdisk1.jpeg" alt="">&lt;/p>
&lt;p>Luckily, doing an advanced mode lookup did show some hope.
&lt;img src="https://researchut.com/images/testdisk2.jpeg" alt="">&lt;/p>
&lt;p>And doing a listing further yielded that the boot sector was
available.&lt;img src="https://researchut.com/images/testdisk3.jpeg" alt="">&lt;/p>
&lt;p>Which when rebuilt, allowed me access to the
partition.&lt;img src="https://researchut.com/images/testdisk4.jpeg" alt="">&lt;/p>
&lt;p>For some reason, the [undelete] option listed no data. It reported that there
was no data available.&lt;/p>
&lt;p>Selecting the [Boot] option listed down all my files, which I quickly copied
over to my other External USB HDD with a btrfs file system ;-)&lt;/p>
&lt;p>Testdisk has twice turned out to be my favorite data recovery tool from b0rken
file systems.&lt;/p></description></item><item><title>MMA</title><link>https://researchut.com/post/183/</link><pubDate>Sun, 07 Aug 2011 10:41:13 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/183/</guid><description>&lt;p>Wrestling (WWE) is entertaining. The way the ww[ef] superstars (Especially the
ones like Undertaker, Triple H) are presented is fun to watch. Or the kind of
high flying maveuveurs the wwf superstars are able to perform, it really is
super cool. The only catch is - it is not a sport. The feuds are all pre-
defined to juicen things up.&lt;/p>
&lt;p>I recently came to know of UFC. I hope some day they start airing it in my
part of the world. I&amp;rsquo;m still getting acquianted to MMA, but it really is an
awesome sport. This is one forum which does show size does not matter. Was
watching Royce Gracie&amp;rsquo;s matches from UFC 4. Awesome matches clearly showing
the skill with which one can beat any size or power. The final was in between
a pro-jiu jitsu vs pro-wrestler. Gracie won it but was given a tough fight by
the wrestler.&lt;/p>
&lt;p>That brings me to &lt;a href="http://www.ea.com/mma">EA Sports MMA&lt;/a>.
&lt;img src="https://researchut.com/images/MMA_Logo.png" alt="">&lt;/p>
&lt;p>I downloaded this demo some time back but never played it. Only after the
recent interest in MMA I looked back at this demo. The demo was good enought
to convince for the full version. The gameplay primarily comes in 2 modes:
&lt;strong>1 x 1 fighter mode&lt;/strong> and a &lt;strong>Career Mode.&lt;/strong>&lt;/p>
&lt;p>If you start with the 1x1 fighter mode, you&amp;rsquo;ll very soon be beaten out. Just
like &lt;a href="https://researchut.com/blog/sony-playstation3-move">The Fight&lt;/a>, this game does need some
practising and getting a hang of the game controls. Uncommon - Attacks are
triggered by the R1 key, with L3 as the modifier for kicks.&lt;/p>
&lt;p>In career mode, you can create your own custom character and start from
scratch to becoming a fighter. You start off with the basics, learn the
standards tactics on how to &lt;strong>Clinch&lt;/strong> , &lt;strong>Take Down&lt;/strong> , &lt;strong>Block&lt;/strong> and
&lt;strong>Submit&lt;/strong> your opponent. With these skills learnt, the game starts to
becoming a real fun. But the real gem about the game is in the &lt;strong>Stamina.&lt;/strong>
The developers ensured that this is not just another &lt;em>&amp;quot; who&amp;rsquo;s the better
button masher&amp;quot;&lt;/em> game. You need to be careful to not run out of stamina. The
stamina is the biggest key to winning in this game, just like in real life
fighting. If you run out of stamina, you can&amp;rsquo;t even submit your opponent even
if you have a full body mount. To beat down the tough fighters you will need
to master the key combinations with great speed. Be fast enough to **Jab + Jab&lt;/p>
&lt;ul>
&lt;li>Hook + Side Kick,** all of this with minimal stamina spent.&lt;/li>
&lt;/ul>
&lt;p>Overall, a great game to have if you like Mixed Martial Arts.&lt;/p></description></item><item><title>Console Gaming - Sony Playstation 3</title><link>https://researchut.com/blog/sony-playstation3-move/</link><pubDate>Wed, 06 Jul 2011 02:24:21 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/sony-playstation3-move/</guid><description>&lt;p>I have been thinking of this topic for some time. I am a happy owner of the
old &lt;strong>Phat PS3 Model.&lt;/strong> At one time, I use to do a fair amount of gaming on my
computers. So when Sony marketed the PlayStation 3 product, it was cool to see
a machine that did:&lt;/p>
&lt;ol>
&lt;li>Gaming&lt;/li>
&lt;li>Movies, Music, Pictures&lt;/li>
&lt;li>Blu-Ray&lt;/li>
&lt;li>Ran Linux&lt;/li>
&lt;/ol>
&lt;p>I convinced myself to buy a PlayStation 3, that I&amp;rsquo;d use it for playing with
Linux apart from gaming. The regular gaming did not excite any more, perhaps
it had to do with the limitation of time. On running Debian on it, was when I
realized that the Linux support was merely a joke. The Linux support included
running a Linux distribution in a VM with not much access to the full hardware
resources. &lt;strong>Not a Great Experience&lt;/strong>&lt;/p>
&lt;p>Soon, as many would be aware, Sony did the meanest thing. They pulled off the
Linux support citing security concerns. To ensure further updates, most users
were left with no choice but to update the firmware. This was &lt;strong>Not A Good
Thing&lt;/strong> as they had advertised the Linux feature during marketing of the
product. Losing the Linux support made the PlayStation pile up more dust, as I
am an occasional gamer.&lt;/p>
&lt;p>But then came the good thing. Sony announced the &lt;strong>PlayStation Move&lt;/strong> product,
its answer to the Motion Gaming. This is the best thing they did and they did
it good. The PS Move product was well priced and is an awesome product. The
level of precision in the PS Move is told to be the best by most of the
reviewers that I follow.&lt;/p>
&lt;p>The 2 games that make the PS Move shine are &lt;strong>&lt;a href="http://us.playstation.com/games-and-media/games/sports-ps3.html">Sports Champions&lt;/a>&lt;/strong>
and &lt;strong>&lt;a href="http://us.playstation.com/games-and-media/games/the-fight-lights-out-ps3.html">The Fight&lt;/a>&lt;/strong>&lt;/p>
&lt;p>The &lt;em>Sports Champions&lt;/em> demo came bundled with the PS Move kit. The disc houses
5 - 6 games on it of which Table Tennis, Sword Fight and Archery are very
good.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/Sports_Champions.png" alt="Sports Champions">&lt;/p>
&lt;p>The good part about these games is that they start off with easy levels but
eventually (the Champions Cup) get tougher. Playing the Champions Cup level is
going to be both, Fun and Tiring. It is surprising that this game was given
just a &lt;a href="http://asia.gamespot.com/ps3/sports/sportschampions/index.html">7.5 rating&lt;/a>, I
think it deserves a 10/10
The folks at &lt;a href="http://www.zindagigames.com/">Zindagi Games&lt;/a> did an awesome job.&lt;/p>
&lt;p>&lt;em>The Fight&lt;/em> started off with a different impression. First of all, Sony did
not push a demo for this game on the PlayStation Network. Even with low
ratings, I took the plunge to buy the game. The game was not responsive. It
wouldn&amp;rsquo;t react to the moves I made physically and that&amp;rsquo;d lead to the opponent
beating me. Game development rules are very simple: Don&amp;rsquo;t make a game which
people can&amp;rsquo;t win, you&amp;rsquo;ll lose your gamers. Also don&amp;rsquo;t make a game which is
just too easy to win, you&amp;rsquo;ll still lose your gamers. A good example is the
&lt;strong>Prince of Persia&lt;/strong> game. Was disappointed with &lt;strong>The Fight&lt;/strong> until I read
this well done &lt;a href="http://pacejmiller.wordpress.com/2010/12/28/game-review-the-fight-lights-out-ps3-move/">review by Pace J Miller&lt;/a>.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/fightlights-thumb-640xauto-17716.jpg" alt="The Fight">&lt;/p>
&lt;p>Both Sony and &lt;a href="http://www.coldwood.com/">Coldwood Interactive&lt;/a> did a bad job
in marketing this game. I think Sony should pay Pace for doing the right
review. &lt;em>The Fight&lt;/em> is a good game. It expects the user to train in the
system. A user cannot just walk-in into the game and start beating the
opponents. &lt;em>The Fight&lt;/em> forces the users to earn points (which can be used to
improve health, stamina and fighting skills) before they can be a fighter fit
enough for fighting the in-game opponents. Points are earned through sparring
sessions and working out in the gym.&lt;/p>
&lt;p>I am glad I bought &lt;em>The Fight&lt;/em>. After reading Pace &amp;rsquo;s review, I have been
thoroughly enjoying this game. It is a great game and at the same time a very
great way to get away from lethargy. Be prepared to sweat like hell when
playing &lt;em>The Fight&lt;/em>&lt;/p>
&lt;p>Despite all the debacle Sony went through (1. pulling off the Linux support 2.
PS3 Compromised 3. PSN Compromised), they still have the best product in the
market for the Motion Gaming experience&lt;/p></description></item><item><title>Fibre Channel over Ethernet - FCoE</title><link>https://researchut.com/blog/fibre-channel-over-ethernet-debian/</link><pubDate>Sat, 21 May 2011 13:31:28 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/fibre-channel-over-ethernet-debian/</guid><description>&lt;p>With the final package, [fcoe-utils](&lt;a href="http://packages.qa.debian.org/f/fcoe-">http://packages.qa.debian.org/f/fcoe-&lt;/a>
utils.html), clearing the NEW packages queue, the Open-FCoE project&amp;rsquo;s &lt;strong>&lt;a href="http://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet">Fibre
Channel over
Ethernet&lt;/a>&lt;/strong> stack is
now in the Debian archive. I had anticipated to have access to FCoE hardware
by the time the packaging would complete but that didn &amp;rsquo;t work out. It has
been delayed, hence the packages are in experimental. If you have access to
FCoE hardware, please test and provide your feedback.&lt;/p></description></item><item><title>Mukthi 11.04 - Free Software/Debian - Philosophy, Design, Merits</title><link>https://researchut.com/blog/mukthi-debian-philosophy/</link><pubDate>Sat, 07 May 2011 11:56:15 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/mukthi-debian-philosophy/</guid><description>&lt;p>I was invited to talk at the &lt;a href="http://mukthi.vrglinug.org/">Mukthi 11.04&lt;/a> event
hosted at the &lt;strong>M. S. Ramaiah Institute of Technology&lt;/strong>.&lt;/p>
&lt;p>I talked about &lt;strong>Free Software/Debian - Philosophy, Design, Merits&lt;/strong>. The
focus was more on the philosophical aspects of why Free Software/Debian. The
slides are available
&lt;a href="http://people.debian.org/~rrs/slides/MSRIT%20-%20Mukthi%202011.pdf">here&lt;/a>.&lt;/p></description></item><item><title>CM7</title><link>https://researchut.com/blog/cm7-samsung-galaxy-s/</link><pubDate>Sat, 07 May 2011 11:46:06 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/cm7-samsung-galaxy-s/</guid><description>&lt;p>CyanogenMod does list Samsung Galaxy S in its list of devices, but given that
it is marked &lt;strong>experimental&lt;/strong> I was not very confident of trying it out. But
yesterday, I took the plunge. Even though experimental, the ROM is pretty
good. And the Cyanogen goodness just makes it awesome. This ROM (also being
AOSP GingerBread) is Super Fast.&lt;/p>
&lt;p>So in a day of use, my impressions:&lt;/p>
&lt;ul>
&lt;li>Battery performance has turned out to be better than what I was used to.&lt;/li>
&lt;li>Cyanogen&amp;rsquo;s enhancements are pretty impressive.&lt;/li>
&lt;li>The CyanogenGalaxyS team&amp;rsquo;s work is of very good quality, even though they&amp;rsquo;ve marked it experimental. (Thanks codeworkx, coolya and the team)&lt;/li>
&lt;/ul>
&lt;p>The CyanogenMod experience is also good because it makes me feel like home,
just like our Debian project.&lt;/p>
&lt;ul>
&lt;li>Everything is AOSP Build&lt;/li>
&lt;li>Non-Free Add-Ons are available from other sources pretty easily&lt;/li>
&lt;li>Device support strategy is just like our architecture support strategy. If it qualifies QA standards, it gets listed as Officially Supported. Otherwise Experimental Support&lt;/li>
&lt;li>Suffers the same proprietary drivers problem.&lt;/li>
&lt;/ul>
&lt;p>For anyone who hasn&amp;rsquo;t tried it on the Galaxy S, give it a
[shot](&lt;a href="http://forum.cyanogenmod.com/topic/17020-all-models-cyanogenmod-7-for-">http://forum.cyanogenmod.com/topic/17020-all-models-cyanogenmod-7-for-&lt;/a>
samsung-galaxy-s-phones-experimental/). It is good.&lt;/p></description></item><item><title>apt-offline 1.1</title><link>https://researchut.com/blog/apt-offline-advanced-options-gui/</link><pubDate>Fri, 08 Apr 2011 07:36:50 -0400</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/apt-offline-advanced-options-gui/</guid><description>&lt;p>I just completed the release of apt-offline version 1.1. This release has many
bug fixes, adds basic proxy support and has a new &lt;strong>Advanced Options&lt;/strong> window
for the &lt;strong>Get&lt;/strong> operation.&lt;/p>
&lt;p>![apt offline advanced options](&lt;a href="https://lh6.googleusercontent.com/__etqz-">https://lh6.googleusercontent.com/__etqz-&lt;/a>
yeP4s/TZ7xpWrqyeI/AAAAAAAABUU/fpZV_1oIn74/s640/apt-offline-advanced-
options.png)&lt;/p></description></item><item><title>Microsoft, Nokia and Qt</title><link>https://researchut.com/blog/nokia-microsoft-qt/</link><pubDate>Mon, 07 Mar 2011 13:08:57 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/nokia-microsoft-qt/</guid><description>&lt;p>Nokia has [announced](&lt;a href="http://blog.qt.nokia.com/2011/03/07/nokia-and-digia-">http://blog.qt.nokia.com/2011/03/07/nokia-and-digia-&lt;/a>
working-together/) that it is selling off its Qt business. This needed to
happen given the change in the company&amp;rsquo;s strategy. Microsoft is a software
vendor providing Mobile OS, with Nokia being one of its consumers. For Nokia,
to have a tier 1 alliance with Microsoft, it would have been important for the
company to show positive gesture. With this move, Microsoft and Nokia will
strengthen their partnership. This move will focus on tighter integration in
between the 2 company&amp;rsquo;s portfolios.&lt;/p>
&lt;p>Nokia mentioned in the announcement that it&amp;rsquo;d further continue Qt core
development. I don&amp;rsquo;t see what value that has to bring to the company. It
either has to do with the company making some money with whatever IP it
acquired in Trolltech, or else, it&amp;rsquo;d be just a phased wise approach in selling
off the Qt business. Also it could be Nokia&amp;rsquo;s &lt;strong>Plan B&lt;/strong> , in case the
&lt;strong>Micro-Noki&lt;/strong> team fails to build the ecosystem that it is aspiring for.&lt;/p>
&lt;p>As for Qt, we&amp;rsquo;ll have to see. Given that it is GPL, we don&amp;rsquo;t have too much to
worry (hopefully).&lt;/p></description></item><item><title>Patents and the Pharmacy Industry</title><link>https://researchut.com/blog/patents-and-pharmaceutical-industries/</link><pubDate>Sat, 26 Feb 2011 05:49:30 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/patents-and-pharmaceutical-industries/</guid><description>&lt;p>Mosf of us would be well versed with the Patent system in general. We have
patents in every sector - Technology, Agriculture, Pharmacy etc. Most readers
in our profession must already be well versed of the Pros/Cons of the Patent
system in Software/Technology. Patents in software are more like ammunition.
The more you have, the stronger you are. We don&amp;rsquo;t seem much cat fight in
Software/Technology because not one organization own all the patents for a
product. An IBM ThinkPad might be using a cool track pad feature which might
be a patent of Dell. Since the finished product comprises of many patents from
different owners in the same industry, it is better to play good with each
other. You scratch my back, I scratch yours.&lt;/p>
&lt;p>But what about the Pharmaceutical Industry? There, one single patent could
comprise the product. I was reading
&lt;a href="http://www.earth.columbia.edu/cgsd/documents/lehman.pdf">this&lt;/a> document from
Bruce Lehman which touches upon Patents and Pharmaceutical Industries, but
couldn&amp;rsquo;t find an answer to my question.&lt;/p>
&lt;p>Say, Glaxo spends a billion in research and comes up with an invention. They
patent the idea and market the product. Given that the medical &amp;ldquo;products&amp;rdquo; are
of a special kind they need to be disclosed. To quote from the linked
document:&lt;/p>
&lt;p>The pharmaceutical industry has an important characteristic that sets it apart
from other&lt;br>
industries that rely on patent protection. In many technology-based industries
it is&lt;br>
possible to keep inventions a secret until the moment they are marketed. This
enables&lt;br>
inventors to delay patent filings until the last possible moment and,
therefore, to&lt;br>
maximize the effect of the 20 year patent term which runs from filing of the
patent&lt;br>
application. The culture of medical research, however, emphasizes very early
disclosure&lt;br>
of inventions, usually long before a resulting product can be placed on the
market. This is&lt;br>
because scientists working in the field of human pathology have an obligation
to share&lt;br>
their findings as soon as possible with their peers so that those peers will
be able to&lt;br>
benefit from the new knowledge in their own research. And, unlike industries
such as&lt;br>
computers and software, the pharmaceutical industry is heavily regulated by
government&lt;br>
agencies to assure the safety and efficacy of products which will be sold to
consumers. In&lt;br>
the United States the Food and Drug Administration performs this function.
Much of the&lt;br>
investment in new drugs is in the clinical trials which are necessary to
satisfy safety and&lt;br>
efficacy regulators. The tolerance for a &amp;ldquo;buyer beware&amp;rdquo; philosophy in the
pharmaceutical&lt;br>
industry is extremely low compared to other industries.&lt;/p>
&lt;p>The challenge is, Glaxo spends a billion in discovering a solution. Glaxo
would want to make returns out of its investment in the product. The reality
is, Glaxo launches the product at price N. Pharmaceutical companies in
developing counties, like India, manufacture an equivalent product at price
N/10. And that product also gets US FDA approved, which would imply that it is
perfectly legal to sell the very same product.&lt;/p>
&lt;p>So how does the patent system work in this scenario? How would the system
ensure that the inventor gets the returns on the investment made in the
research? Or, in other ways, what good is it to acquire a patent for a medical
enhancement?&lt;/p></description></item><item><title>VirtualBox</title><link>https://researchut.com/blog/virtualbox-native-partition/</link><pubDate>Thu, 17 Feb 2011 16:09:06 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/blog/virtualbox-native-partition/</guid><description>&lt;p>I recently ended up acquiring a Windows 7 Professional license. While I rarely
have a need for Windows, that one rare instance is important. Many of the
bank&amp;rsquo;s web interfaces are tightly dependent on IE. I do have a copy of
CrossOver but that doesn&amp;rsquo;t help much. Most times, IE crashes when trying to
render pages. Must be having some OLE dependency.&lt;/p>
&lt;p>So I convinced myself to install Windows7. For my banking needs and also to
catch-up on how that platform has been doing. From my &lt;strong>limited&lt;/strong> usage, my
current impression has been that Windows 7 is a great revive. [passwordless]
sudo is conceptually implemented into Windows 7. I&amp;rsquo;m not sure how good that
would be given that most users would have the tendency to just click on &amp;lsquo;Yes&amp;rsquo;
without paying attention to the pop-up. Anyways&amp;hellip;..I installed Windows 7 onto
one of my spare partitions to get the full experience (than doing it in a VM
image).&lt;/p>
&lt;p>Reboot is pain&amp;hellip; This is what made me look at possibilities of using my
installed copy of Windows 7 into a VM configuration. I&amp;rsquo;ve been using KVM for
things here and there but its UI kept me away. Even with virt-manager&amp;rsquo;s
existence over a year or two, I think they still haven&amp;rsquo;t reached what
&lt;strong>qemulator&lt;/strong> was early. (Just realized that qemulator now is re-branded
VirtualBricks). I also had had looked at VirtualBox sometime before, so now
was the right time to try it again. And it impressed&amp;hellip;&amp;hellip;&amp;hellip;.&lt;/p>
&lt;p>&lt;strong>Requirement&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Use my installed OS Image from the physical partition&lt;/li>
&lt;li>Well integrated User Interface&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Req1&lt;/strong>&lt;/p>
&lt;p>VirutalBox just rocked. There&amp;rsquo;s pretty &lt;a href="http://www.virtualbox.org/manual/ch09.html#rawdisk">decent
documentation&lt;/a> available
on their website covering all aspect of the product.
&lt;a href="http://www.rajatarya.com/website/taming-windows-virtualbox-vm">This&lt;/a> blog
entry is also a good starting point for Req1. To use the physical partition as
the Guest Image for the VM, the following command is required.&lt;/p>
&lt;p>&lt;strong>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
-rawdisk /dev/sda -partitions 1,2,3 -relative -register&lt;/strong>&lt;/p>
&lt;p>The docs have all the details but I&amp;rsquo;ll mention the noteworthy parts. This is
an advanced command not available in the UI. We register our disk/partitions
to the vmdk to be sued with the VM. The &lt;strong>-partitions 1,2,3&lt;/strong> is important.
This basically defines the config as, &amp;ldquo;Attach my disk /dev/sda with
partitions sda1, sda2 and sda3 to the file vmdk&amp;rdquo;. This will ensure that the
guest VM sees all the partitions natively. This is important because without
the full disk outlook grub would go confused. Also this is important to ensure
that Windows 7 senses no hardware change when switching boots in between
Virtual and Native. The &lt;strong>-register&lt;/strong> option is to set this setting permanent
across reboots on the Host OS.&lt;/p>
&lt;p>Windows 7 does not have &lt;strong>Hardware Profiles&lt;/strong> anymore (or to the best of my
knowledge). What that means is that Windows 7, on every switch, would assume a
possible corruption and play safe by asking you to pop-in the Repaid CD. This
is PITA. To overcome this pain, it is important to layout the image settings
as I &amp;rsquo;ve mentioned above so that in either of the modes, Windows 7 feels that
it is the same disk. This ends bringing a very risky situation. With Debian
running: You have rw access to your 2nd and 3rd partition. And then when you
fire-up the VM, &lt;strong>if&lt;/strong> by mistake grub boots into Linux instead of Windows,
kiss your data goodbye. Well, not 100% true, but don&amp;rsquo;t get there.&lt;/p>
&lt;p>A better workaround is this:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Add your disk image (that points to the physical partition) to your VM
config&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Add the gurb-rescue-cdrom.iso provided by the grub-rescue-pc package&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Be very sure that the &lt;strong>only bootable device&lt;/strong> selected is the CDROM device
i.e. grub-rescue-cdrom.iso&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Do this and there&amp;rsquo;ll be no room for error. We simply bypass our native boot
loader and instead boot off the grub rescue iso. Setting the correct partition
persistent is left as an excercise for the reader.&lt;/p>
&lt;p>![](&lt;a href="https://lh6.googleusercontent.com/__etqz-">https://lh6.googleusercontent.com/__etqz-&lt;/a>
yeP4s/TV2MjgmmbSI/AAAAAAAABSk/qKeUfUUrQ8U/s640/vb7.png)&lt;/p>
&lt;p>Okay!! For completeness, this is how it should look.&lt;/p>
&lt;p>&lt;strong>Req 2&lt;/strong>&lt;/p>
&lt;p>With Req1 achieved, I was pretty happy. But Req2 results got me impressed. For
your eyes&amp;hellip;&amp;hellip;.&lt;/p>
&lt;p>![VirtualBox](&lt;a href="https://lh5.googleusercontent.com/__etqz-">https://lh5.googleusercontent.com/__etqz-&lt;/a>
yeP4s/TV2GQLkzhbI/AAAAAAAABSY/mK9vAD2dwGg/s600/vb6.png)&lt;/p>
&lt;p>A pretty neat summary of my Guest VM. You can see most of what it supports.&lt;/p>
&lt;ul>
&lt;li>USB&lt;/li>
&lt;li>PulseAudio&lt;/li>
&lt;li>Shared Folder&lt;/li>
&lt;li>SATA Controller&lt;/li>
&lt;li>VT&lt;/li>
&lt;li>2D/3D (Experimental)&lt;/li>
&lt;/ul>
&lt;p>![Maximized View](&lt;a href="https://lh5.googleusercontent.com/__etqz-">https://lh5.googleusercontent.com/__etqz-&lt;/a>
yeP4s/TV2GQeO2vkI/AAAAAAAABSg/W_EDkJ4kCHc/s600/vb4.png)&lt;/p>
&lt;p>This one&amp;rsquo;s a Maximized Windowed View of the Guest VM running.&lt;/p>
&lt;p>![](&lt;a href="https://lh3.googleusercontent.com/__etqz-">https://lh3.googleusercontent.com/__etqz-&lt;/a>
yeP4s/TV2GQOQNsoI/AAAAAAAABSc/GPaIcJ6f_dk/s640/vb5.png)&lt;/p>
&lt;p>But what impressed me the most is the &lt;strong>Seamless Mode&lt;/strong> that VirtualBox
provides. In the above screenshot, if you notice closely you &amp;rsquo;ll realize that
the desktop displayed is that of KDE&amp;rsquo;s. This is very cool when I use the IE
browser because IE is rendered as almost a regular native application. With
Guest Tools installation, there&amp;rsquo;s no Keyboard Capture/Release. Your Host&amp;rsquo;s
mouse is tightly integrated and will act on events when inside the Guest VM&amp;rsquo;s
display.&lt;/p>
&lt;p>Not every thing can be described in words. You need to use it really
experience its features.&lt;/p>
&lt;p>An awesome product. And the best - GPL. It comes packaged in 2 editions:
Proprietary (that adds proprietary plugins: iSCSI, RDP etc) and OSE Open
Source Edition (which recently saw the USB feature added to it).&lt;/p></description></item><item><title>laptop-mode-tools</title><link>https://researchut.com/post/158/</link><pubDate>Tue, 15 Feb 2011 10:41:23 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/158/</guid><description>&lt;p>I just released &lt;strong>laptop-mode-tools&lt;/strong> version 1.56.&lt;/p>
&lt;p>This release adds many goodies. We now have a better calling application to
rely upon, &lt;strong>udev&lt;/strong>. The linux kernel generates many events based on
conditions. udev is a framework that acts on those events and can call-in
applications based on conditions. This is something I wanted to do for laptop-
mode-tools.&lt;/p>
&lt;p>&lt;strong>Power State&lt;/strong>&lt;/p>
&lt;p>First was power state. The power_supply subsystem can sense changes and
generate events. We simply act on the &lt;strong>change&lt;/strong> action here and call in
laptop-mode-tools because we want laptop-mode-tools run on both &lt;strong>ON_AC&lt;/strong> and
&lt;strong>ON_BAT&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Suspend/Resume&lt;/strong>&lt;/p>
&lt;p>Suspend/Resume was my bigger concern. pm-utils no more likes us. In fact it
now has direct Conflict: defined in the Package Managers. For laptop-mode-
tools, on suspend, there was not much to care about. But I did want to ensure
that we act on resume because:&lt;/p>
&lt;ul>
&lt;li>User could suspend when &lt;strong>ON_AC&lt;/strong>&lt;/li>
&lt;li>Go back home&lt;/li>
&lt;li>Resume when &lt;strong>ON_BAT&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>The &lt;strong>machinecheck&lt;/strong> subsystem helped here. I hope my assumption that this
event in only seen during suspend/resume stands true.&lt;/p>
&lt;p>&lt;strong>Multi Events and Locking&lt;/strong>&lt;/p>
&lt;p>Acting on events is good but can be challenging because the kernel can
generate a large number of events and we have a danger of ending up spawning
just too many instances. &lt;strong>flock&lt;/strong> came to the rescue there.&lt;/p>
&lt;p>So overall, by depending on events, we are better now. We can cut down on many
dependencies. Especially the &lt;strong>Power Management Daemon&lt;/strong> dependency because
different arches had diffrerent managers.&lt;/p>
&lt;p>pm-utils conflict is disappointing especially for the fact that that conflict
is inherited in Debian too. I hope the pm-utils maintainer
&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612710">reconsiders&lt;/a>.
Uninstalling pm-utils has the challenge that the DEs lose the suspend
functionality. Does anyone know how the DEs call them? Can a minor hacky
workaround be provided?&lt;/p></description></item><item><title>apt-offline - 1.0</title><link>https://researchut.com/post/3/</link><pubDate>Mon, 08 Nov 2010 09:55:00 -0500</pubDate><author>rrs@researchut.com (Ritesh Raj Sarraf)</author><guid>https://researchut.com/post/3/</guid><description>&lt;p>Hello World.&lt;/p>
&lt;p>I am very pleased to announce &lt;strong>apt-offline&lt;/strong> , version &lt;strong>1.0&lt;/strong>.&lt;/p>
&lt;p>This release adds a Graphical User Interace to apt-offline.&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apt-offline-main.png" alt="">&lt;/p>
&lt;p>Big thanks to &lt;strong>&lt;a href="http://blog.ideamonk.in/">Abhishek Mishra&lt;/a>&lt;/strong> and &lt;a href="http://milky.manishsinha.net/">&lt;strong>Manish
Sinha&lt;/strong>&lt;/a> who did all the development work to
make this GUI happen.&lt;/p>
&lt;p>Help: I was wondering if there is a logo for APT that I could use in the big
blank space on the main window.&lt;/p>
&lt;p>Apart from the GUI, there are a bunch of bug fixes in this release (which have
already been made available for the Squeeze release also).&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apt-offline-signature.png" alt="Generate Signature Window">&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apt-offline-download.png" alt="Download Window">&lt;/p>
&lt;p>&lt;img src="https://researchut.com/images/apt-offline-install.png" alt="Install Window">&lt;/p>
&lt;p>I look forward to your feedback and comments on the GUI front.&lt;/p>
&lt;p>Note: The GUI in its current form is basic and does not provide all the
features that are available in apt-offline.&lt;/p></description></item></channel></rss>