xref: /aosp_15_r20/external/bcc/scripts/build_bpf_demo.sh (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker#!/bin/bash
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker#set -x
4*387f9dfdSAndroid Build Coastguard Workerset -e
5*387f9dfdSAndroid Build Coastguard Worker
6*387f9dfdSAndroid Build Coastguard Workerfunction usage() {
7*387f9dfdSAndroid Build Coastguard Worker  cat <<DELIM__
8*387f9dfdSAndroid Build Coastguard Workerusage: $(basename $0) [options]
9*387f9dfdSAndroid Build Coastguard Worker
10*387f9dfdSAndroid Build Coastguard WorkerOptions:
11*387f9dfdSAndroid Build Coastguard Worker  -b, --bridge BRNAME   Which linux bridge to attach to
12*387f9dfdSAndroid Build Coastguard Worker  -c, --cpu NUM         Number of CPUs to reserve to the instance (default 4)
13*387f9dfdSAndroid Build Coastguard Worker  -g, --github_token X  HTTP Github oauth token (for buildbots)
14*387f9dfdSAndroid Build Coastguard Worker  -k, --kickstart KS    Path to kickstart file to use (required)
15*387f9dfdSAndroid Build Coastguard Worker  -m, --mirror URL      URL at which to reach netinstallable packages
16*387f9dfdSAndroid Build Coastguard Worker  -M, --mem NUM         Number of MB to reserve to the instance (default 4094)
17*387f9dfdSAndroid Build Coastguard Worker  -n, --name NAME       Name of the instance (required)
18*387f9dfdSAndroid Build Coastguard Worker  -p, --password PASS   Password to set in the VM
19*387f9dfdSAndroid Build Coastguard Worker  -s, --size NUM        Size in GB to reserve for the virtual HDD (default 40GB)
20*387f9dfdSAndroid Build Coastguard WorkerDELIM__
21*387f9dfdSAndroid Build Coastguard Worker}
22*387f9dfdSAndroid Build Coastguard Worker
23*387f9dfdSAndroid Build Coastguard WorkerTEMP=$(getopt -o b:c:k:m:M:n:p:s: --long bridge:,cpu:,kickstart:,mirror:,mem:,name:,password:size: -- "$@")
24*387f9dfdSAndroid Build Coastguard Workerif [[ $? -ne 0 ]]; then
25*387f9dfdSAndroid Build Coastguard Worker  usage
26*387f9dfdSAndroid Build Coastguard Worker  exit 1
27*387f9dfdSAndroid Build Coastguard Workerfi
28*387f9dfdSAndroid Build Coastguard Worker
29*387f9dfdSAndroid Build Coastguard Workereval set -- "$TEMP"
30*387f9dfdSAndroid Build Coastguard Worker
31*387f9dfdSAndroid Build Coastguard Workerwhile true; do
32*387f9dfdSAndroid Build Coastguard Worker  case "$1" in
33*387f9dfdSAndroid Build Coastguard Worker    -b|--bridge) BRIDGE="$2"; shift 2 ;;
34*387f9dfdSAndroid Build Coastguard Worker    -c|--cpu) CPU="$2"; shift 2 ;;
35*387f9dfdSAndroid Build Coastguard Worker    -k|--kickstart) KICKSTART="$2"; shift 2 ;;
36*387f9dfdSAndroid Build Coastguard Worker    -n|--name) NAME="$2"; shift 2 ;;
37*387f9dfdSAndroid Build Coastguard Worker    -m|--mirror) MIRROR="$2"; shift 2 ;;
38*387f9dfdSAndroid Build Coastguard Worker    -M|--mem) MEM="$2"; shift 2 ;;
39*387f9dfdSAndroid Build Coastguard Worker    -p|--password) PASSWORD="$2"; shift 2 ;;
40*387f9dfdSAndroid Build Coastguard Worker    -s|--size) SIZE="$2"; shift 2 ;;
41*387f9dfdSAndroid Build Coastguard Worker    --) shift; break ;;
42*387f9dfdSAndroid Build Coastguard Worker    *) usage; exit 1
43*387f9dfdSAndroid Build Coastguard Worker      ;;
44*387f9dfdSAndroid Build Coastguard Worker  esac
45*387f9dfdSAndroid Build Coastguard Workerdone
46*387f9dfdSAndroid Build Coastguard Worker[[ ! -f "$KICKSTART" ]] && { usage; exit 1; }
47*387f9dfdSAndroid Build Coastguard Worker[[ -z "$NAME" ]] && { usage; exit 1; }
48*387f9dfdSAndroid Build Coastguard Worker
49*387f9dfdSAndroid Build Coastguard WorkerPASSWORD=${PASSWORD:-"iovisor"}
50*387f9dfdSAndroid Build Coastguard WorkerBRIDGE=${BRIDGE:-virbr0}
51*387f9dfdSAndroid Build Coastguard WorkerMIRROR=${MIRROR:-http://mirror.pnl.gov/fedora/linux/releases/22}
52*387f9dfdSAndroid Build Coastguard WorkerMEM=${MEM:-4094}
53*387f9dfdSAndroid Build Coastguard WorkerCPU=${CPU:-4}
54*387f9dfdSAndroid Build Coastguard WorkerSIZE=${SIZE:-40}
55*387f9dfdSAndroid Build Coastguard Worker
56*387f9dfdSAndroid Build Coastguard Workerif [[ "$(id -u)" != "0" ]]; then
57*387f9dfdSAndroid Build Coastguard Worker  sudo="sudo"
58*387f9dfdSAndroid Build Coastguard Workerfi
59*387f9dfdSAndroid Build Coastguard Worker
60*387f9dfdSAndroid Build Coastguard Workerif ! which virt-install &> /dev/null; then
61*387f9dfdSAndroid Build Coastguard Worker  echo "Error: virt-install is not installed"
62*387f9dfdSAndroid Build Coastguard Worker  exit 1
63*387f9dfdSAndroid Build Coastguard Workerfi
64*387f9dfdSAndroid Build Coastguard Worker
65*387f9dfdSAndroid Build Coastguard Workerlibvirt_dir=/var/lib/libvirt/images
66*387f9dfdSAndroid Build Coastguard Workerimg_name=$NAME
67*387f9dfdSAndroid Build Coastguard Workertmpdir=$(mktemp -d /tmp/virt-install_XXXXX)
68*387f9dfdSAndroid Build Coastguard Workertmp_ks_file=$tmpdir/$img_name.ks
69*387f9dfdSAndroid Build Coastguard Worker
70*387f9dfdSAndroid Build Coastguard Workerfunction cleanup() {
71*387f9dfdSAndroid Build Coastguard Worker  set +e
72*387f9dfdSAndroid Build Coastguard Worker  [[ -d "$tmpdir" ]] && rm -fr "$tmpdir"
73*387f9dfdSAndroid Build Coastguard Worker  local destroy_kvm=n
74*387f9dfdSAndroid Build Coastguard Worker  [[ -f "/etc/libvirt/qemu/$img_name.xml" ]] && read -p "Destroy libvirt VM (y/n)? " destroy_kvm
75*387f9dfdSAndroid Build Coastguard Worker  if [[ "$destroy_kvm" != n* ]]; then
76*387f9dfdSAndroid Build Coastguard Worker    virsh destroy $img_name
77*387f9dfdSAndroid Build Coastguard Worker    virsh undefine $img_name
78*387f9dfdSAndroid Build Coastguard Worker    virsh vol-delete $img_name.img --pool default
79*387f9dfdSAndroid Build Coastguard Worker    $sudo rm -f $libvirt_dir/$img_name.img
80*387f9dfdSAndroid Build Coastguard Worker  fi
81*387f9dfdSAndroid Build Coastguard Worker}
82*387f9dfdSAndroid Build Coastguard Workertrap cleanup EXIT
83*387f9dfdSAndroid Build Coastguard Worker
84*387f9dfdSAndroid Build Coastguard Workerruby <<DELIM__
85*387f9dfdSAndroid Build Coastguard Workerrequire 'erb'
86*387f9dfdSAndroid Build Coastguard Worker@password="$PASSWORD"
87*387f9dfdSAndroid Build Coastguard Worker@name="$NAME"
88*387f9dfdSAndroid Build Coastguard Worker@domain="example.com"
89*387f9dfdSAndroid Build Coastguard Worker@github_access_token="$GITHUB_ACCESS_TOKEN"
90*387f9dfdSAndroid Build Coastguard Worker@mirror="$MIRROR"
91*387f9dfdSAndroid Build Coastguard WorkerFile.open('$tmp_ks_file', 'w') do |f|
92*387f9dfdSAndroid Build Coastguard Worker  f.puts ERB.new(File.open('$KICKSTART', 'rb').read, nil, '-').result()
93*387f9dfdSAndroid Build Coastguard Workerend
94*387f9dfdSAndroid Build Coastguard WorkerDELIM__
95*387f9dfdSAndroid Build Coastguard Worker
96*387f9dfdSAndroid Build Coastguard Workertree=$MIRROR/Server/x86_64/os/
97*387f9dfdSAndroid Build Coastguard Workervirt-install --connect=qemu:///system \
98*387f9dfdSAndroid Build Coastguard Worker    --network=bridge:$BRIDGE \
99*387f9dfdSAndroid Build Coastguard Worker    --initrd-inject=$tmp_ks_file \
100*387f9dfdSAndroid Build Coastguard Worker    --controller type=scsi,model=virtio-scsi \
101*387f9dfdSAndroid Build Coastguard Worker    --extra-args="ks=file:/$(basename $tmp_ks_file) console=tty0 console=ttyS0,115200" \
102*387f9dfdSAndroid Build Coastguard Worker    --name=$img_name \
103*387f9dfdSAndroid Build Coastguard Worker    --disk $libvirt_dir/$img_name.img,cache=none,format=qcow2,size=$SIZE,bus=scsi \
104*387f9dfdSAndroid Build Coastguard Worker    --ram $MEM \
105*387f9dfdSAndroid Build Coastguard Worker    --vcpus=$CPU \
106*387f9dfdSAndroid Build Coastguard Worker    --check-cpu \
107*387f9dfdSAndroid Build Coastguard Worker    --accelerate \
108*387f9dfdSAndroid Build Coastguard Worker    --hvm \
109*387f9dfdSAndroid Build Coastguard Worker    --location=$tree \
110*387f9dfdSAndroid Build Coastguard Worker    --nographics
111*387f9dfdSAndroid Build Coastguard Worker
112*387f9dfdSAndroid Build Coastguard Workerecho "SUCCESS"
113*387f9dfdSAndroid Build Coastguard Workerexit 0
114