Skip to content

Instantly share code, notes, and snippets.

@notmyname
Last active October 29, 2019 17:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save notmyname/40b8131963346676dd18817aeb5ef799 to your computer and use it in GitHub Desktop.
Save notmyname/40b8131963346676dd18817aeb5ef799 to your computer and use it in GitHub Desktop.
py3-only saio setup on ubuntu 18.04 (bionic)
#!/bin/bash
set +e
VBoxManage controlvm saio_vm poweroff
VBoxManage unregistervm saio_vm --delete
rm /home/john/vbox_storage/saio_vm/*
set -e
VBoxManage createvm --name saio_vm --ostype Ubuntu_64 --register
VBoxManage modifyvm saio_vm --memory 4096 --acpi on --boot1 dvd --boot2 disk --boot3 none --boot4 none --cpus 2
VBoxManage modifyvm saio_vm --audio none
VBoxManage storagectl saio_vm --name SATA --add sata --controller IntelAhci --portcount 16 --hostiocache off --bootable on
VBoxManage storagectl saio_vm --name IDE --add ide
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_os.vdi --format VDI --size 10240
VBoxManage storageattach saio_vm --storagectl SATA --port 0 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_os.vdi
VBoxManage storageattach saio_vm --storagectl IDE --port 0 --device 1 --type dvddrive --medium /home/john/vbox_storage/ubuntu-18.04.1-live-server-amd64.iso
# create data drives
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk1.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk2.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk3.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk4.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk5.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk6.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk7.vdi --format VDI --size 20480
VBoxManage createmedium disk --filename /home/john/vbox_storage/saio_vm/saio_disk8.vdi --format VDI --size 20480
VBoxManage storageattach saio_vm --storagectl SATA --port 2 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk1.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 3 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk2.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 4 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk3.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 5 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk4.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 6 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk5.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 7 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk6.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 8 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk7.vdi
VBoxManage storageattach saio_vm --storagectl SATA --port 9 --device 0 --type hdd --medium /home/john/vbox_storage/saio_vm/saio_disk8.vdi
VBoxManage modifyvm saio_vm --vrde on
VBoxManage modifyvm saio_vm --nic1 bridged --bridgeadapter1 eno3
VBoxManage modifyvm saio_vm --vrdeauthtype null
VBoxManage modifyvm saio_vm --vrde on --vrdeport 3389 --vrdeaddress 0.0.0.0
# why doesn't this do vrdp stuff?
VBoxHeadless --startvm saio_vm --vrde config
sudo apt-get update
sudo apt-get upgrade
sudo apt-add-repository universe
sudo apt-get install curl gcc memcached rsync sqlite3 xfsprogs git-core \
libffi-dev libssl-dev python3-setuptools python3-dev \
python3-pip python3-coverage python3-nose python3-xattr \
python3-eventlet python3-greenlet python3-pastedeploy \
python3-netifaces python3-dnspython python3-mock
n=0
for x in {b..i}; do
((n++))
sudo parted /dev/sd${x} --script -- mklabel gpt
sudo parted /dev/sd${x} --script -- mkpart primary 0% 100%
sudo mkfs.xfs -f -L d${n} /dev/sd${x}1
done
sudo mkdir -p /srv/1/node/d1
sudo mkdir -p /srv/1/node/d5
sudo mkdir -p /srv/2/node/d2
sudo mkdir -p /srv/2/node/d6
sudo mkdir -p /srv/3/node/d3
sudo mkdir -p /srv/3/node/d7
sudo mkdir -p /srv/4/node/d4
sudo mkdir -p /srv/4/node/d8
truncate -s 1GB /home/swift/xfs_file # create 1GB fil for XFS in your home directory
mkfs.xfs xfs_file
sudo mount -o loop,noatime,nodiratime xfs_file /tmp
sudo chmod -R 1777 /tmp
sudo tee -a /etc/fstab <<EOM
/home/swift/xfs_file /tmp xfs rw,noatime,nodiratime,attr2,inode64,noquota 0 0
LABEL=d1 /srv/1/node/d1 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d2 /srv/1/node/d5 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d3 /srv/2/node/d2 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d4 /srv/2/node/d6 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d5 /srv/3/node/d3 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d6 /srv/3/node/d7 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d7 /srv/4/node/d4 xfs noatime,nodiratime,logbufs=8 0 0
LABEL=d8 /srv/5/node/d8 xfs noatime,nodiratime,logbufs=8 0 0
EOM
for x in {1..8}; do
sudo mount -L d${x}
done
sudo chown -R swift:swift /srv/*/node/*/
sudo mkdir -p /var/run/swift
sudo chown -R swift:swift /var/run/swift
sudo tee -a /etc/rc.local <<EOM
mkdir -p /var/cache/swift /var/cache/swift2 /var/cache/swift3 /var/cache/swift4
chown swift:swift /var/cache/swift*
mkdir -p /var/run/swift
chown swift:swift /var/run/swift
EOM
cd $HOME
# install swiftclient
git clone https://github.com/openstack/python-swiftclient.git
cd python-swiftclient
sudo python3 ./setup.py develo
cd ..
# install swift
git clone https://github.com/openstack/swift.git
cd swift
sudo pip3 install --no-binary cryptography -r requirements.txt
sudo python3 ./setup.py develop
sudo pi3 install -r test-requirements.txt
cd ..
# rsync
sudo cp $HOME/swift/doc/saio/rsyncd.conf /etc/
sudo sed -i "s/<your-user-name>/${USER}/" /etc/rsyncd.conf
sudo sed -i "s/RSYNC_ENABLE=false/RSYNC_ENABLE=true/" /etc/default/rsync
sudo systemctl enable rsync
sudo systemctl start rsync
# memcached
sudo systemctl enable memcached.service
sudo systemctl start memcached.service
# individual logging
sudo cp $HOME/swift/doc/saio/rsyslog.d/10-swift.conf /etc/rsyslog.d/
sudo sed -i 's/$PrivDropToGroup syslog/$PrivDropToGroup adm/' /etc/rsyslog.conf
sudo mkdir -p /var/log/swift
sudo chown -R syslog.adm /var/log/swift
sudo chmod -R g+w /var/log/swift
sudo service rsyslog restart
# swift configs
cd $HOME/swift/doc; sudo cp -r saio/swift /etc/swift; cd -
sudo chown -R ${USER}:${USER} /etc/swift
find /etc/swift/ -name \*.conf | xargs sudo sed -i "s/<your-user-name>/${USER}/"
mkdir -p $HOME/bin
cd $HOME/swift/doc; cp saio/bin/* $HOME/bin; cd -
chmod +x $HOME/bin/*
cat >$HOME/bin/resetswift <<\EOM
#!/bin/bash
swift-init all kill
sudo find /var/log/swift -type f -exec rm -f {} \;
# unmount drives
n=0
for x in {b..i}; do
((n++))
sudo umount -f /dev/sd${x}1
# sudo parted /dev/sd${x} --script -- mklabel gpt
# sudo parted /dev/sd${x} --script -- mkpart primary 0% 100%
# sudo umount -f /dev/sd${x}1
sudo mkfs.xfs -f -L d${n} /dev/sd${x}1
done
for x in {1..8}; do
sudo mount -L d${x}
done
sudo chown -R swift:swift /srv/*/node/*/
sudo mkdir -p /var/run/swift
sudo chown -R swift:swift /var/run/swift
find /var/cache/swift* -type f -name *.recon -exec rm -f {} \;
if [ "`type -t systemctl`" == "file" ]; then
sudo systemctl restart rsyslog
sudo systemctl restart memcached
else
sudo service rsyslog restart
sudo service memcached restart
fi
EOM
cat >$HOME/bin/remakerings <<\EOM
#!/bin/bash
set -e
cd /etc/swift
rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
swift-ring-builder object.builder create 10 3 1
swift-ring-builder object.builder add r1z1-127.0.0.1:6010/d1 1
swift-ring-builder object.builder add r1z2-127.0.0.2:6020/d2 1
swift-ring-builder object.builder add r1z3-127.0.0.3:6030/d3 1
swift-ring-builder object.builder add r1z4-127.0.0.4:6040/d4 1
swift-ring-builder object.builder rebalance
swift-ring-builder object-1.builder create 10 2 1
swift-ring-builder object-1.builder add r1z1-127.0.0.1:6010/d1 1
swift-ring-builder object-1.builder add r1z2-127.0.0.2:6020/d2 1
swift-ring-builder object-1.builder add r1z3-127.0.0.3:6030/d3 1
swift-ring-builder object-1.builder add r1z4-127.0.0.4:6040/d4 1
swift-ring-builder object-1.builder rebalance
swift-ring-builder object-2.builder create 10 6 1
swift-ring-builder object-2.builder add r1z1-127.0.0.1:6010/d1 1
swift-ring-builder object-2.builder add r1z1-127.0.0.1:6010/d5 1
swift-ring-builder object-2.builder add r1z2-127.0.0.2:6020/d2 1
swift-ring-builder object-2.builder add r1z2-127.0.0.2:6020/d6 1
swift-ring-builder object-2.builder add r1z3-127.0.0.3:6030/d3 1
swift-ring-builder object-2.builder add r1z3-127.0.0.3:6030/d7 1
swift-ring-builder object-2.builder add r1z4-127.0.0.4:6040/d4 1
swift-ring-builder object-2.builder add r1z4-127.0.0.4:6040/d8 1
swift-ring-builder object-2.builder rebalance
swift-ring-builder container.builder create 10 3 1
swift-ring-builder container.builder add r1z1-127.0.0.1:6011/d1 1
swift-ring-builder container.builder add r1z2-127.0.0.2:6021/d2 1
swift-ring-builder container.builder add r1z3-127.0.0.3:6031/d3 1
swift-ring-builder container.builder add r1z4-127.0.0.4:6041/d4 1
swift-ring-builder container.builder rebalance
swift-ring-builder account.builder create 10 3 1
swift-ring-builder account.builder add r1z1-127.0.0.1:6012/d1 1
swift-ring-builder account.builder add r1z2-127.0.0.2:6022/d2 1
swift-ring-builder account.builder add r1z3-127.0.0.3:6032/d3 1
swift-ring-builder account.builder add r1z4-127.0.0.4:6042/d4 1
swift-ring-builder account.builder rebalance
EOM
cp $HOME/swift/test/sample.conf /etc/swift/test.conf
echo "export SWIFT_TEST_CONFIG_FILE=/etc/swift/test.conf" >> $HOME/.bashrc
echo "export PATH=${PATH}:$HOME/bin" >> $HOME/.bashrc
# let the proxy listen externally
sed -i "s/bind_ip = 127.0.0.1/bind_ip = 0.0.0.0/" /etc/swift/proxy-server.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment