summaryrefslogtreecommitdiff
path: root/public/pacman-overview.html
blob: c5e3114ba303aa6f92d59e4b55a8399827d9bc66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>A quick overview of usage of the Pacman package manager — Luke T. Shumaker</title>
  <link rel="stylesheet" href="assets/style.css">
  <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
<body>
<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » pacman-overview</header>
<article>
<h1 id="a-quick-overview-of-usage-of-the-pacman-package-manager">A quick
overview of usage of the Pacman package manager</h1>
<p>This was originally published on <a
href="https://news.ycombinator.com/item?id=5101416">Hacker News</a> on
2013-01-23.</p>
<p>Note: I’ve over-done quotation marks to make it clear when precise
wording matters.</p>
<p><code>pacman</code> is a little awkward, but I prefer it to apt/dpkg,
which have sub-commands, each with their own flags, some of which are
undocumented. pacman, on the other hand, has ALL options documented in
one fairly short man page.</p>
<p>The trick to understanding pacman is to understand how it maintains
databases of packages, and what it means to “sync”.</p>
<p>There are several “databases” that pacman deals with:</p>
<ul>
<li>“the database”, (<code>/var/lib/pacman/local/</code>)<br> The
database of currently installed packages</li>
<li>“package databases”,
(<code>/var/lib/pacman/sync/${repo}.db</code>)<br> There is one of these
for each repository. It is a file that is fetched over plain http(s)
from the server; it is not modified locally, only updated.</li>
</ul>
<p>The “operation” of pacman is set with a capital flag, one of “DQRSTU”
(plus <code>-V</code> and <code>-h</code> for version and help). Of
these, “DTU” are “low-level” (analogous to dpkg) and “QRS” are
“high-level” (analogous to apt).</p>
<p>To give a brief explanation of cover the “high-level” operations, and
which databases they deal with:</p>
<ul>
<li>“Q” Queries “the database” of locally installed packages.</li>
<li>“S” deals with “package databases”, and Syncing “the database” with
them; meaning it installs/updates packages that are in package
databases, but not installed on the local system.</li>
<li>“R” Removes packages “the database”; removing them from the local
system.</li>
</ul>
<p>The biggest “gotcha” is that “S” deals with all operations with
“package databases”, not just syncing “the database” with them.</p>

</article>
<footer>
  <aside class="sponsor"><p>I'd love it if you <a class="em"
      href="/sponsor/">sponsored me</a>.  It will allow me to continue
      my work on the GNU/Linux ecosystem.  Thanks!</p></aside>

<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
</footer>
</body>
</html>