A Rust port of alien, a tool that converts software packages between Linux package managers.

Overview

alien

A Rust port of alien, a tool that converts software packages to work from one package manager to the next.

Currently, the tool supports converting between:

  • .deb packages — used by dpkg, prevalent in Linux distributions (distros) derived from Debian and Ubuntu;
  • .rpm packages — used by rpm, found in Red Hat-derived distros such as RHEL, CentOS, openSUSE, Fedora and more;
  • LSB packages — used by Linux Standard Base and are basicaly .rpm packages
  • .tgz packages — used by Slackware Linux
  • .pkg packages — used by Solaris

Please note that support for .slp packages — once used by Stampede Linux — will not be present in the Rust version. Due to lack of available documentation online caused by lack of interest in Stampede Linux over the last 20 years after its cancellation, and a potential endianness mismatch present in original Perl version, I don't have enough information or incentive to write a Rust port that functions correctly on all architectures.

Motivation

The main goal for this port is to enhance the original alien's performance, error handling and versatility, which were all hindered by the language alien was originally written in, Perl. With Rust, there are a lot more opportunities for offering the end user parallel processing, more robust error messages, and potentially portability to other operating systems.

Code-wise, the original alien's control flow was not entirely clear, and sometimes the program does duplicate work thanks to the use of implicit but overridable accessors. In comparison, the Rust version minimizes duplicate work, cleanly seperates source packages and target packages for better readability and comprehension, and overall the code is just laid out more explicitly which helps users and developers to better debug problems.

In conclusion, I believe rewriting alien in Rust aids users and developers alike, and the benefit far outweighs the cost of my time and my sanity, and so this project was born.

Known Issues

  • Names need to be mapped from .rpm to .deb - in particular, .deb package names cannot contain uppercase letters, whereas .rpm packages have no such restriction.

  • Currently dependencies from .deb files are not processed, which means .rpm packages converted from .deb packages may not install correctly.

  • You can't install the package yet, and alien currently doesn't clean things up.

From the original alien's 8.95 release (which is to my knowledge the latest), on top of which this port is based:

  • Handling postinst script when converting to/from .slp packages.

  • Alien needs to handle relocatable conffiles, partially relocatable packages, and packages that have multiple parts that relocate differently.

  • RPM ghost file support. On conversion, make preinst move file out of the way, postinst put it back. Thus emulating the behavior of rpm.

  • Seems slackware packages may now incliude an install/slack-desc with a description in it

License

alien is licensed under the GNU General Public License, version 2, or (at your option) any later version.

© 2023 Leah "pluie" Chen

You might also like...
DragonOS/Linux Termial text editor

Held DragonOS/Linux Termial text editor 面向DragonOS和Linux系统的终端文本编辑器。 作者:Heyicong [email protected] 安装 默认安装路径为./install/bin/held Linux: make install

Decryption tool for assets.pie from Teenage Mutant Ninja Turtles: The Cowabunga Collection. This tool was made in its entirety by SowwyItsAnAlt.

Cowabunga Decryption tool for assets.pie from Teenage Mutant Ninja Turtles: The Cowabunga Collection. This tool was made in its entirety by SowwyItsAn

A CLI tool to manage your godot-rust projects

ftw A CLI tool to manage your godot-rust project! Table of contents General Information Setup Usage Contact General Information This is a tool to help

A tool to generate inbetweens for animated sprites, written in godot-rust
A tool to generate inbetweens for animated sprites, written in godot-rust

Bitmapflow is a tool to help you generate inbetweens for animated sprites. In other words, it makes your animations smoother. It uses optical flow to

A tool to display the minimap of a game larger on a second screen
A tool to display the minimap of a game larger on a second screen

maximap A tool to display the minimap of a game larger on a second screen. Should work on all operating systems supported by captrs and rust_minifb, s

This is a cross-platform tool to historicize different branches/depots/manifests and generating pseudocode for it to compare different game updates
This is a cross-platform tool to historicize different branches/depots/manifests and generating pseudocode for it to compare different game updates

CSHP This is a cross-platform tool to historicize different branches/depots/manifests and generating pseudocode for it to compare different game updat

This is a tool for solving the excellent Wordle puzzle

Wordle Tool This is a tool for solving the excellent Wordle puzzle. It mainly exists as an exercise to learn the (by all accounts) equally excellent R

NeosPeeps is tool that allows for listing your NeosVR friends quickly, without having to actually open the whole game
NeosPeeps is tool that allows for listing your NeosVR friends quickly, without having to actually open the whole game

Neos Peeps NeosPeeps is tool that allows for listing your NeosVR friends quickly, without having to actually open the whole game. It also has a bunch

API tool,but egui style and rusty
API tool,but egui style and rusty

WEAVER About Weaver is a simple,easy-to-use and cross-platform API tool.Inspired by hoppscotch . It uses the Rust egui GUI library. Features Get,Post

Owner
Leah
I do code and I do art, sometimes. I hope to do code that is also art. (she/her :rainbow_flag: :transgender_flag:)
Leah
The official command-line interface for the makedeb Package Repository

Mist This is the repository for Mist, the official helper for the makedeb Package Repository. Installation Users have a few options for installing Mis

makedeb 5 Aug 4, 2022
Abstreet - Transportation planning and traffic simulation software for creating cities friendlier to walking, biking, and public transit

A/B Street Ever been stuck in traffic on a bus, wondering why is there legal street parking instead of a dedicated bus lane? A/B Street is a project t

A/B Street 6.8k Jan 9, 2023
IDE for cross-platform software development

Diversity Space IDE for cross-platform software development | 日本語 | English | Русский | READMEの英語版とロシア語版はDeepl翻訳を使用して翻訳されています Английская и русская вер

latteS 0 Feb 23, 2022
Template game client for the Software Challenge 2023 ("Hey, Danke für den Fisch!")

Software Challenge 2023 Rust Client A template client for the Software Challenge 2023 (Hey, Danke für den Fisch!) written in Rust. The client implemen

FW 3 Nov 4, 2022
Vel: A language for verified low-level software

Vel A language for verified low-level software. It dreams to be something like Rust with logic ― a language that empowers people to build verified low

Higher-Order Program Verification 9 Jan 26, 2023
Integration layer between Bevy, puffin and tracing libraries

bevy_puffin This crate integrates the puffin library into Bevy. It provides PuffinTracePlugin to use as a replacement for the Bevy's default LogPlugin

Vladyslav Batyrenko 12 Jul 15, 2022
Compatability between `bevy_mod_picking` and `bevy_ecs_tilemap`

bevy_picking_tilemap Provides a bevy_mod_picking backend to add integration with bevy_ecs_tilemap, enabling individual Tile entities to receive the pi

null 4 Apr 9, 2024
Port of my AST3 asteroids clone Bevy/rust from Unity/C#.

Port of my AST3 asteroids clone Bevy/rust from Unity/C#. This is my first rust program. Be gentle. Still working on it, but actually playable. You can

Jorge Monasterio 2 Mar 24, 2022
A proof of concept Linux screen reader, with minimal features.

Odilia A proof of concept Linux screen reader, with minimal features. Status: prototype We're breaking things daily. This is not usable whatsoever, an

Odilia 43 Aug 15, 2022
Play jungle chess on the linux terminal.

Jungle-Chess This is my first project written in Rust. Happy for contributors and feedback! The code is dirty. Play Jungle Chess on an Emoji-Enabled L

Arne Winter 10 Aug 9, 2022