this post was submitted on 01 Jan 2024
161 points (81.6% liked)

Linux

48334 readers
603 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

https://mullvad.net/en/help/install-mullvad-app-linux

Trying to install VPN and these are the instructions Mullvad is giving me. This is ridiculous. There must be a more simple way. I know how to follow the instructions but I have no idea what I'm doing here. Can't I just download a file and install it? I'm on Ubuntu.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 20 points 10 months ago* (last edited 10 months ago) (2 children)

[Part two]

Two questions:

What is a repository?
What's the stuff that goes in the file? Why is it a command and why is it so long?

I started answering the second question, so we'll continue with that and loop back to what apt and repositories are for the next and final command.

echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list

So echo just means "repeat what you're given". Then deb is the Ubuntu equivalent to msi. Then you're telling the deb application where to find the encryption key you installed earlier, and you're telling it which arch (short for architecture, it's the hardware configuration of your computer) you're interested in. When it says $ and then stuff in parenthesis like that, that stuff gets computed and substituted. So you're not literally asking for the architecture $( dpkg --print-architecture ), but instead something like arch=amd64. dpkg is an application that keeps track of what .deb packages you have installed. With the flag --print-architecture, it's switched to a different mode where instead of it's primary purpose, it's telling you what system architecture you're using. Then it's the URL for the repository. The URL is also variable, part of the URL will get replaced later. $(lsb_release -cs). lsb stands for linux standard base, and lsb_release is just an application that says which Linux distro you're using. The reason this 'standard base' is used rather than the specific distro and version, is because it's meant to simplify the very large diversity of Linux distributions and versions down to the minimal number of possible versions that actually have some level of incompatibility with each other. So it would say your specific major version of Ubuntu, but it wouldn't say exactly which patch you're on. Someone who's not using Ubuntu, but using something that from a compatibility standpoint is fully Ubuntu compatible, might also report as a Ubuntu version when using this application. The output from this program is added to the URL. The computed result is something like https://repository.mullvad.net/deb/stable mantic minotaur main. Main just means the main branch of the application, as opposed to a special branch, like a beta-branch.

If you notice, you're not computing these things first and then putting the result into the file, but instead you're inserting it with variables. This will allow your system configuration to change without the need to update the repository definition.

All in all, this is a very complicated way to add a repository. On most systems, and indeed on Ubuntu, you can do this with a single application or a flag for the package manager and then a single URL. For Ubuntu it would be apt-add-repository https://repository.mullvad.net/deb/stable mantic minotaur main. But they chose to do it like this to make it easier to do once and forget.

And then finally, what is a repository? What is apt? A repository is a place that hosts software. It's like the Play store on Android. You can use the Ubuntu repository that is standard for your Linux distribution and guaranteed to work, guaranteed to be safe, guaranteed to be respectful towards you as the user, but you can also add third party repositories. Third party developers can add their applications to the official repository, but doing so means they have to go through a quality assurance step, and that they are limited in the ways they are allowed to abuse you. For security software, this might add too much delay between when it's critical that they provide an update, and when that update is approved for distribution to Ubuntu users. Instead they have opted to host their application on their own repository.

Apt is your package manager. It keeps track of everything you have installed, every library and component used and required by every application, and for some package managers, every file created by every application. It checks all repositories you've specified for updates and automatically updates all your applications. It also deals with requirements and conflicts, ensuring that you don't have superfluous old libraries taking space, and that when you want to install something with requirements, you don't need to manually hunt down all the prerequisites. Some package managers available on other systems will even compile applications and deal with build files for you.

A library is a set of application features that doesn't necessarily belong to a specific application. They do common things and are used my many applications. For a Windows equivalent, you can think of the Microsoft Visual C++ Redistributable or Direct X.

And that's everything.

sudo apt update

Sudo is to get super user permissions, and then run the application apt, apt is your package manager, and the command you're giving to the apt application is to update it's internal knowledge of available packages and versions. It needs to do this because it didn't previously have the Mullvad repository.

sudo apt install mullvad-vpn

Sudo is to borrow the super user's permissions, apt is your package manager, and you're telling it to install, and then the name of the application you want to install is mullvad-vpn. This final step sudo apt install mullvad-vpn, sudo apt install firefox is how you install applications on Ubuntu typically. Everything before this was because you needed to add a third party source.

Phew, that's a lot of text! So in hind-sight, it could be easier after all lol. Feel free to ask if you have any questions. It's a lot of text, but I assure you that if I was going to explain anything about how to use Windows at this level of detail, it would be pages upon pages longer! I hope the explanation wasn't too condescending. Good luck with learning how to use Linux.

_
Pedantic clarifications:

  • Technically, sudo is a command and not an application, but it's made to be treated like an application. Also technically it doesn't stand for superuser do, but all the stuff I told you is assumptions they want you to make to make it easier to use, but because it's such a core part of Linux, it works differently on a technical level.
  • | is actually part of bash, not Linux, but most shells have | with identical behaviour.
[–] [email protected] 19 points 10 months ago (2 children)

Lmao, i'm sure this is just going to make OP run a mile.

[–] [email protected] 6 points 10 months ago

you'd do it too so people don't break their system case-in-point Linus.

[–] [email protected] 3 points 10 months ago

A bit of physical exercise shouldn't be too bad.

[–] [email protected] 2 points 10 months ago

Great stuff This is going to be useful even to someone who easily understood the commands.