<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://www.linuxjournal.com/tag/custom-distributions">
  <channel>
    <title>Custom Distributions</title>
    <link>https://www.linuxjournal.com/tag/custom-distributions</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Build a Custom Minimal Linux Distribution from Source, Part II</title>
  <link>https://www.linuxjournal.com/content/build-custom-minimal-linux-distribution-source-part-ii</link>
  <description>  &lt;div data-history-node-id="1340348" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock-Diy-blue-round-web-icon-Circl-208581040_0.jpg" width="600" height="600" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Follow along with this step-by-step guide to creating your own
distribution.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
In an &lt;a href="https://www.linuxjournal.com/content/diy-build-custom-minimal-linux-distribution-source"&gt;article
in the June 2018 issue of &lt;em&gt;LJ&lt;/em&gt;&lt;/a&gt;, I introduced a basic recipe for building your
own minimal Linux-based distribution from source code packages. The guide
started with the compilation of a cross-compiler toolchain that ran on
your host system. Using that cross-compiler, I explained how to build a
generic x86-64 target image,
and the Linux Journal Operating System (LJOS) was born.
&lt;/p&gt;

&lt;p&gt;
This guide builds on what you learned from &lt;a href="https://www.linuxjournal.com/content/diy-build-custom-minimal-linux-distribution-source"&gt;Part
I&lt;/a&gt;, so if you haven't already, be sure to go through those
original steps up to the point where you are about to package the target
image for distribution.
&lt;/p&gt;

&lt;h3&gt;
Glossary&lt;/h3&gt;

&lt;p&gt;
Here's a quick review the
terminology from the first part of this series:
&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
&lt;strong&gt;Host&lt;/strong&gt;: the &lt;em&gt;host&lt;/em&gt; signifies the very machine on
which you'll
be doing the vast majority of work, including cross-compiling and
installing the target image.
&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Target&lt;/strong&gt;: the &lt;em&gt;target&lt;/em&gt; is the final cross-compiled operating
system that you'll be building from source packages. You'll build it
using the cross-compiler on the &lt;em&gt;host&lt;/em&gt; machine.
&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Cross-Compiler&lt;/strong&gt;:
you'll be building and using a &lt;em&gt;cross-compiler&lt;/em&gt; to
create the &lt;em&gt;target&lt;/em&gt; image on the &lt;em&gt;host&lt;/em&gt;
machine. A cross-compiler is built to run on a host machine, but it's used
to compile for an architecture or microprocessor that isn't compatible
with the target machine.
&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;
Gathering the Packages&lt;/h3&gt;

&lt;p&gt;To follow along, you'll need the following:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
busybox-1.28.3.tar.bz2 (the same package used in Part
I).
&lt;/li&gt;

&lt;li&gt;
clfs-embedded-bootscripts-1.0-pre5.tar.bz2 (the same package used in Part
I).
&lt;/li&gt;

&lt;li&gt;
Dropbear-2018.76.tar.bz2.
&lt;/li&gt;

&lt;li&gt;
Iana-etc-2.30.tar.bz2.
&lt;/li&gt;

&lt;li&gt;
netplug-1.2.9.2.tar.bz2.
&lt;/li&gt;

&lt;li&gt;
sysstat-12.1.1.tar.gz.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
&lt;em&gt;Note: I ended up rebuilding this distribution
with the 4.19.1 Linux kernel. If you want to do the same, be sure
to install the development package of the OpenSSL libraries on your host
machine or else the build will fail. On distributions like Debian or
Ubuntu, this package is named libssl-dev.&lt;/em&gt;
&lt;/p&gt;

&lt;h3&gt;
Fixing Some Boot-Time Errors&lt;/h3&gt;

&lt;p&gt;
After following along with Part I, you will have noticed that during boot time, a couple
errors are generated (Figure 1).
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/12648f1.png" width="650" height="362" alt="""" class="image-max_650x650" /&gt;&lt;p&gt;
&lt;em&gt;Figure 1. Errors generated
during the init process of a system boot.&lt;/em&gt;
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/build-custom-minimal-linux-distribution-source-part-ii" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Thu, 28 Mar 2019 11:30:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1340348 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>January 2019, #294: The Distributions Issue</title>
  <link>https://www.linuxjournal.com/content/distributions-issue</link>
  <description>  &lt;div data-history-node-id="1340355" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/LJ294-Jan2019-Cover-wide.jpg" width="800" height="400" alt="January cover" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/bryan-lunduke" lang="" about="https://www.linuxjournal.com/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Bryan Lunduke&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Do you remember your first distro?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
The first version of Linux I truly used, for any length of time, was back at
the end of the 1990s—in &lt;em&gt;Ye Olden Times&lt;/em&gt;, when 56k modems, 3.5" floppies and VGA CRT monitors reigned supreme.
&lt;/p&gt;

&lt;p&gt;
Linux itself had been a thing for a number of years by this point—with
both SUSE (then known as the gloriously mixed-case and punctuation-filled
S.u.S.E.) and Red Hat doing good business supporting it—when I decided
to really give this "Free" operating system a try.
&lt;/p&gt;

&lt;p&gt;
Because I'm a nerd. And that's what we do.
&lt;/p&gt;

&lt;p&gt;
I remember the day well. It was cold. It was rainy. And I was taking an
extended lunch break from my job at Microsoft (seriously). My days—and,
all too often, nights—spent testing Windows NT 5 (before it was renamed
Windows 2000) had taken a toll. I had reached peak "burn out".
&lt;/p&gt;

&lt;p&gt;
After a mildly rejuvenating, two-hour long, burger-eating (and venting about
our job) session with a co-worker, we made our way to the big-box computer
store close to Microsoft's main campus. Once inside, we bee-lined it for the
Operating System section (this was back when computer stores had rows upon
rows of actual boxes that contained actual physical media, which, in turn,
contained actual software).
&lt;/p&gt;

&lt;p&gt;
Several versions of Windows were on display, and, lo and behold, right
there next to them, was S.u.S.E. Linux—in a box. I grabbed it
immediately. It was heavy. There were several CDs inside along with a
manual (which would turn out to be necessary simply to get the system to
boot).
&lt;/p&gt;

&lt;p&gt;
Fifteen minutes later, we were back in my office installing Linux on one of my
little Dell towers.
&lt;/p&gt;

&lt;p&gt;
That's right. My first full-time Linux machine? A Microsoft, company-issued
work computer. This was my way of "sticking it to the man"—and boy did it
feel good.
&lt;/p&gt;

&lt;p&gt;
Were there problems with my first foray into Linux? You bet. The sound card
didn't work. Getting an X Server running (with any sort of GUI) was a mildly
mystifying process. And, heck, just getting the darn thing to boot took the
better part of an afternoon. But, even with those challenges, I was in love.
&lt;/p&gt;

&lt;p&gt;
Thus, my 20-year long hobby of "installing every Linux distribution I can get
my grubby little hands on" was born—right there on Microsoft's main
campus,
using funds I earned from my job at Microsoft, on Microsoft-owned hardware,
using Microsoft-supplied electricity and company time.
&lt;/p&gt;

&lt;p&gt;
Shh. Don't tell Ballmer.
&lt;/p&gt;

&lt;p&gt;
From that point onward, one of the things about Linux that always has made me
smile is the wide variety of distributions out there in the world. There
seems to be one custom-made for every man, woman and child on planet Earth.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/distributions-issue" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 02 Jan 2019 15:30:00 +0000</pubDate>
    <dc:creator>Bryan Lunduke</dc:creator>
    <guid isPermaLink="false">1340355 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Custom Embedded Linux Distributions</title>
  <link>https://www.linuxjournal.com/content/custom-embedded-linux-distributions</link>
  <description>  &lt;div data-history-node-id="1339636" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/12278f1.png" width="698" height="600" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/michael-j-hammel" lang="" about="https://www.linuxjournal.com/users/michael-j-hammel" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Michael J. Hammel&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
&lt;em&gt;The proliferation of inexpensive IoT boards means the time has come to
gain control not only of applications but also the entire software platform.
So, how do you build a custom distribution with cross-compiled applications
targeted for a specific purpose? As Michael J. Hammel explains here, it's not as hard as you might think.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
Why Go Custom?&lt;/h3&gt;

&lt;p&gt;
In the past, many embedded projects used off-the-shelf distributions and
stripped them down to bare essentials for a number of reasons. First,
removing unused packages reduced storage requirements. Embedded systems are
typically shy of large amounts of storage at boot time, and the storage
available, in non-volatile memory, can require copying large amounts of the
OS to memory to run. Second, removing unused packages reduced possible
attack vectors. There is no sense hanging on to potentially vulnerable
packages if you don't need them. Finally, removing unused packages reduced
distribution management overhead. Having dependencies between packages
means
keeping them in sync if any one package requires an update from the upstream
distribution. That can be a validation nightmare.
&lt;/p&gt;

&lt;p&gt;
Yet, starting with an existing distribution and removing packages isn't as
easy as it sounds. Removing one package might break dependencies held by a
variety of other packages, and dependencies can change in the upstream
distribution management. Additionally, some packages simply cannot be
removed without great pain due to their integrated nature within the boot or
runtime process. All of this takes control of the platform outside the
project and can lead to unexpected delays in development.
&lt;/p&gt;

&lt;p&gt;
A popular alternative is to build a custom distribution using build tools
available from an upstream distribution provider. Both Gentoo and Debian
provide options for this type of bottom-up build. The most popular of these
is probably the Debian debootstrap utility. It retrieves prebuilt core
components and allows users to cherry-pick the packages of interest in
building their platforms. But, debootstrap originally was only for x86
platforms. Although there are ARM (and possibly other) options now, debootstrap
and Gentoo's catalyst still take dependency management away from the
local project.
&lt;/p&gt;

&lt;p&gt;
Some people will argue that letting someone else manage the platform software
(like Android) is much easier than doing it yourself. But, those
distributions are general-purpose, and when you're sitting on a lightweight,
resource-limited IoT device, you may think twice about any any advantage that
is taken out of your hands.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/custom-embedded-linux-distributions" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Thu, 01 Feb 2018 15:55:42 +0000</pubDate>
    <dc:creator>Michael J. Hammel</dc:creator>
    <guid isPermaLink="false">1339636 at https://www.linuxjournal.com</guid>
    </item>

  </channel>
</rss>
