@@ -109,25 +109,40 @@ def create_deb_pkgs(self, release, deb_file):
109109 print (f"create deb_pkgs result => { out } , { err } " )
110110 raise
111111
112- # TODO https://jira.cfops.it/browse/TUN-6209 : Sign these packages.
113- def create_rpm_pkgs (self , artifacts_path ):
114- self ._setup_rpm_pkg_directories (artifacts_path )
112+ def create_rpm_pkgs (self , artifacts_path , gpg_key_name ):
113+ self ._setup_rpm_pkg_directories (artifacts_path , gpg_key_name )
115114 p = Popen (["createrepo" , "./rpm" ], stdout = PIPE , stderr = PIPE )
116115 out , err = p .communicate ()
117116 if p .returncode != 0 :
118117 print (f"create rpm_pkgs result => { out } , { err } " )
119118 raise
120119
120+ self ._sign_repomd ()
121+
122+ def _sign_rpms (self , file_path ):
123+ p = Popen (["rpm" , "--define" , f"_gpg_name { gpg_key_name } " , "--addsign" , file_path ], stdout = PIPE , stderr = PIPE )
124+ out , err = p .communicate ()
125+ if p .returncode != 0 :
126+ print (f"rpm sign result result => { out } , { err } " )
127+ raise
128+
129+ def _sign_repomd (self ):
130+ p = Popen (["gpg" , "--batch" , "--detach-sign" , "--armor" , "./rpm/repodata/repomd.xml" ], stdout = PIPE , stderr = PIPE )
131+ out , err = p .communicate ()
132+ if p .returncode != 0 :
133+ print (f"sign repomd result => { out } , { err } " )
134+ raise
135+
121136 """
122- sets up the RPM directories in the following format:
137+ sets up and signs the RPM directories in the following format:
123138 - rpm
124139 - aarch64
125140 - x86_64
126141 - 386
127142
128143 this assumes the assets are in the format <prefix>-<aarch64/x86_64/386>.rpm
129144 """
130- def _setup_rpm_pkg_directories (self , artifacts_path , archs = ["aarch64" , "x86_64" , "386" ]):
145+ def _setup_rpm_pkg_directories (self , artifacts_path , gpg_key_name , archs = ["aarch64" , "x86_64" , "386" ]):
131146 for arch in archs :
132147 for root , _ , files in os .walk (artifacts_path ):
133148 for file in files :
@@ -137,6 +152,7 @@ def _setup_rpm_pkg_directories(self, artifacts_path, archs=["aarch64", "x86_64",
137152 old_path = os .path .join (root , file )
138153 new_path = os .path .join (new_dir , file )
139154 shutil .copyfile (old_path , new_path )
155+ self ._sign_rpms (new_path )
140156
141157 """
142158 imports gpg keys into the system so reprepro and createrepo can use it to sign packages.
@@ -149,7 +165,23 @@ def import_gpg_keys(self, private_key, public_key):
149165 public_key = base64 .b64decode (public_key )
150166 gpg .import_keys (public_key )
151167 data = gpg .list_keys (secret = True )
152- return (data [0 ]["fingerprint" ])
168+ return (data [0 ]["fingerprint" ], data [0 ]["uids" ][0 ])
169+
170+ """
171+ basically rpm --import <key_file>
172+ This enables us to sign rpms.
173+ """
174+ def import_rpm_key (self , public_key ):
175+ file_name = "pb.key"
176+ with open (file_name , "wb" ) as f :
177+ public_key = base64 .b64decode (public_key )
178+ f .write (public_key )
179+
180+ p = Popen (["rpm" , "--import" , file_name ], stdout = PIPE , stderr = PIPE )
181+ out , err = p .communicate ()
182+ if p .returncode != 0 :
183+ print (f"create rpm import result => { out } , { err } " )
184+ raise
153185
154186
155187"""
@@ -212,9 +244,9 @@ def create_deb_packaging(pkg_creator, pkg_uploader, releases, gpg_key_id, binary
212244 upload_from_directories (pkg_uploader , "dists" , release_version , binary_name )
213245 upload_from_directories (pkg_uploader , "pool" , release_version , binary_name )
214246
215- def create_rpm_packaging (pkg_creator , pkg_uploader , artifacts_path , release_version , binary_name ):
247+ def create_rpm_packaging (pkg_creator , pkg_uploader , artifacts_path , release_version , binary_name , gpg_key_name ):
216248 print (f"creating rpm pkgs..." )
217- pkg_creator .create_rpm_pkgs (artifacts_path )
249+ pkg_creator .create_rpm_pkgs (artifacts_path , gpg_key_name )
218250
219251 print ("uploading latest to r2..." )
220252 upload_from_directories (pkg_uploader , "rpm" , None , binary_name )
@@ -282,11 +314,12 @@ def parse_args():
282314 exit (1 )
283315
284316 pkg_creator = PkgCreator ()
285- gpg_key_id = pkg_creator .import_gpg_keys (args .gpg_private_key , args .gpg_public_key )
317+ (gpg_key_id , gpg_key_name ) = pkg_creator .import_gpg_keys (args .gpg_private_key , args .gpg_public_key )
318+ pkg_creator .import_rpm_key (args .gpg_public_key )
286319
287320 pkg_uploader = PkgUploader (args .account , args .bucket , args .id , args .secret )
288321 print (f"signing with gpg_key: { gpg_key_id } " )
289322 create_deb_packaging (pkg_creator , pkg_uploader , args .deb_based_releases , gpg_key_id , args .binary , args .archs ,
290323 "main" , args .release_tag )
291324
292- create_rpm_packaging (pkg_creator , pkg_uploader , "./built_artifacts" , args .release_tag , args .binary )
325+ create_rpm_packaging (pkg_creator , pkg_uploader , "./built_artifacts" , args .release_tag , args .binary , gpg_key_name )
0 commit comments