swift/doc/source/development_saio.rst
2010-07-12 17:03:45 -05:00

12 KiB

SAIO - Swift All In One

Instructions for seting up a dev VM

This documents setting up a virtual machine for doing Swift development. The virtual machine will emulate running a four node Swift cluster. It assumes you're using VMware Fusion 3 on Mac OS X Snow Leopard, but should give a good idea what to do on other environments.

  • Get the Ubuntu 10.04 LTS (Lucid Lynx) server image from: http://cdimage.ubuntu.com/releases/10.04/release/ubuntu-10.04-dvd-amd64.iso
  • Create guest virtual machine:
    1. Continue without disc
    2. Use operating system installation disc image file, pick the .iso from above.
    3. Select Linux and Ubuntu 64-bit.
    4. Fill in the Linux Easy Install details (you should make the user name match your bzr repo user name).
    5. Customize Settings, name the image whatever you want (SAIO for instance.)
    6. When the Settings window comes up, select Hard Disk, create an extra disk (the defaults are fine).
    7. Start the virtual machine up and wait for the easy install to finish.
  • As root on guest (you'll have to log in as you, then sudo su -):
    1. apt-get update

    2. apt-get install curl gcc bzr memcached python-configobj python-coverage python-dev python-nose python-setuptools python-simplejson python-xattr sqlite3 xfsprogs

    3. Install anything else you want, like screen, ssh, vim, etc.

    4. easy_install -U eventlet

    5. easy_install -U webob

    6. fdisk /dev/sdb (set up a single partition)

    7. mkfs.xfs -i size=1024 /dev/sdb1

    8. mkdir /mnt/sdb1

    9. Edit /etc/fstab and add /dev/sdb1 /mnt/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

    10. mount /mnt/sdb1

    11. mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4 /mnt/sdb1/test

    12. chown <your-user-name>:<your-group-name> /mnt/sdb1/*

    13. for x in {1..4}; do ln -s /mnt/sdb1/$x /srv/$x; done

    14. mkdir -p /etc/swift/object-server /etc/swift/container-server /etc/swift/account-server /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4 /var/run/swift

    15. chown -R <your-user-name>:<your-group-name> /etc/swift /srv/[1-4] /var/run/swift

    16. Add to /etc/rc.local (before the exit 0):

      mkdir /var/run/swift
      chown <your-user-name>:<your-user-name> /var/run/swift
    17. Create /etc/rsyncd.conf:

      uid = <Your user name>
      gid = <Your group name>
      log file = /var/log/rsyncd.log
      pid file = /var/run/rsyncd.pid
      
      
      [account6012]
      max connections = 25
      path = /srv/1/node/
      read only = false
      lock file = /var/lock/account6012.lock
      
      [account6022]
      max connections = 25
      path = /srv/2/node/
      read only = false
      lock file = /var/lock/account6022.lock
      
      [account6032]
      max connections = 25
      path = /srv/3/node/
      read only = false
      lock file = /var/lock/account6032.lock
      
      [account6042]
      max connections = 25
      path = /srv/4/node/
      read only = false
      lock file = /var/lock/account6042.lock
      
      
      [container6011]
      max connections = 25
      path = /srv/1/node/
      read only = false
      lock file = /var/lock/container6011.lock
      
      [container6021]
      max connections = 25
      path = /srv/2/node/
      read only = false
      lock file = /var/lock/container6021.lock
      
      [container6031]
      max connections = 25
      path = /srv/3/node/
      read only = false
      lock file = /var/lock/container6031.lock
      
      [container6041]
      max connections = 25
      path = /srv/4/node/
      read only = false
      lock file = /var/lock/container6041.lock
      
      
      [object6010]
      max connections = 25
      path = /srv/1/node/
      read only = false
      lock file = /var/lock/object6010.lock
      
      [object6020]
      max connections = 25
      path = /srv/2/node/
      read only = false
      lock file = /var/lock/object6020.lock
      
      [object6030]
      max connections = 25
      path = /srv/3/node/
      read only = false
      lock file = /var/lock/object6030.lock
      
      [object6040]
      max connections = 25
      path = /srv/4/node/
      read only = false
      lock file = /var/lock/object6040.lock
    18. Edit the following line in /etc/default/rsync:

      RSYNC_ENABLE=true
    19. service rsync restart

  • As you on guest:
    1. mkdir ~/bin

    2. Create `~/.bazaar/.bazaar.conf`:

      [DEFAULT]
              email = Your Name <your-email-address>
    3. Check out your bzr repo of swift, for example: bzr branch lp:swift

    4. for f in `ls ~/openswift/bin/`; do sudo ln -s /home/<your-user-name>/openswift/bin/$f /usr/bin/`basename $f .py`; done

    5. Edit ~/.bashrc and add to the end:

      export PYTHONPATH=~/openswift
      export PATH_TO_TEST_XFS=/mnt/sdb1/test
      export SWIFT_TEST_CONFIG_FILE=/etc/swift/func_test.conf
      export PATH=${PATH}:~/bin
    6. . ~/.bashrc

    7. Create `/etc/swift/auth-server.conf`:

      [auth-server]
      default_cluster_url = http://127.0.0.1:8080/v1
      user = <your-user-name>
    8. Create `/etc/swift/proxy-server.conf`:

      [proxy-server]
      bind_port = 8080
      user = <your-user-name>
    9. Create `/etc/swift/account-server/1.conf`:

      [account-server]
      devices = /srv/1/node
      mount_check = false
      bind_port = 6012
      user = <your-user-name>
      
      [account-replicator]
      vm_test_mode = yes
      
      [account-auditor]
      
      [account-reaper]
    10. Create `/etc/swift/account-server/2.conf`:

      [account-server]
      devices = /srv/2/node
      mount_check = false
      bind_port = 6022
      user = <your-user-name>
      
      [account-replicator]
      vm_test_mode = yes
      
      [account-auditor]
      
      [account-reaper]
    11. Create `/etc/swift/account-server/3.conf`:

      [account-server]
      devices = /srv/3/node
      mount_check = false
      bind_port = 6032
      user = <your-user-name>
      
      [account-replicator]
      vm_test_mode = yes
      
      [account-auditor]
      
      [account-reaper]
    12. Create `/etc/swift/account-server/4.conf`:

      [account-server]
      devices = /srv/4/node
      mount_check = false
      bind_port = 6042
      user = <your-user-name>
      
      [account-replicator]
      vm_test_mode = yes
      
      [account-auditor]
      
      [account-reaper]
    13. Create `/etc/swift/container-server/1.conf`:

      [container-server]
      devices = /srv/1/node
      mount_check = false
      bind_port = 6011
      user = <your-user-name>
      
      [container-replicator]
      vm_test_mode = yes
      
      [container-updater]
      
      [container-auditor]
    14. Create `/etc/swift/container-server/2.conf`:

      [container-server]
      devices = /srv/2/node
      mount_check = false
      bind_port = 6021
      user = <your-user-name>
      
      [container-replicator]
      vm_test_mode = yes
      
      [container-updater]
      
      [container-auditor]
    15. Create `/etc/swift/container-server/3.conf`:

      [container-server]
      devices = /srv/3/node
      mount_check = false
      bind_port = 6031
      user = <your-user-name>
      
      [container-replicator]
      vm_test_mode = yes
      
      [container-updater]
      
      [container-auditor]
    16. Create `/etc/swift/container-server/4.conf`:

      [container-server]
      devices = /srv/4/node
      mount_check = false
      bind_port = 6041
      user = <your-user-name>
      
      [container-replicator]
      vm_test_mode = yes
      
      [container-updater]
      
      [container-auditor]
    17. Create `/etc/swift/object-server/1.conf`:

      [object-server]
      devices = /srv/1/node
      mount_check = false
      bind_port = 6010
      user = <your-user-name>
      
      [object-replicator]
      vm_test_mode = yes
      
      [object-updater]
      
      [object-auditor]
    18. Create `/etc/swift/object-server/2.conf`:

      [object-server]
      devices = /srv/2/node
      mount_check = false
      bind_port = 6020
      user = <your-user-name>
      
      [object-replicator]
      vm_test_mode = yes
      
      [object-updater]
      
      [object-auditor]
    19. Create `/etc/swift/object-server/3.conf`:

      [object-server]
      devices = /srv/3/node
      mount_check = false
      bind_port = 6030
      user = <your-user-name>
      
      [object-replicator]
      vm_test_mode = yes
      
      [object-updater]
      
      [object-auditor]
    20. Create `/etc/swift/object-server/4.conf`:

      [object-server]
      devices = /srv/4/node
      mount_check = false
      bind_port = 6040
      user = <your-user-name>
      
      [object-replicator]
      vm_test_mode = yes
      
      [object-updater]
      
      [object-auditor]
    21. Create `~/bin/resetswift`:

      #!/bin/bash
      
      swift-init all stop
      sleep 5
      sudo umount /mnt/sdb1
      sudo mkfs.xfs -f -i size=1024 /dev/sdb1
      sudo mount /mnt/sdb1
      sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4 /mnt/sdb1/test
      sudo chown <your-user-name>:<your-group-name> /mnt/sdb1/*
      mkdir -p /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4
      sudo rm -f /var/log/debug /var/log/messages /var/log/rsyncd.log /var/log/syslog
      sudo service rsyslog restart
      sudo service memcached restart
    22. Create `~/bin/remakerings`:

      #!/bin/bash
      
      cd /etc/swift
      
      rm *.builder *.ring.gz backups/*.builder backups/*.ring.gz
      
      swift-ring-builder object.builder create 18 3 1
      swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 1
      swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 1
      swift-ring-builder object.builder add z3-127.0.0.1:6030/sdb3 1
      swift-ring-builder object.builder add z4-127.0.0.1:6040/sdb4 1
      swift-ring-builder object.builder rebalance
      swift-ring-builder container.builder create 18 3 1
      swift-ring-builder container.builder add z1-127.0.0.1:6011/sdb1 1
      swift-ring-builder container.builder add z2-127.0.0.1:6021/sdb2 1
      swift-ring-builder container.builder add z3-127.0.0.1:6031/sdb3 1
      swift-ring-builder container.builder add z4-127.0.0.1:6041/sdb4 1
      swift-ring-builder container.builder rebalance
      swift-ring-builder account.builder create 18 3 1
      swift-ring-builder account.builder add z1-127.0.0.1:6012/sdb1 1
      swift-ring-builder account.builder add z2-127.0.0.1:6022/sdb2 1
      swift-ring-builder account.builder add z3-127.0.0.1:6032/sdb3 1
      swift-ring-builder account.builder add z4-127.0.0.1:6042/sdb4 1
      swift-ring-builder account.builder rebalance
    23. Create `~/bin/startmain`:

      #!/bin/bash
      
      swift-init auth-server start
      swift-init proxy-server start
      swift-init account-server start
      swift-init container-server start
      swift-init object-server start
    24. Create `~/bin/startrest`:

      #!/bin/bash
      
      swift-auth-recreate-accounts
      swift-init object-updater start
      swift-init container-updater start
      swift-init object-replicator start
      swift-init container-replicator start
      swift-init account-replicator start
      swift-init object-auditor start
      swift-init container-auditor start
      swift-init account-auditor start
      swift-init account-reaper start
    25. chmod +x ~/bin/*

    26. remakerings

    27. cd ~/openswift; ./.unittests

    28. startmain

    29. swift-auth-create-account test tester testing

    30. Get an X-Storage-Url and `X-Auth-Token`: curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:11000/v1.0

    31. Check that you can GET account: curl -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above>

    32. Check that st works: st -A http://127.0.0.1:11000/v1.0 -U test:tester -K testing stat

    33. Create `/etc/swift/func_test.conf`:

      auth_host = 127.0.0.1
      auth_port = 11000
      auth_ssl = no
      
      account = test
      username = tester
      password = testing
      
      collate = C
    34. cd ~/openswift; ./.functests

    35. cd ~/openswift; ./.probetests