Improve this article..
Package Managers are used to automate the process of installing, upgrading, configuring, and removing programs. There are multitude of package managers today majorly for *nix based systems. Lately package managers are making their way to Windows systems, and also for installing and managing modules for languages such as Python, Ruby etc.
The general workflow starts with the user requesting the package using the package manager (PM) which would be available in the system. The PM then finds the packages from the repository and downloads it. The PM then installs the packages and advises on any manual steps that it finds necessary.
Why was the package manager required at the first place?
Unix begun its journey by being a programmer's OS. This means that everytime a new program was written it had to be compiled, linked and run.
Unix got the ability to use libraries (“shared objects”), ELF executables, etc. To solve the task of building more complicated software easily,
makewas developed. Sourcecode was getting shipped with
Makefiles (the file which is used by
make) bundled. But still it was a laborious task as the dependencies had to be still taken care by the developer or the maintainer.
Instead of running
makecommands everytime on every machine having the same configuration, it was thought that we can have a package manager to ship the executable and also the dependencies to other machines. Hence the earliest PMs started evolving with this idea.
What are the basic functions of the package manager?
The basic functions of the PM are
- Working with file archivers to extract package archives
- Ensuring the integrity and authenticity of the package by verifying their digital certificates and checksums
- Looking up, downloading, installing or updating existing software from a software repository or app store
- Grouping packages by function to reduce user confusion
- Managing dependencies to ensure a package is installed with all packages it requires, thus avoiding "dependency hell"
From where does the package gets downloaded?
The packages gets downloaded from Software Repositories or also called as *repo*.
Software repositories are designed to include packages. Repositories may be solely for particular programs, such as Pip for the Python programming language, or for an entire operating system like Ubuntu, Fedora etc. These major repositories are designed to be malware free.
How would my Package Manager know the location of the repository?
Every Package Manager for OSes would have files related to the configuration for example,
sources.listfile in ubuntu. These would contain all the locations of repositories.