]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - update-dkms-versions
UBUNTU: Ubuntu-5.4.0-117.132
[mirror_ubuntu-focal-kernel.git] / update-dkms-versions
1 #!/bin/bash
2
3 remote_repo=''
4 sru_cycle=
5 while :
6 do
7 if [ "$1" = "--remote-repo" ]; then
8 remote_repo="$2"
9 shift 2
10
11 elif [ "$1" = "--sru-cycle" ]; then
12 sru_cycle="$2"
13 shift 2
14
15 else
16 break
17 fi
18 done
19 if [ "$#" -ne 0 ]; then
20 {
21 echo "Usage: $0 [<options>]"
22 echo " --remote-repo <url>"
23 echo " --sru-cycle <cycle>"
24 } 1>&2
25 exit 1
26 fi
27
28 default_sru_cycle()
29 {
30 local tracking_bug
31 local version
32
33 # Pick out the cycle from the tracking bug file.
34 if [ -f "$DEBIAN/tracking-bug" ]; then
35 read tracking_bug sru_cycle X <"$DEBIAN/tracking-bug"
36 fi
37
38 if [ -z "$sru_cycle" ]; then
39 echo "$0: sru-cycle not found via debian/tracking-bug; specify --sru-cycle" 1>&2
40 exit 1
41 fi
42
43 sru_cycle=$(echo "$sru_cycle" | sed -e 's/-[0-9][0-9]*$//' -e 's/^kernel-sru-cycle-//')
44
45 #echo "default_sru_cycle: version<$version> sru_cycle<$sru_cycle>"
46 }
47
48 # Determine where our changelog is.
49 DEBIAN=debian
50 [ -f 'debian/debian.env' ] && . 'debian/debian.env'
51
52 [ -z "$sru_cycle" ] && default_sru_cycle
53 if [ -z "$remote_repo" ]; then
54 case "$sru_cycle" in
55 s[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9])
56 remote_repo='security' ;;
57 *)
58 remote_repo='main' ;;
59 esac
60 fi
61 case "$remote_repo" in
62 security)
63 remote_repo='ssh+git://git.launchpad.net/~canonical-kernel-security-team/canonical-kernel-private/+git/kernel-versions'
64 remote_name='security'
65 ;;
66 main)
67 remote_repo='git://git.launchpad.net/~canonical-kernel/+git/kernel-versions'
68 remote_name='main'
69 ;;
70 *)
71 remote_name='adhoc'
72 ;;
73 esac
74
75 #
76 # kernel-versoins repository dkms-version mapping see below for details:
77 # https://git.launchpad.net/~canonical-kernel/+git/kernel-versions/plain/README
78 #
79 kv_repo="$HOME/.cache/kernel-versions-bare"
80 git_base="$remote_name/$sru_cycle"
81
82 # Now we know where our repo is and what it called update it.
83 # We maintain "persistent" remotes for main and security, but assume
84 # any manually supplied entries are transient.
85 (
86 [ ! -d "$kv_repo" ] && mkdir -p "$kv_repo"
87 cd "$kv_repo" || exit 1
88 [ ! -f config ] && git init -q --bare
89 current_url=$(git config "remote.$remote_name.url")
90 if [ -z "$current_url" ]; then
91 git remote add "$remote_name" "$remote_repo"
92 elif [ "$current_url" != "$remote_repo" ]; then
93 git config "remote.$remote_name.url" "$remote_repo"
94 fi
95 git fetch -q -p "$remote_name"
96 ) || exit 1
97
98 cat_file()
99 {
100 (cd "$kv_repo" && git cat-file "$@") || exit 1
101 }
102
103 # Determine if we have this cycle.
104 present=$(cat_file -t "$git_base" 2>/dev/null)
105 if [ "$present" = "" ]; then
106 # If we don't have the cycle in the development cycle then
107 # fall back to master.
108 case "$sru_cycle" in
109 d*) git_base="$remote_name/master" ;;
110 *) echo "$sru_cycle: cycle not found in $remote_repo" 2>&1
111 exit 1
112 ;;
113 esac
114 fi
115
116 # Determine our series and mainline version from our own changelog.
117 our_series=$(LC_ALL=C dpkg-parsechangelog -l"$DEBIAN/changelog" -SDistribution)
118 if [ "$our_series" = "UNRELEASED" ]; then
119 our_series=$(LC_ALL=C dpkg-parsechangelog -l"$DEBIAN/changelog" -o1 -c1 -SDistribution)
120 fi
121 our_mainline=$(LC_ALL=C dpkg-parsechangelog -l"$DEBIAN/changelog" -SVersion | sed -e 's/-.*//')
122 our_package=$(LC_ALL=C dpkg-parsechangelog -l"$DEBIAN/changelog" -SSource)
123 our_source=$(echo "$our_package" | sed -e 's/-restricted-modules//')
124 case "$our_package" in
125 linux-restricted-modules*) our_type="lrm" ;;
126 *) our_type="main" ;;
127 esac
128
129 # Update rules are complex. We update development series kernels to the
130 # versions in development. For stable series we update versions against
131 # the series in which our prime kernel was built. This is expressed
132 # via the map/dkms-versions namespace. Attempt to map via our series
133 # and then our mainline-version.
134
135 # Try and find a package specific dkms-versions fragment. Try:
136 # handle+type
137 # series+type
138 # mainline+type
139 # series - backwards compatibility
140 # mainline - backwards compatibility
141 for versions_path_tail in \
142 "$our_series:$our_source:$our_type" \
143 "$our_series:$our_type" \
144 "$our_mainline:$our_type" \
145 "$our_series" \
146 "$our_mainline"
147 do
148 echo "II: trying $versions_path_tail ..."
149 versions_paths=$(echo $(cat_file -p "$git_base:map/dkms-versions/$versions_path_tail" 2>/dev/null))
150 [ -n "$versions_paths" ] && break
151 done
152
153 if [ -z "$versions_paths" ]; then
154 echo "$0: unable to identify dkms-versions mapping" 1>&2
155 exit 1
156 fi
157
158 echo "git_base<$git_base> versions_paths<$versions_paths>"
159 echo "II: grabbing dkms-versions from $sru_cycle $versions_paths"
160
161 : ">debian/dkms-versions.new"
162 for versions_path in $versions_paths
163 do
164 cat_file -p "$git_base:$versions_path" >>"debian/dkms-versions.new"
165 if [ "$?" -ne 0 ]; then
166 echo "$0: unable to download an updated dkms-versions file" 1>&2
167 exit 1
168 fi
169 done
170 mv "debian/dkms-versions.new" "debian/dkms-versions"
171
172 thing="debian/dkms-versions"
173 if ! git diff --exit-code -- "$thing" >/dev/null; then
174 git commit -m "UBUNTU: $thing -- update from kernel-versions ($git_base)" \
175 -m "BugLink: https://bugs.launchpad.net/bugs/1786013" \
176 -s -- "$thing"
177 else
178 echo "$thing: no changes from kernel-versions"
179 fi
180
181 exit 0