<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gaëtan Trellu</title>
    <description>The latest articles on DEV Community by Gaëtan Trellu (@goldyfruit).</description>
    <link>https://dev.to/goldyfruit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F344935%2F77adf29f-ceb1-474d-8ac8-3a1cd22ff9b0.jpeg</url>
      <title>DEV Community: Gaëtan Trellu</title>
      <link>https://dev.to/goldyfruit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/goldyfruit"/>
    <language>en</language>
    <item>
      <title>From Mycroft and Ansible to OpenVoiceOS: boring installs, easy updates</title>
      <dc:creator>Gaëtan Trellu</dc:creator>
      <pubDate>Sun, 08 Feb 2026 19:24:27 +0000</pubDate>
      <link>https://dev.to/goldyfruit/from-mycroft-and-ansible-to-openvoiceos-boring-installs-easy-updates-11cl</link>
      <guid>https://dev.to/goldyfruit/from-mycroft-and-ansible-to-openvoiceos-boring-installs-easy-updates-11cl</guid>
      <description>&lt;p&gt;A few years ago, I wrote an opensource.com post about deploying &lt;strong&gt;Mycroft&lt;/strong&gt; on a Raspberry Pi using &lt;strong&gt;Ansible&lt;/strong&gt;. The fun part was voice control; the &lt;em&gt;useful&lt;/em&gt; part was making the whole thing reproducible—because voice assistants are a stack, and stacks don’t forgive “hand-installed on a good day” setups. (&lt;a href="https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible" rel="noopener noreferrer"&gt;Opensource.com&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Since then, the Mycroft ecosystem went through a very public reality check. In February 2023, Mycroft’s CEO explained that without immediate new investment they would have to &lt;strong&gt;cease development&lt;/strong&gt;. (&lt;a href="https://community.openconversational.ai/t/update-from-the-ceo-part-1/13268" rel="noopener noreferrer"&gt;Open Source Conversational AI Community&lt;/a&gt;)&lt;br&gt;
By February 2024, community members were also confirming that &lt;strong&gt;servers associated with &lt;code&gt;mycroft.ai&lt;/code&gt; were down&lt;/strong&gt;—the kind of event that turns “my assistant is quirky” into “my assistant is suddenly unemployed.” (&lt;a href="https://community.openconversational.ai/t/is-the-mycroft-server-gone-for-good-or-just-down/14212" rel="noopener noreferrer"&gt;Open Source Conversational AI Community&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Open voice assistants didn’t disappear, though. The community kept building, and &lt;strong&gt;OpenVoiceOS (OVOS)&lt;/strong&gt; matured into a platform you can run across devices—with a focus on privacy, security, and customization. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I’m writing this one as the author of &lt;strong&gt;&lt;code&gt;ovos-installer&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;ovos-docker&lt;/code&gt;&lt;/strong&gt;. Those projects exist for a simple reason:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I wanted OVOS installs and upgrades to be boring.&lt;/strong&gt;&lt;br&gt;
Boring means repeatable, automatable, supportable—and much easier to enjoy.&lt;/p&gt;


&lt;h2&gt;
  
  
  What is OpenVoiceOS?
&lt;/h2&gt;

&lt;p&gt;OVOS is a community-driven, open-source voice AI platform designed for building custom voice-controlled interfaces across devices. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;br&gt;
It also answers a question I get a lot: &lt;em&gt;“Is this still related to Mycroft?”&lt;/em&gt; The OVOS FAQ explains that OVOS started as &lt;strong&gt;MycroftOS&lt;/strong&gt;, was renamed to avoid trademark issues, and evolved toward maintaining its own enhanced reference fork while keeping compatibility goals in mind. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;A detail that matters operationally: OVOS is designed so that &lt;strong&gt;&lt;code&gt;ovos-core&lt;/code&gt; does not require a backend internet server to operate by default&lt;/strong&gt;, although your choice of STT/TTS plugins and skills can still require network connectivity. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;


&lt;h2&gt;
  
  
  Pick your “deployment personality”
&lt;/h2&gt;

&lt;p&gt;OVOS keeps the choice simple: &lt;strong&gt;Docker&lt;/strong&gt; or &lt;strong&gt;Python&lt;/strong&gt;. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python virtual environment&lt;/strong&gt; is great if you want to develop, tweak, and stay closer to the system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Containers&lt;/strong&gt; are great if you want stability, isolation, and an update path that doesn’t involve solving dependency archaeology.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OVOS explicitly presents those as the two main install approaches. (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;


&lt;h2&gt;
  
  
  Install OVOS with ovos-installer
&lt;/h2&gt;

&lt;p&gt;The OVOS downloads page points laptop/desktop users (and anyone installing “on top of an existing OS”) toward the installer, noting it supports major Linux distributions and Raspberry Pi 3/4/5. (&lt;a href="https://www.openvoiceos.org/downloads" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ovos-installer&lt;/code&gt; is an OVOS (and optionally HiveMind) installer for Linux. It supports interactive installs, scenario-based automation, and optional container deployment. (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;
&lt;h3&gt;
  
  
  Quickstart
&lt;/h3&gt;

&lt;p&gt;Prereqs are intentionally basic: &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, and &lt;code&gt;sudo&lt;/code&gt;. (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/OpenVoiceOS/ovos-installer/main/installer.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer to inspect before running (recommended when you’re wearing your “operator” hat), the README explicitly suggests downloading the script first, reviewing it, then executing it. (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;A small but important ops detail: the installer targets a supported Python runtime in its virtualenv (defaulting to &lt;strong&gt;Python 3.11&lt;/strong&gt;) and uses &lt;code&gt;uv&lt;/code&gt; to provision it when needed. (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Automate installs with scenario.yaml
&lt;/h2&gt;

&lt;p&gt;This is where the Ansible brain kicks in.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ovos-installer&lt;/code&gt; supports &lt;strong&gt;non-interactive installs&lt;/strong&gt; via a scenario file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.config/ovos-installer/scenario.yaml&lt;/code&gt; (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;A minimal example (container method, default skills, Pi tuning enabled) looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;uninstall&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;containers&lt;/span&gt;
&lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;testing&lt;/span&gt;
&lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ovos&lt;/span&gt;
&lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;extra_skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;raspberry_pi_tuning&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The README documents the meaning of these keys (including the &lt;code&gt;uninstall&lt;/code&gt; flag and the available install methods). (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Fun footnote: yes, it’s YAML—but it’s YAML with purpose, and it’s the kind you can keep in git without waking up in a cold sweat later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Run OVOS in containers with ovos-docker
&lt;/h2&gt;

&lt;p&gt;For container deployments, &lt;code&gt;ovos-docker&lt;/code&gt; provides container images and compose bundles for OVOS across &lt;code&gt;x86_64&lt;/code&gt; and &lt;code&gt;aarch64&lt;/code&gt;. (&lt;a href="https://github.com/OpenVoiceOS/ovos-docker" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If you’ve ever tried to explain to someone why “a voice assistant is actually a dozen services,” OVOS’ own blog makes the container case clearly: running OVOS micro-services in containers improves isolation, and makes the platform easier to manage and update. (&lt;a href="https://blog.openvoiceos.org/posts/2023-05-02-openvoiceos-now-available-on-containers" rel="noopener noreferrer"&gt;OpenVoiceOS Blog&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The container docs walk through a standard flow (clone the repo, create directories, run the compose bundles). For example, the docs show cloning the sources and working from the &lt;code&gt;compose/&lt;/code&gt; directory. (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/installation/requirements/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/OpenVoiceOS/ovos-docker.git ~/ovos-docker
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/ovos-docker/compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The easy way to update your current OVOS instance
&lt;/h2&gt;

&lt;p&gt;This is the part I wanted to make &lt;em&gt;delightfully uneventful&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update a virtualenv/systemd install
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ovos-installer&lt;/code&gt; documents a very straightforward update path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Optionally back up your configuration (&lt;code&gt;~/.config/mycroft/mycroft.conf&lt;/code&gt; or &lt;code&gt;~/ovos/config/mycroft.conf&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Re-run the installer&lt;/li&gt;
&lt;li&gt;When prompted, answer &lt;strong&gt;“No”&lt;/strong&gt; to: &lt;em&gt;“Do you want to uninstall Open Voice OS?”&lt;/em&gt; (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. No bespoke “upgrade script,” no guessing which dependency set is current—just re-run the tool that knows how to converge the system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update a container stack
&lt;/h3&gt;

&lt;p&gt;The OVOS container documentation is equally blunt (and I mean that as a compliment):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To update the deployed stack, use the &lt;strong&gt;exact same command&lt;/strong&gt; you used when you initially deployed it. (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/update/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Because each service is configured with &lt;code&gt;pull_policy: always&lt;/code&gt;, when a new image is published with the same tag, &lt;code&gt;docker compose&lt;/code&gt; (or &lt;code&gt;podman-compose&lt;/code&gt;) will pull it and recreate the container. (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/update/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example commands (from the docs) show typical bundles; the important part is the “same command” rule and using your bundle set consistently. (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/update/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If you want to change which image tag/version you deploy, update the &lt;code&gt;.env&lt;/code&gt; file accordingly; the docs also note that the &lt;code&gt;alpha&lt;/code&gt; tag images are rebuilt nightly from the &lt;code&gt;dev&lt;/code&gt; branch. (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/update/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing: keep the fun, remove the pain
&lt;/h2&gt;

&lt;p&gt;My 2021 Mycroft + Ansible post was basically an attempt to make an open voice assistant “liveable” as infrastructure. (&lt;a href="https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible" rel="noopener noreferrer"&gt;Opensource.com&lt;/a&gt;)&lt;br&gt;
OVOS is the continuation of that idea, and &lt;code&gt;ovos-installer&lt;/code&gt; + &lt;code&gt;ovos-docker&lt;/code&gt; are my contribution to the unglamorous part: installs, updates, and repeatability.&lt;/p&gt;

&lt;p&gt;Because once installation stops being a boss fight, you can get back to the fun stuff—like making your house respond to voice commands &lt;strong&gt;without&lt;/strong&gt; renting space in someone else’s cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My earlier opensource.com post on Mycroft + Ansible (&lt;a href="https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible" rel="noopener noreferrer"&gt;Opensource.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OVOS project overview + FAQ (Docker vs Python, offline notes, background) (&lt;a href="https://www.openvoiceos.org/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OVOS downloads page (installer recommendation and supported devices) (&lt;a href="https://www.openvoiceos.org/downloads" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ovos-installer&lt;/code&gt; README (install + &lt;strong&gt;update&lt;/strong&gt; guidance) (&lt;a href="https://github.com/OpenVoiceOS/ovos-installer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OVOS container docs: &lt;strong&gt;Update Open Voice OS&lt;/strong&gt; (&lt;a href="https://openvoiceos.github.io/ovos-docker/getting-started/docker/update/" rel="noopener noreferrer"&gt;Open Voice OS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OVOS blog note on why containers help manage/update a micro-service stack (&lt;a href="https://blog.openvoiceos.org/posts/2023-05-02-openvoiceos-now-available-on-containers" rel="noopener noreferrer"&gt;OpenVoiceOS Blog&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>opensource</category>
      <category>voiceassistant</category>
      <category>ovos</category>
    </item>
  </channel>
</rss>
