Installing Stuff Notes
The power of scripting frequently lies in using other programs.
WHOLE "OS"
Real Machines (e.g. Pis) or
Virtualizations
You know this quite a bit already...
Distributions
Usually ISOs
We've been dealing with general, but
Specialized Distributions
Very common and useful these days
Especially with Raspberry Pis
(We'll come back later, but Docker, and LXC can do these in "Containers"
BITS OF SOFTWARE
- Text editors
- Games
- Web Servers
- anything, really.
IN THE BEGINNING
When the USERS were also the ADMINS/DEVELOPERS
(Windows/Mac users, I'm guessing it felt like
"Buy the physical disc in a store"
or
"Download and hope for the best, as it litters your drive"
and then just jumped to APP STORES?
Package Managers (classic)
(the precursor to app stores)
Try to track and manage libraries et al
Package Managers - Debian Family
This is Ubuntu, Mint, Pop etc.
apt/ apt-get
(aptitude, which is a gui version)
Also, the less preferred "dpkg", used to install "debs"
Package Managers - Red Hat Family
Fedora, Red Hat
RPM
Package Managers - Arch Family
Arch, Manjaro
pacman
The occasional "Installer helper"
Like "Tasksel"
or a Direct Download Shell script
that's actually an installer..speaking of
Direct Downloads
Raw Binaries or Shell scripts
Downloaded installers
Use at your own risk (but never say never)
On Direct Downloads
Theoretically very dangerous
Practically? In Linux? Probably not so much.
Especially if:
Direct Download precautions
- Research the program/site
- Check the URLs carefully
- Check the code itself if possible
So yes, maybe
curl http:XXX | bash
isn't so evil.
Speaking of homework, Git
Git, like Linux, is exactly what you get when a genius does his own thing;
It's great, people use it, and other parties can build on top and centralize it.
Github
Presently still a great resource.
Reasonably safe place to download and run code from "raw"
See also, Gitlab and other competitors.
Git
(there is a LOT more to say about git.
we spend an entire class period on it in 5367)
MODERN ERA
Linux is beginning to adopt the bifurcation
for better or for worse
of END USERS v. ADMIN/DEVELOPER
End User -Really easy
The really easy stuff
"Software Centers"
End User - Newer Package Managers
- Snap
- Flatpak
- AppImage
Generally, the benefit here is (supposed to be)
"software is always being worked on"
ADMIN
A lot of the times, the above will work.
But, you're tinkering, so you may need to dig deeper.
ADMIN - Language Specific
If you're using cutting edge, you may need to know about the specific languages
Java
Tends to not be too bad; you mostly just have to have your Java up to date
and run the Jar file
(disclaimer, the vast majority of my real life knowledge here is Minecraft)
Javascript
Can be messy, of course.
There is node/npm
Python
For such an otherwise clean language;
installing packages with it can be very confusing:
Mostly owing to two things:
Python
- The shift from Python 2 to 3.
(Usually a no-no, but probably worth it here.)
Python
Resolving conflicting libraries and versions can be done
in a number of ways, all decent, but all different.
- Just install the thing on your system. If it's a singular system you're good
- Virtual Environments. Confusing, but useful
- If possible, Jupyter Notebooks et al.
CONTAINERS
Enter Docker.
Amazingly good idea that mostly works.
Docker
Put things in "Containers."
Not as heavy as entire VMs
But walled off from everything.
Why not just apps like the end users?
END USERS usually don't need "special configs"
or "opening things to the internet"
Docker
Very cool thing about docker is PORTABILITY.
Their metaphor is "everything in shipping containers"
Docker
Also, it's own ecosystem. Frequently you can be like "install directly"
or "use a docker container"
The latter usually makes complicated above stuff into
"docker run hello-world"
(with some more flags to point to folders and ports for the net.
Backlinks: FSU Courses:LIS5364:Previous Readings