summaryrefslogtreecommitdiff
path: root/find-deprecated-pkgs
blob: 35ebd56c48666ae7893db6cc4c79393ecbec3f02 (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
# Copyright (C) 2018 David P. <megver83@parabola.nu>
# Find deprecated Arch packages that are still in our blacklists.

set -e

# Repositories for specific arch'es.
# Common repos are in 'repos' variable.
repos="core extra community"
repos_x86_64="$repos testing multilib multilib-testing"
repos_i686="$repos testing build-support"
repos_armv7h="$repos alarm"

# Parabola repos for checking blacklists like your-privacy,
# which sometimes block [libre] and [pcr] packages.
# [nonprism] and [nonsystemd] are not listened because
# we do not blacklists those packages
repos_parabola="pcr pcr-multilib pcr-multilib-testing pcr-testing libre libre-multilib libre-multilib-testing libre-testing"

# Set the blacklist files
# aur-blacklist.txt is not here since we want to check Arch's official repos
blacklists="blacklist.txt"

# List here file that may also blacklist Parabola packages
blacklists_parabola="your-initfreedom-blacklist.txt your-privacy-blacklist.txt your-freedom_emu-blacklist.txt"

# Mirrors. Please choose HTTPS over HTTP when possible
# x86_64 mirror
for r in $repos_x86_64; do
  mirrors+=(https://mirrors.edge.kernel.org/archlinux/$r/os/x86_64/)
done
# i686 mirror
for r in $repos_i686; do
  mirrors+=(https://mirror.archlinux32.org/i686/$r/)
done
# armv7h mirror
for r in $repos_armv7h; do
  mirrors+=(https://fl.us.mirror.archlinuxarm.org/armv7h/$r/)
done

# Parabola mirrors, used to check [libre] and [pcr] packages
if [[ $1 = parabola ]]; then
for r in $repos_parabola; do
  mirrors+=(https://mirror.grapentin.org/parabola/$r/os/x86_64/)
  mirrors+=(https://mirror.grapentin.org/parabola/$r/os/i686/)
  mirrors+=(https://mirror.grapentin.org/parabola/$r/os/armv7h/)
done
fi

# Sed expresion tested on Nginx, change if needed
sedexp='s/.*href="//;s/\-any.pkg.tar.xz.*//;s/\-x86_64.pkg.tar.xz.*//;s/\-i686.pkg.tar.xz.*//;s/\-armv7h.pkg.tar.xz.*//'
# extra sedexps for symbols
sedexp+=';s/%2B/+/g;s/%3A/:/g;s/%40/@/g'

usage() {
cat <<EOM
Usage: ${0##*/} [arch|parabola]
Check if there are inexistent packages in the blacklists.

Arguments:
  arch                        Compares ArchLinux{32,ARM} blacklists
                              with their repositories
  parabola                    Compares Arch/Parabola blacklists (e.g.
                              your-privacy) with Parabola's and Arch's
                              repos

The 'parabola' argument compares with our repositories and Arch's
since in blacklists like your-privacy and your-initfreedom we also block
some packages from [pcr] (like jitsi) and [libre] (like icedove), and
probably also from their -multilib, -testing and -multilib-testing derivatives.

This program only takes one argument, meaning that (for example) if you run
\`${0##*/} parabola arch' only 'parabola' is considered
EOM

exit $STATUS
}

mkpkglist() {
  parabola_pkgs=$(mktemp)
  arch_pkgs=$(mktemp)
  case $1 in
        parabola) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp > $parabola_pkgs
        ;;
        arch) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp > $arch_pkgs
        ;;
  esac
}

err() {
  printf '%sError:%s %s\n' \
         "$(tput setaf 1)" \
         "$(tput sgr0)" \
         "$1"
  false
}

check(){
  mkpkglist $1
  case $1 in
        parabola) pkgs=$(cut -d ":" -f 1 $blacklists_parabola | grep -v ^#)
                  for p in $pkgs; do
                    grep ^$p $parabola_pkgs &> /dev/null || printf '%s was not found\n' "$p"
                  done
        ;;
        arch) pkgs=$(cut -d ":" -f 1 $blacklists | grep -v ^#)
              for p in $pkgs; do
                grep ^$p $arch_pkgs &> /dev/null || printf '%s was not found\n' "$p"
              done
        ;;
        *) err "$1 is not a valid argument"
        ;;
  esac
}

if [ -s $1 ]; then
  usage
else
  ping -q -w 1 -c 1 `ip r | grep ^default | awk '{print $3}'` &> /dev/null || err 'You are not connected to internet'
  check $1 || STATUS=$? usage
fi