favicon here hometagsblogmicrobio cvtech cvgpg keys

Packaging Crystal Software for openSUSE

#crystal #opensuse #packaging

Soc Virnyl Estela | 2023-07-31 | reading time: ~4min

Prerequisites§

You will need the following:

Check with zypper if osc is installed.

Tip: Use the cnf command to check which package osc comes from.

cnf osc

Recipe§

The following subtopics explain how to package crystal software step-by-step. Adjust accordingly based on your setup.

Create a new package§

You can do it at https://build.opensuse.org/ but if you prefer the commandline, you can do for example

osc mkpac blahaj
cd blahaj

In this tutorial, we will try to package BLAHAJ using the shards project and dependency manager for Crystal and tar.

Package without a dependency§

Write the specfile§

Using your preferred editor, create a file named blahaj.spec. The following prelude should be enough for the specfile:

Name: blahaj
Version: 2.1.0
License: BSD-2-Clause
Summary: Gay sharks at your local terminal
Url: https://github.com/GeopJr/BLAHAJ
Source0: https://github.com/GeopJr/BLAHAJ/archive/refs/tags/v2.1.0.tar.gz#/%{name}-%{version}.tar.gz
Source1: vendor.tar.zst
BuildRequires: crystal
BuildRequires: shards
BuildRequires: make

How do I have shards and crystal?

You can branch packages from my home project at Open Build Service - https://build.opensuse.org/project/show/home:uncomfyhalomacro. Or even just add an repository image of that project. I have shards and crystal there. The latter can also be found at https://build.opensuse.org/package/show/devel:languages:crystal/crystal if you want that too.

For the sake of simplicity, we will assume that we are going to use crystal, shards, and make at your home project in Open Build Service.

Add the following sections: description, prep, build, install, files and changelog section.

Name: blahaj
Version: 2.1.0
Release: 0
License: BSD-2-Clause
Summary: Colorize your terminal with gay sharks
Url: https://github.com/GeopJr/BLAHAJ
Source0: https://github.com/GeopJr/BLAHAJ/archive/refs/tags/v2.1.0.tar.gz#/%{name}-%{version}.tar.gz
BuildRequires: crystal
BuildRequires: shards
BuildRequires: make

%description
Apart from a cute cuddly shark plushie from IKEA, BLÅHAJ is a lolcat-like CLI tool
that colorizes your input, shows flags and prints colorful sharks!

It has a wide variety of flags/colors to choose from and many options from flag size
to whether to colorize by line, word or character.

%prep

%build

%install

%files

%changelog

At the root of your project package e.g. home:yourusername/blahaj, run osc service localrun download_files. You will get a file called blahaj-2.1.0.tar.gz. Extracting the file gets us the directory BLAHAJ-2.1.0/. This means that in our %prep section, we need to add %setup -qa1 -n BLAHAJ-%{version}. This is to redirect the rpm macros that building should be at RPM_BUILDDIR/BLAHAJ-2.1.0/ since by default, it is RPM_BUILDDIR/nameofpackage-version/ based on the Name: and Version: RPM specfile prelude.

Building and Installing the package§

The following sections should be easy here since make as build dependency has convenient macros such as %make_build and %make_install.

Name: blahaj
Version: 2.1.0
Release: 0
Summary: Colorize your terminal with gay sharks
License: BSD-2-Clause
Url: https://github.com/GeopJr/BLAHAJ
Source0: https://github.com/GeopJr/BLAHAJ/archive/refs/tags/v2.1.0.tar.gz#/%{name}-%{version}.tar.gz
BuildRequires: crystal
BuildRequires: shards
BuildRequires: make

%description
Apart from a cute cuddly shark plushie from IKEA, BLÅHAJ is a lolcat-like CLI tool
that colorizes your input, shows flags and prints colorful sharks!

It has a wide variety of flags/colors to choose from and many options from flag size
to whether to colorize by line, word or character.

%prep
%setup -q -n BLAHAJ-%{version}

%build
%make_build

%install
%make_install

%files
%{_bindir}/blahaj
%doc README.md CODE_OF_CONDUCT.md
%license LICENSE

%changelog

As for %files, you can just do a "best guess" or "best observation" approach. Here, we based it from the Makefile and for documentation and license, those are self-explanatory.

Changelog can be left as is since we are not Fedora 😘. We use blahaj.changes for that generated with osc vc. It creates a temporary file you can edit from like below

-------------------------------------------------------------------
Mon Jul 31 12:34:07 UTC 2023 - Your Name <youremail@example.com>

- Initial spec for blahaj 2.1.0

Add the files§

Add the files by running the command

osc add blahaj.spec blahaj-2.1.0.tar.gz blahaj.changes

And then push it to your home project at Open Build Service with osc ci, which allows you to check the diff and see what was changed based from the blahaj.changes file.

Check if it builds correctly§

Now check your new blahaj package at your home project. If it fails, investigate what went wrong! Check mine at https://build.opensuse.org/package/show/home:uncomfyhalomacro/blahaj.

NOTE: It seems at the time of writing, I missed some dependencies or optional dependencies for crystal! Anyway, I am confident it will build this correctly after that's fixed.

Package With dependencies§

This is where tar and shards comes in. An example of this is shards itself. See https://build.opensuse.org/package/show/home:uncomfyhalomacro/shards.

What I did here is at the root of the project e.g. home:yourname/shards, I extracted the shards source tarball, tar xvf shards-0.17.3.tar.gz. Changed directory to the extracted directory, shards-0.17.3/ and then ran shards check and shards install. You will get a new directory called lib/. This is where you vendor your dependencies like how Rust and Go do.

To vendor it, it's simple. Just run

tar --zstd -cvf vendor.tar.zst lib/

Copy vendor.tar.zst to the root of the project package folder. Add it to one of the sources of your project and adjust your %setup with flags -qa1 which a1 means extract Source1: vendor.tar.zst to the root of RPM_BUILDDIR/shards-0.17.3 including the root folder of the archive lib/.

This will create a new directory called lib/, and contains other crystal packages that are dependencies of that project.

Then I just used crystal to build shards as seen from the build section and do a manual install with install command at the install section.

Other possibilities§

You can also remove make or shards as well if you prefer just using crystal on the build section.

Articles from blogs I follow around the net

Session Round 2

Last week, I wrote a blog post succinctly titled, Don’t Use Session. Two interesting things have happened since I published that blog: A few people expressed uncertainty about what I wrote about using Pollard’s rho to attack Session’s design (for which, I …

via Dhole MomentsJanuary 20, 2025

Status update, January 2025

Hi all! FOSDEM is approaching rapidly! I’ll be there and will give a talk about modern IRC. In wlroots land, we’ve finally merged support for the next-generation screen capture protocols, ext-image-capture-source-v1 and ext-image-copy-capture-v1! Compared …

via emersionJanuary 18, 2025

The tech-industrial complex

I moved this blog off AWS to a local VPS outfit. I'm no longer giving any money to Jeff Bezos. Directly any way. I'm sure it finds its way to him via taxes & other things, but directly: No more. It's a small step, but one of many, & something I wanted to g…

via Mike KreuzerJanuary 18, 2025

No billionaires at FOSDEM

Jack Dorsey, former CEO of Twitter, ousted board member of BlueSky, and grifter extraordinaire to the tune of a $5.6B net worth, is giving a keynote at FOSDEM. The FOSDEM keynote stage is one of the biggest platforms in the free software community. Janson …

via Drew DeVault's blogJanuary 16, 2025

2024 in review

I want to go through some highlights of the year. Thanks for coming along for the ride!1 A year of being independent This was my first entire year of my being an independent open source maintainer. I’m very happy with how it turned out! I highly appreci…

via seanmonstarJanuary 15, 2025

Brainwash An Executive Today!

I. A few years ago, I had an annual one-on-one with the Chief Technology Officer of an employer with more than ten thousand staff. Senior management absolutely fawned over this person — extremely politically savvy, they would say. Amazing at acquiring fund…

via LudicityJanuary 13, 2025

2025 Predictions

I was just enjoying Simon Willison’s predictions and, heck, why not. 1: The web becomes adversarial to AI The history of search engines is sort of an arms race between websites and search engines. Back in the early 2000s, juicing your ranking on search e…

via macwright.comJanuary 11, 2025

A journey into File Transfer Protocols in Rust

How it started I can for sure affirm that you've used File transfer protocols before. Let's exclude HTTP from here, because, of course it is currently used also to transfer files, but it's not bi-directional and it mostly a workaround added at a certain…

via Christian Visintin BlogJanuary 06, 2025

The Adrian Dittmann Story

the evidence, from A to Z, and righting the wrongs

via maia blogJanuary 05, 2025

Bloat

Common questions we see in the OpenSUSE community are "which distro is the least bloated", "how can I remove bloat", "package X is bloat" etc. For the longest time this has confused me - Linux while sometimes slow, isn't "bloated". So where are all these q…

via Firstyear's blog-a-logJanuary 04, 2025

Awesome Fish functions

Some awesome fish functions that I have accumalated over the years.

via Ishan WritesJanuary 03, 2025

Styling HTML details and summary with modern CSS

Use CSS to style and manage disclosure widgets, which are the HTML details and summary elements.

via Rob O'Leary | BlogDecember 26, 2024

Yer a Wizard! Tagging Hard-coded Credentials Can Lead to Finding Magic (Numbers)

As GreyNoise researcher, you always have things to write detection rules for. Some of them aren’t always exciting, but they become more interesting as you dive deeper. Let’s jump right in and take a look at CVE-2024-6633: The default credentials for the s…

via GreyNoise LabsDecember 03, 2024

OpenGL is not Right-Handed

The original Twitter thread: https://x.com/TheGingerBill/status/1508833104567414785 I have a huge gripe when I read articles/tutorials on OpenGL: most people have no idea what they are talking about when it comes to coordinate systems and matrices. Specifi…

via Articles on gingerBillNovember 10, 2024

Physics Simulations in Bevy

Bevy is the most popular and powerful game engine in Rust. Because of its flexibility, it can be used not only for games but also for (scientific) physics simulations. In this blog post, I will share my experience using Bevy for physics simulations from sc…

via mo8it.comJuly 19, 2024

Defending myself against defensive writing

I write this blog because I enjoy writing. Some people enjoy reading what I write, which makes me feel really great! Recently, I took down a post and stopped writing for a few months because I didn't love the reaction I was getting on social media sites li…

via pcloadletterMay 27, 2024

The Elegiac Hindsight of Intelligent Machines

This essay was edited out of a chapter of my book, The Intelligence Illusion: a practical guide to the business risks of Generative AI, with minor alterations. “See the choice of dreams”, and then worry about it Very well. This book – this side, Dream …

via Out of the Software Crisis (Newsletter)October 13, 2023

Regex engine internals as a library

Over the last several years, I’ve rewritten Rust’s regex crate to enable better internal composition, and to make it easier to add optimizations while maintaining correctness. In the course of this rewrite I created a new crate, regex-automata, which expos…

via Andrew Gallant's Blog on Andrew Gallant's BlogJuly 05, 2023

Generated by openring-rs

favicon here hometagsblogmicrobio cvtech cvgpg keys