New type __dpkg_architecture
This type handles foreign architectures added to dpkg.
This commit is contained in:
		
					parent
					
						
							
								348c6eedc9
							
						
					
				
			
			
				commit
				
					
						b0f3bb3350
					
				
			
		
					 6 changed files with 185 additions and 0 deletions
				
			
		
							
								
								
									
										8
									
								
								cdist/conf/type/__dpkg_architecture/explorer/architecture
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								cdist/conf/type/__dpkg_architecture/explorer/architecture
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | # __dpkg_architecture/explorer/architecture | ||||||
|  | 
 | ||||||
|  | # Get the main architecture of this machine | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # print or die in the gencode-remote | ||||||
|  | dpkg --print-architecture || true | ||||||
							
								
								
									
										8
									
								
								cdist/conf/type/__dpkg_architecture/explorer/foreign-architectures
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								cdist/conf/type/__dpkg_architecture/explorer/foreign-architectures
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | # __dpkg_architecture/explorer/foreign-architectures | ||||||
|  | 
 | ||||||
|  | # Print all additional architectures | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # print or die in the gencode-remote | ||||||
|  | dpkg --print-foreign-architectures || true | ||||||
							
								
								
									
										64
									
								
								cdist/conf/type/__dpkg_architecture/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										64
									
								
								cdist/conf/type/__dpkg_architecture/gencode-remote
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,64 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | # __dpkg_architecture/gencode-remote | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Get parameter and explorer | ||||||
|  | state_should="$(cat "$__object/parameter/state")" | ||||||
|  | arch_wanted="$__object_id" | ||||||
|  | main_arch="$(cat "$__object/explorer/architecture")" | ||||||
|  | 
 | ||||||
|  | # Exit here if dpkg do not work (empty explorer) | ||||||
|  | if [ -z "$main_arch" ]; then | ||||||
|  |     echo "dpkg is not available or unable to detect a architecture!" >&2 | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Check if requested architecture is the main one | ||||||
|  | if [ "$arch_wanted" = "$main_arch" ]; then | ||||||
|  |     # higher than present; we can not remove it | ||||||
|  |     state_is="present" | ||||||
|  |     caution="yes" | ||||||
|  | 
 | ||||||
|  | # Check if the architecture not already used | ||||||
|  | elif grep -qFx "$arch_wanted" "$__object/explorer/foreign-architectures"; then | ||||||
|  |     state_is="present" | ||||||
|  | 
 | ||||||
|  | # arch does not exist | ||||||
|  | else | ||||||
|  |     state_is="absent" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Check what to do | ||||||
|  | if [ "$state_is" != "$state_should" ]; then | ||||||
|  |     case "$state_should" in | ||||||
|  |         present) | ||||||
|  |             # print add code | ||||||
|  |             printf "dpkg --add-architecture '%s'\n" "$arch_wanted" | ||||||
|  |             # updating the index to make the new architecture available | ||||||
|  |             echo "apt update" | ||||||
|  | 
 | ||||||
|  |             echo added >> "$__messages_out" | ||||||
|  |             ;; | ||||||
|  | 
 | ||||||
|  |         absent) | ||||||
|  |             if [ "$caution" ]; then | ||||||
|  |                 printf "can not remove the main arch '%s' of the system!\n" "$main_arch" >&2 | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|  | 
 | ||||||
|  |             # removing all existing packages for the architecture | ||||||
|  |             printf "apt purge '.*:%s'\n" "$arch_wanted" | ||||||
|  |             # print remove code | ||||||
|  |             printf "dpkg --remove-architecture '%s'\n" "$arch_wanted" | ||||||
|  | 
 | ||||||
|  |             echo removed >> "$__messages_out" | ||||||
|  |             ;; | ||||||
|  | 
 | ||||||
|  |         *) | ||||||
|  |             printf "state '%s' is unknown!\n" "$state_should" >&2 | ||||||
|  |             exit 1 | ||||||
|  |             ;; | ||||||
|  |     esac | ||||||
|  | fi | ||||||
							
								
								
									
										103
									
								
								cdist/conf/type/__dpkg_architecture/man.rst
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								cdist/conf/type/__dpkg_architecture/man.rst
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,103 @@ | ||||||
|  | cdist-type__dpkg_architecture(7) | ||||||
|  | ================================ | ||||||
|  | 
 | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | cdist-type__dpkg_architecture - Handles foreign architectures on debian-like | ||||||
|  | systems managed by `dpkg` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DESCRIPTION | ||||||
|  | ----------- | ||||||
|  | This type handles foreign architectures on systems managed by | ||||||
|  | :strong:`dpkg`\ (1). The object id is the name of the architecture accepted by | ||||||
|  | `dpkg`, which should be added or removed. | ||||||
|  | 
 | ||||||
|  | If the architecture is not setup on the system, it adds a new architecture as a | ||||||
|  | new foreign architecture in `dpkg`. Then, it updates the apt package index to | ||||||
|  | make packages from the new architecture available. | ||||||
|  | 
 | ||||||
|  | If the architecture should be removed, it will remove it if it is not the base | ||||||
|  | architecture on where the system was installed on. Before it, it will purge | ||||||
|  | every package based on the "to be removed" architecture via `apt` to be able to | ||||||
|  | remove the selected architecture. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | REQUIRED PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | None. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | OPTIONAL PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | state | ||||||
|  |     ``present`` or ``absent``. Defaults to ``present``. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | MESSAGES | ||||||
|  | -------- | ||||||
|  | added | ||||||
|  |    Added the specified architecture | ||||||
|  | 
 | ||||||
|  | removed | ||||||
|  |    Removed the specified architecture | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ABORTS | ||||||
|  | ------ | ||||||
|  | Aborts in the following cases: | ||||||
|  | 
 | ||||||
|  | If :strong:`dpkg`\ (1) is not available. It will abort with a proper error | ||||||
|  | message. | ||||||
|  | 
 | ||||||
|  | If the architecture is the same as the base architecture the system is build | ||||||
|  | upon it (returned by ``dpkg --print-architecture``) and it should be removed. | ||||||
|  | 
 | ||||||
|  | It will fail if it can not execute :strong:`apt`\ (8). It is assumed that it is | ||||||
|  | already installed. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | EXAMPLES | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | .. code-block:: sh | ||||||
|  | 
 | ||||||
|  |   # add i386 (32 bit) architecture | ||||||
|  |   __dpkg_architecture i386 | ||||||
|  | 
 | ||||||
|  |   # remove it again :) | ||||||
|  |   __dpkg_architecture i386 --state absent | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SEE ALSO | ||||||
|  | -------- | ||||||
|  | `Multiarch on Debian systems <https://wiki.debian.org/Multiarch>`_ | ||||||
|  | 
 | ||||||
|  | `How to setup multiarch on Debian <https://wiki.debian.org/Multiarch/HOWTO>`_ | ||||||
|  | 
 | ||||||
|  | :strong:`dpkg`\ (1) | ||||||
|  | :strong:`cdist-type__package_dpkg`\ (7) | ||||||
|  | :strong:`cdist-type__package_apt`\ (7) | ||||||
|  | 
 | ||||||
|  | Useful commands: | ||||||
|  | 
 | ||||||
|  | .. code-block:: sh | ||||||
|  | 
 | ||||||
|  |    # base architecture installed on this system | ||||||
|  |    dpkg --print-architecture | ||||||
|  | 
 | ||||||
|  |    # extra architectures added | ||||||
|  |    dpkg --print-foreign-architectures | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | AUTHORS | ||||||
|  | ------- | ||||||
|  | Matthias Stecher <matthiasstecher at gmx.de> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COPYING | ||||||
|  | ------- | ||||||
|  | Copyright \(C) 2020 Matthias Stecher. You can redistribute it | ||||||
|  | and/or modify it under the terms of the GNU General Public License as | ||||||
|  | ublished by the Free Software Foundation, either version 3 of the | ||||||
|  | License, or (at your option) any later version. | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | present | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__dpkg_architecture/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__dpkg_architecture/parameter/optional
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | state | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue