 b9d3e87438
			
		
	
	
		b9d3e87438
		
			
		
	
	
	
	
		
			
			Starting from pacman v5.2.0 there is a problem with updating/installing new packages: $ pacman -Sy ... debug: running command: ALL_PROXY=http://127.0.0.1:8082/ /usr/bin/curl -C - -f https://gluttony.sin.cvut.cz/arch/core/os/x86_64/core.db > /var/lib/pacman/sync/core.db.part warning: running XferCommand: fork failed! ... The problem is caused by change in pacman "run XferCommand via exec" [0]. Refs.: - [0] https://git.archlinux.org/pacman.git/commit/?id=808a4f15ce82d2ed7eeb06de73d0f313620558ee - [1] https://github.com/QubesOS/qubes-issues/issues/5443
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # The Qubes OS Project, http://www.qubes-os.org
 | |
| #
 | |
| # Copyright (C) 2015  Marek Marczykowski-Górecki 
 | |
| #                           <marmarek@invisiblethingslab.com>
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU General Public License
 | |
| # as published by the Free Software Foundation; either version 2
 | |
| # of the License, or (at your option) any later version.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | |
| #
 | |
| #
 | |
| 
 | |
| # Source Qubes library.
 | |
| # shellcheck source=init/functions
 | |
| . /usr/lib/qubes/init/functions
 | |
| 
 | |
| BEGIN_MARKER="### QUBES BEGIN ###"
 | |
| END_MARKER="### QUBES END ###"
 | |
| 
 | |
| set -e
 | |
| 
 | |
| ### helper functions begin ###
 | |
| 
 | |
| # set proxy in given config file
 | |
| update_conf() {
 | |
|     local CONF_PATH="$1"
 | |
|     local CONF_OPTIONS="$2"
 | |
| 
 | |
|     # Ensure that Qubes conf markers are present in the file
 | |
|     if ! grep -q "$BEGIN_MARKER" "$CONF_PATH"; then
 | |
|         if grep -q "$END_MARKER" "$CONF_PATH"; then
 | |
|             echo "ERROR: found QUBES END marker but not QUBES BEGIN in ${CONF_PATH}" >&2
 | |
|             echo "Fix the file by either removing both of them, or adding missing back and retry" >&2
 | |
|             exit 1
 | |
|         fi
 | |
|         cp "$CONF_PATH" "${CONF_PATH}.qubes-orig"
 | |
|         echo "$BEGIN_MARKER" >> "$CONF_PATH"
 | |
|         echo "$END_MARKER" >> "$CONF_PATH"
 | |
|     elif ! grep -q "$END_MARKER" "$CONF_PATH"; then
 | |
|         echo "ERROR: found QUBES BEGIN marker but not QUBES END in ${CONF_PATH}" >&2
 | |
|         echo "Fix the file by either removing both of them, or adding missing back and retry" >&2
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     # Prepare config block
 | |
|     local tmpfile
 | |
|     tmpfile=$(mktemp)
 | |
|     cat > "${tmpfile}" <<EOF
 | |
| # This part of configuration, until QUBES END, is automatically generated by
 | |
| # $0. All changes here will be overriden.
 | |
| # If you want to override any option set here, set it again to desired value,
 | |
| # below this section
 | |
| $CONF_OPTIONS
 | |
| EOF
 | |
| 
 | |
|     # And insert it between the markers
 | |
|     sed -i -e "/^$BEGIN_MARKER$/,/^$END_MARKER$/{
 | |
|         /^$END_MARKER$/b
 | |
|         /^$BEGIN_MARKER$/!d
 | |
|         r ${tmpfile}
 | |
|         }" "${CONF_PATH}"
 | |
|     rm -f "${tmpfile}"
 | |
| }
 | |
| 
 | |
| ### helper functions end
 | |
| 
 | |
| # Determine whether the proxy should be used
 | |
| if qsvc yum-proxy-setup || qsvc updates-proxy-setup ; then
 | |
|     PROXY_ADDR="http://127.0.0.1:8082/"
 | |
|     PROXY_CONF_ENTRY="proxy=$PROXY_ADDR"
 | |
| else
 | |
|     PROXY_ADDR=""
 | |
|     # do not proxy at all (for example dnf.conf doesn't tolerate empty entry)
 | |
|     PROXY_CONF_ENTRY=""
 | |
| fi
 | |
| 
 | |
| # For programs supporting .d style configs, it's simple
 | |
| if [ -d /etc/apt/apt.conf.d ]; then
 | |
|     if [ -n "$PROXY_ADDR" ]; then
 | |
|         cat > /etc/apt/apt.conf.d/01qubes-proxy <<EOF
 | |
| ### This file is automatically generated by Qubes ($0 script).
 | |
| ### All modifications here will be lost.
 | |
| ### If you want to override some of this settings, create another file under 
 | |
| ### /etc/apt/apt.conf.d.
 | |
| 
 | |
| Acquire::http::Proxy "$PROXY_ADDR";
 | |
| Acquire::tor::proxy "$PROXY_ADDR";
 | |
| EOF
 | |
|     else
 | |
|         rm -f /etc/apt/apt.conf.d/01qubes-proxy
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # Yum at least supports including an individual config files
 | |
| if [ -d /etc/yum.conf.d ]; then
 | |
|     cat > /etc/yum.conf.d/qubes-proxy.conf <<EOF
 | |
| ### This file is automatically generated by Qubes ($0 script).
 | |
| ### All modifications here will be lost.
 | |
| ### If you want to override some of this settings, add them in /etc/yum.conf
 | |
| ### below a "include=/etc/yum.conf.d/qubes-proxy.conf" line.
 | |
| 
 | |
| $PROXY_CONF_ENTRY
 | |
| EOF
 | |
| fi
 | |
| 
 | |
| # Pacman (archlinux) also
 | |
| if [ -d /etc/pacman.d ]; then
 | |
|     if [ -n "$PROXY_ADDR" ]; then
 | |
|         cat > /etc/pacman.d/01-qubes-proxy.conf <<EOF
 | |
| ### This file is automatically generated by Qubes ($0 script).
 | |
| ### All modifications here will be lost.
 | |
| ### If you want to override some of this settings, create another file under 
 | |
| ### /etc/pacman.d
 | |
| [options]
 | |
| XferCommand = /usr/bin/env ALL_PROXY=$PROXY_ADDR /usr/bin/curl -C - -f -o %o %u
 | |
| EOF
 | |
|     else
 | |
|         rm -r /etc/pacman.d/01-qubes-proxy.conf
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # DNF configuration doesn't support including other files
 | |
| # https://bugzilla.redhat.com/show_bug.cgi?id=1352234
 | |
| if [ -e /etc/dnf/dnf.conf ]; then
 | |
|     update_conf /etc/dnf/dnf.conf "$PROXY_CONF_ENTRY"
 | |
| fi
 | |
| 
 | |
| # The same goes for PackageKit...
 | |
| # https://bugs.freedesktop.org/show_bug.cgi?id=96788
 | |
| if [ -e /etc/PackageKit/PackageKit.conf ]; then
 | |
|     update_conf /etc/PackageKit/PackageKit.conf "ProxyHTTP=$PROXY_ADDR"
 | |
| fi
 |