Newer
Older
#!/bin/bash
# Script intended to build local efi repositories archives as part of makeiso components.
set -eE -o pipefail
CODENAME=$1
GPG_KEY="60364C9869F92450421F0C22B138CA450C05112F"
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
[ -z $CODENAME ] && echo "usage: $0 etiona|nabia" && exit
[ -z $GPG_KEY ] && echo "It's required to setup a full GPG key" && exit
[ $CODENAME = "etiona" ] && REL=9.0
[ $CODENAME = "nabia" ] && REL=10.0
[ -f $(which curl) ]
[ -f $(which reprepro) ]
[ -f $(which wget) ]
# setup local apt
LOCAL_APT=`mktemp -d`
trap "rm -rf ${LOCAL_APT}" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
mkdir -p ${LOCAL_APT}
touch ${LOCAL_APT}/status
touch ${LOCAL_APT}/trusted.gpg
cat << APT_CONF > ${LOCAL_APT}/apt.conf
Dir::State "${LOCAL_APT}";
Dir::State::status "${LOCAL_APT}/status";
Dir::Etc::SourceList "${LOCAL_APT}/apt.sources.list";
Dir::Etc::SourceParts "";
Dir::Cache "${LOCAL_APT}";
pkgCacheGen::Essential "none";
Dir::Etc::Trusted "${LOCAL_APT}/trusted.gpg";
Acquire::ForceIPv4 "true";
APT_CONF
cat << SOURCES > $LOCAL_APT/apt.sources.list
deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME main
#deb-src [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME main
deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME-updates main
#deb-src [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME-updates main
deb [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME-security main
#deb-src [signed-by=/usr/share/keyrings/trisquel-archive-keyring.gpg] http://archive.trisquel.org/trisquel $CODENAME-security main
SOURCES
echo -e "\n >>>> Getting updated available $CODENAME packages to create repo...\n"
ISO_URL="http://cdbuilds.trisquel.org/$CODENAME"
LATEST_MANIFEST_DATE="$(curl -s $ISO_URL/|grep -v sources|grep manifest|awk '{print$3}'|sort|tail -n1)"
MANIFEST_NAME="$(curl -s $ISO_URL/|grep manifest|grep $LATEST_MANIFEST_DATE|cut -d '"' -f2|tail -n1)"
ISO_MANIFEST_URL="$ISO_URL/$MANIFEST_NAME"
apt-get -q update -c $LOCAL_APT/apt.conf
#Create files
rm -rf ${CODENAME}_efi_repo
mkdir -p ${CODENAME}_efi_repo/amd64/{conf,incoming}
#Get iso 'manifest'
apt-get -c $LOCAL_APT/apt.conf \
--print-uris install efibootmgr \
cut -d\' -f2|grep http > ${CODENAME}_efi_repo/amd64/incoming/efi_raw.list
#Clean raw download list for strictly required packages.
cd ${CODENAME}_efi_repo/amd64/incoming
awk -F '/' '{print$9}' efi_raw.list |cut -d '_' -f1 | sort > efi.manifest
curl -s "$ISO_MANIFEST_URL" | awk '{print$1}' | awk -F':' '{print$1}' | sort > iso.manifest
comm -23 efi.manifest iso.manifest > minimal_efi_packages.list
echo "Packages to be downloaded:"
cat minimal_efi_packages.list
#Download strictly required packages.
for _efi in $(cat minimal_efi_packages.list)
do
apt-get -c $LOCAL_APT/apt.conf download "$_efi"
done
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
122
123
124
125
126
127
128
129
#Setup repo
cat << REPO > ${CODENAME}_efi_repo/amd64/conf/distributions
# $CODENAME
Origin: Trisquel
Label: Trisquel
Suite: $CODENAME
Version: $REL
Codename: $CODENAME
Architectures: amd64
Components: main
#DDebComponents: main
#DDebIndices: Packages . .gz .bz2
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release .gz .bz2
Contents:
Log: $CODENAME.log
Description: Trisquel GNU/Linux packages
Update: $UPSTREAM $CODENAME-packages #$CODENAME-devel $CODENAME-security
SignWith: $GPG_KEY
REPO
cd ${CODENAME}_efi_repo/amd64/
for deb in $(ls -1 incoming/*.deb 2>/dev/null)
do
echo including $deb
reprepro -v -b . -C main includedeb $CODENAME $deb
done
for udeb in $(ls -1 incoming/*.udeb 2>/dev/null)
do
echo including $udeb
reprepro -v -b . -C main includeudeb $CODENAME $udeb
done
for dsc in $(ls -1 incoming/*.dsc 2>/dev/null)
do
echo including $dsc
reprepro -v -b . -C main includedsc $CODENAME $dsc || reprepro -S admin -P optional -v -b . -C main includedsc $CODENAME $dsc
done
tar -czf ${CODENAME}_efi_repo.tar.gz pool dists
mv ${CODENAME}_efi_repo.tar.gz ../../
cd ../../
rm -r ${CODENAME}_efi_repo