Custom D.E.O.T. V2.0+/Clockwork OS v0.5 image - With customised DEOT interface, Kernel 5.7, Optional 1400MHz OC, Debian 10 Buster, Retroarch 1.9.0, Mupen64+ plus more! (Current build: 200903)

RetroArch 1.8.9 has just been released. I’ll test it out on my image, and see how it goes.
For anyone wanting to do the same, there is a script in Utils that will allow you to update your Retroarch.
A reminder: Be careful when in the Utils folder, and running things. Read up about what each script does in the OP before running them. I haven’t put any confirmation dialogue boxes written in.

In the case of the Retroarch Update script, running it will make your Gameshell seemingly unresponsive with the “Projecting” screen for at least half an hour or so. Maybe more. Most of the time is spent building, so you don’t have to worry too much about having the fastest internet in the world. Leave it for at least 45 minutes, just to be sure, and if you really want to check on its progress, SSH in and run it from there. If this is all too confusing, then don’t use it. It’s only there for convenience.

Looking towards the future, I am in the process of streamlining a clean Gameshell launcher, using the minimal debian image as a base. Of course, being based on a SID build, I am having a fun time backporting a bunch of dependencies, and finding out what is current and out of date in the clockwork GitHub repository.

However, what if development got poured into the LauncherGO instead, and we get that running properly? Having it start from scratch, and optimised from there on could be a great way to get things working. From what I have heard, the LauncherGO was being maintained by one person only.

For those interested, here is my process. It’s still very much a WIP on the Python based launcher, but the start to potentially a tutorial for anyone to make their own images from scratch, and update and customise aspects of it in a modular manner. Think of it as the opposite of the DEOT OS. Instead of being filled with features, it will be the Gameshell OS with absolutely nothing. Of course, if someone else has any more experience, let me know. I am by no means a professional when it comes to any of this, and just do it as a hobby.

Building from scratch

This just a build using the minimal debian image as a base, in an attempt at making a clean state stock Gameshell launcher.

Currently with the Gameshell, I am finding that Retroarch is running faster than the standalone emulators, more or less across the board.
Cores from Retroarch are fairly straightforward to install, remove, and generally don’t break.

I’ll try to provide individual scripts to install standalone along the way, so you can build your Gameshell more to your own liking. In addition to this, I’ll also provide scripts install other hacks, eg universal volume control, batmon etc. Potentially these can all be uploaded to a warehouse repository, and accessible via the gameshell.

These install instructions are basically no different to what is already on Github.
https://github.com/clockworkpi/launcher
But I’ll reiterate it anyway, for the sake of documentation, and potential modification in future, since we are building on an sid bullseye release, instead of jesse.

  1. SSH into your gameshell as root via USB. You can find the IP address in the retroarch Information>Network Information menu item. (Interface (usb0))
ssh root@XX.XX.XX.XX

Answer yes to any questions to allow access. There is no password for root.

  1. Edit the wpa_supplicant.conf to add your wifi details.
nano /etc/wpa_supplicant/wpa_supplicant.conf

(write out file with ctrl+o, then exit nano with ctrl+x)
Reboot,

systemctl reboot 

and then repeat the process in step 1, SSHing in via Wifi. (Interface (wlan0))
(you can probably set up some form of internet tunnelling via USB, but I don’t want to go into that here)

  1. Enable su mode and install sudo and fdisk.
su -
apt-get update
apt-get install sudo fdisk -y
  1. Expand the partition.
echo -e "d\n2\nn\np\n2\n94208\n\nN\nw\n" | fdisk /dev/mmcblk0
resize2fs /dev/mmcblk0p2

Double check to make sure your partition size is correct.

lsblk

And then reboot.

systemctl reboot
  1. Add CPI user, groups and permissions. (Github prefaces a lot of the commands with sudo, however you shouldn’t need this, as you are logged in as root)
adduser cpi  
groupadd cpifav -g 31415  
adduser cpi cpifav

Set the password (cpi is the default used in the forum and its tutorials), confirm the password, and use push ENTER for each prompted field to use default contact details. (or put in your own if you want)

  1. Set locale.
echo "export LANGUAGE=C.UTF-8">>~/.bash_profile
echo "export LANG=C.UTF-8">>~/.bash_profile
echo "export LC_ALL=C.UTF-8">>~/.bash_profile

And then reboot.

systemctl reboot
  1. Create necessary directories.
mkdir -p /home/cpi/apps/emulators  
mkdir -p /home/cpi/games  
mkdir -p /home/cpi/music  
  1. Install dependent packages. (Be patient) (Github prefaces a lot of the commands with sudo, however you shouldn’t need this, as you are logged in as root) (A lot of the python files are no longer valid, so the list has been updated, compared to Github; separating deports out - this can probably be cleaned up a lot)
apt-get -y install mpd ncmpcpp git libuser
apt-get -y install python-wicd python-pygame python3-pip

pip install validators numpy requests python-mpd2 beeprint
  1. The following packages will need to be backported: python-gobject wicd-curses wicd python-pip python-pycurl python-alsaaudio python-xlib
    source
# Install Debian packaging tools
apt-get install packaging-dev debian-keyring devscripts equivs

# Add a stable apt source
echo "deb-src http://deb.debian.org/debian/ stable main contrib non-free" | tee /etc/apt/sources.list.d/stable.list

# Update
apt-get update

# Download sources
mkdir /root/backports/
cd /root/backports/
apt source python-gobject/stable wicd-curses/stable wicd/stable python-pip/stable python-pycurl/stable python-alsaaudio/stable python-xlib/stable

# Remove apt sources
rm /etc/apt/sources.list.d/stable.list

# Update
apt-get update
  1. Install build dependencies, build a package properly without GPG signing the package, and install
cd /root/backports/pygobject-3.30.4
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install ../pygobject-build-deps_3.30.4-1_all.deb

cd /root/backports/wicd-1.7.4+tb2
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install wicd-build-deps_1.7.4+tb2-6_all.deb

cd /root/backports/python-pip-18.1
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install python-pip-build-deps_18.1-5_all.deb

cd /root/backports/pycurl-7.43.0.2
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install 

cd /root/backports/pyalsaaudio-0.8.4
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install 

cd /root/backports/python-xlib-0.23
mk-build-deps --install --remove
dch --bpo
dpkg-buildpackage -us -uc
apt-get -y install 
  1. “With pip install and virtualenv.”
mkvirtualenv launcher
pip install -r requirements.txt
  1. Create “.mpd_cpi.conf” config. This is different to the one found on GitHub, updated to reflect newer Debian builds. We are logged in as root, so the ~ alias denoting the home directory won’t be the correct path.
nano /home/cpi/.mpd_cpi.conf
music_directory		"/home/cpi/music"
playlist_directory	"/home/cpi/.mpd/playlists"
db_file			"/home/cpi/.mpd/tag_cache"
log_file		"/home/cpi/.mpd/mpd.log"
pid_file		"/home/cpi/.mpd/pid"
state_file		"/home/cpi/.mpd/state"
sticker_file		"/home/cpi/.mpd/sticker.sql"
user			"cpi"
bind_to_address		"/tmp/mpd.socket"

auto_update		"yes"
auto_update_depth	"2"

input {
        plugin "curl"
}

audio_output {
	type	"alsa"
	name	"ALSA Device"
}

audio_output {
	type	"fifo"
	name	"my_fifo"
	path	"/tmp/mpd.fifo"
	format	"44100:16:2"
}

filesystem_charset	"UTF-8"
# id3v1_encoding		"UTF-8"

# QOBUZ input plugin
input {
        enabled    "no"
        plugin     "qobuz"
#        app_id     "ID"
#        app_secret "SECRET"
#        username   "USERNAME"
#        password   "PASSWORD"
#        format_id  "N"
}

# TIDAL input plugin
input {
        enabled      "no"
        plugin       "tidal"
#        token        "TOKEN"
#        username     "USERNAME"
#        password     "PASSWORD"
#        audioquality "Q"
}

# Decoder #####################################################################
#

decoder {
        plugin                  "hybrid_dsd"
        enabled                 "no"
#       gapless                 "no"
}

(write out file with ctrl+o, then exit nano with ctrl+x)

  1. Clone launcher and Menu Git repository. The directory structure in Github is a legacy location that shouldn’t be used. Use this one.
cd /home/cpi/
git clone https://github.com/clockworkpi/launcher.git

cd /home/apps/
git clone https://github.com/clockworkpi/Menu.git
  1. Build Retroarch.
apt-get build-dep retroarch
git clone https://github.com/libretro/RetroArch.git retroarch
cd /root/retroarch/
./configure
make -j2
make install
  1. End the SSH session, and login in as cpi. (Use the IP address you used in step 2)
ssh cpi@XX.XX.XX.XX

N.B. There’s a lot of issues with backporting, and dependency installation as it currently is. Either we’ll need to wait for them to be upgraded, spend a lot of time manually finding out which dependencies we need (and consequently which dependencies THEY need and so forth) or see if the launcher can use any alternative dependencies.

7 Likes