Add option to run gitian-build.py on non-debian os
This commits adds the `--no-apt` flag to the gitian-build.py script. This allows gitian builds to be run without root access and non-debian based operating systems.
This commit is contained in:
parent
51766d026b
commit
afbf05bc58
|
@ -80,14 +80,23 @@ Building in docker does not require much setup. Install docker on your host, the
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install git make curl
|
sudo apt-get install git make curl
|
||||||
sudo usermod -aG docker gitianuser
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optionally add yourself to the docker group. Note that this will give docker root access to your system.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo usermod -aG docker gitianuser
|
||||||
|
```
|
||||||
|
|
||||||
Manual and Building
|
Manual and Building
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
The instructions below use the automated script [gitian-build.py](gitian-build.py) which only works in Ubuntu.
|
The instructions below use the automated script [gitian-build.py](gitian-build.py) which only works in Ubuntu.
|
||||||
|
=======
|
||||||
|
The script automatically installs some packages with apt. If you are not running it on a debian-like system, pass `--no-apt` along with the other
|
||||||
|
arguments to it. It calls all available .yml descriptors, which in turn pass the build configurations for different platforms to gitian.
|
||||||
|
The instructions below use the automated script [gitian-build.py](gitian-build.py) which is tested to work on Ubuntu.
|
||||||
|
|
||||||
It calls all available .yml descriptors, which in turn pass the build configurations for different platforms to gitian.
|
It calls all available .yml descriptors, which in turn pass the build configurations for different platforms to gitian.
|
||||||
Help for the build steps taken can be accessed with `./gitian-build.py --help`.
|
Help for the build steps taken can be accessed with `./gitian-build.py --help`.
|
||||||
|
|
||||||
|
|
|
@ -7,20 +7,12 @@ import sys
|
||||||
|
|
||||||
def setup():
|
def setup():
|
||||||
global args, workdir
|
global args, workdir
|
||||||
programs = ['ruby', 'git', 'apt-cacher-ng', 'make', 'wget']
|
programs = ['apt-cacher-ng', 'ruby', 'git', 'make', 'wget']
|
||||||
if args.kvm:
|
if args.kvm:
|
||||||
programs += ['python-vm-builder', 'qemu-kvm', 'qemu-utils']
|
programs += ['python-vm-builder', 'qemu-kvm', 'qemu-utils']
|
||||||
elif args.docker:
|
|
||||||
dockers = ['docker.io', 'docker-ce']
|
|
||||||
for i in dockers:
|
|
||||||
return_code = subprocess.call(['sudo', 'apt-get', 'install', '-qq', i])
|
|
||||||
if return_code == 0:
|
|
||||||
break
|
|
||||||
if return_code != 0:
|
|
||||||
print('Cannot find any way to install docker', file=sys.stderr)
|
|
||||||
exit(1)
|
|
||||||
else:
|
else:
|
||||||
programs += ['lxc', 'debootstrap']
|
programs += ['lxc', 'debootstrap']
|
||||||
|
if not args.no_apt:
|
||||||
subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs)
|
subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs)
|
||||||
if not os.path.isdir('gitian.sigs'):
|
if not os.path.isdir('gitian.sigs'):
|
||||||
subprocess.check_call(['git', 'clone', 'https://github.com/monero-project/gitian.sigs.git'])
|
subprocess.check_call(['git', 'clone', 'https://github.com/monero-project/gitian.sigs.git'])
|
||||||
|
@ -32,6 +24,8 @@ def setup():
|
||||||
subprocess.check_call(['git', 'checkout', '963322de8420c50502c4cc33d4d7c0d84437b576'])
|
subprocess.check_call(['git', 'checkout', '963322de8420c50502c4cc33d4d7c0d84437b576'])
|
||||||
make_image_prog = ['bin/make-base-vm', '--suite', 'bionic', '--arch', 'amd64']
|
make_image_prog = ['bin/make-base-vm', '--suite', 'bionic', '--arch', 'amd64']
|
||||||
if args.docker:
|
if args.docker:
|
||||||
|
if not subprocess.call(['docker', '--help'], shell=False, stdout=subprocess.DEVNULL):
|
||||||
|
print("Please install docker first manually")
|
||||||
make_image_prog += ['--docker']
|
make_image_prog += ['--docker']
|
||||||
elif not args.kvm:
|
elif not args.kvm:
|
||||||
make_image_prog += ['--lxc']
|
make_image_prog += ['--lxc']
|
||||||
|
@ -40,7 +34,7 @@ def setup():
|
||||||
if args.is_bionic and not args.kvm and not args.docker:
|
if args.is_bionic and not args.kvm and not args.docker:
|
||||||
subprocess.check_call(['sudo', 'sed', '-i', 's/lxcbr0/br0/', '/etc/default/lxc-net'])
|
subprocess.check_call(['sudo', 'sed', '-i', 's/lxcbr0/br0/', '/etc/default/lxc-net'])
|
||||||
print('Reboot is required')
|
print('Reboot is required')
|
||||||
exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def build():
|
def build():
|
||||||
global args, workdir
|
global args, workdir
|
||||||
|
@ -100,7 +94,7 @@ def verify():
|
||||||
def main():
|
def main():
|
||||||
global args, workdir
|
global args, workdir
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(usage='%(prog)s [options] signer version')
|
parser = argparse.ArgumentParser(description='Script for running full Gitian builds.', usage='%(prog)s [options] signer version')
|
||||||
parser.add_argument('-c', '--commit', action='store_true', dest='commit', help='Indicate that the version argument is for a commit or branch')
|
parser.add_argument('-c', '--commit', action='store_true', dest='commit', help='Indicate that the version argument is for a commit or branch')
|
||||||
parser.add_argument('-p', '--pull', action='store_true', dest='pull', help='Indicate that the version argument is the number of a github repository pull request')
|
parser.add_argument('-p', '--pull', action='store_true', dest='pull', help='Indicate that the version argument is the number of a github repository pull request')
|
||||||
parser.add_argument('-u', '--url', dest='url', default='https://github.com/monero-project/monero', help='Specify the URL of the repository. Default is %(default)s')
|
parser.add_argument('-u', '--url', dest='url', default='https://github.com/monero-project/monero', help='Specify the URL of the repository. Default is %(default)s')
|
||||||
|
@ -112,11 +106,12 @@ def main():
|
||||||
parser.add_argument('-m', '--memory', dest='memory', default='2000', help='Memory to allocate in MiB. Default %(default)s')
|
parser.add_argument('-m', '--memory', dest='memory', default='2000', help='Memory to allocate in MiB. Default %(default)s')
|
||||||
parser.add_argument('-k', '--kvm', action='store_true', dest='kvm', help='Use KVM instead of LXC')
|
parser.add_argument('-k', '--kvm', action='store_true', dest='kvm', help='Use KVM instead of LXC')
|
||||||
parser.add_argument('-d', '--docker', action='store_true', dest='docker', help='Use Docker instead of LXC')
|
parser.add_argument('-d', '--docker', action='store_true', dest='docker', help='Use Docker instead of LXC')
|
||||||
parser.add_argument('-S', '--setup', action='store_true', dest='setup', help='Set up the Gitian building environment. Uses LXC. If you want to use KVM, use the --kvm option. Only works on Debian-based systems (Ubuntu, Debian)')
|
parser.add_argument('-S', '--setup', action='store_true', dest='setup', help='Set up the Gitian building environment. Uses LXC. If you want to use KVM, use the --kvm option. If you run this script on a non-debian based system, pass the --no-apt flag')
|
||||||
parser.add_argument('-D', '--detach-sign', action='store_true', dest='detach_sign', help='Create the assert file for detached signing. Will not commit anything.')
|
parser.add_argument('-D', '--detach-sign', action='store_true', dest='detach_sign', help='Create the assert file for detached signing. Will not commit anything.')
|
||||||
parser.add_argument('-n', '--no-commit', action='store_false', dest='commit_files', help='Do not commit anything to git')
|
parser.add_argument('-n', '--no-commit', action='store_false', dest='commit_files', help='Do not commit anything to git')
|
||||||
parser.add_argument('signer', help='GPG signer to sign each build assert file')
|
parser.add_argument('signer', nargs='?', help='GPG signer to sign each build assert file')
|
||||||
parser.add_argument('version', help='Version number, commit, or branch to build.')
|
parser.add_argument('version', nargs='?', help='Version number, commit, or branch to build.')
|
||||||
|
parser.add_argument('-a', '--no-apt', action='store_true', dest='no_apt', help='Indicate that apt is not installed on the system')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
workdir = os.getcwd()
|
workdir = os.getcwd()
|
||||||
|
@ -128,8 +123,8 @@ def main():
|
||||||
args.is_bionic = b'bionic' in subprocess.check_output(['lsb_release', '-cs'])
|
args.is_bionic = b'bionic' in subprocess.check_output(['lsb_release', '-cs'])
|
||||||
|
|
||||||
if args.buildsign:
|
if args.buildsign:
|
||||||
args.build=True
|
args.build = True
|
||||||
args.sign=True
|
args.sign = True
|
||||||
|
|
||||||
if args.kvm and args.docker:
|
if args.kvm and args.docker:
|
||||||
raise Exception('Error: cannot have both kvm and docker')
|
raise Exception('Error: cannot have both kvm and docker')
|
||||||
|
@ -156,11 +151,11 @@ def main():
|
||||||
if args.signer == '':
|
if args.signer == '':
|
||||||
print(script_name+': Missing signer.')
|
print(script_name+': Missing signer.')
|
||||||
print('Try '+script_name+' --help for more information')
|
print('Try '+script_name+' --help for more information')
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
if args.version == '':
|
if args.version == '':
|
||||||
print(script_name+': Missing version.')
|
print(script_name+': Missing version.')
|
||||||
print('Try '+script_name+' --help for more information')
|
print('Try '+script_name+' --help for more information')
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Add leading 'v' for tags
|
# Add leading 'v' for tags
|
||||||
if args.commit and args.pull:
|
if args.commit and args.pull:
|
||||||
|
|
Loading…
Reference in New Issue