Friday, August 11, 2017

Drobo to Drobo Serverless backup using SSH, RSYNC and CRON

Would you like to automatically backup your data from one drobo to another drobo automatically, without a computer doing the copying?

Heres how:

Use Case

I have two identical drobo5ns. One has more capacity than the other. They are both connected to a GB router.

Drobo5n1 - 5 x 2TB
Drobo5n2 - 5 x 3TB
Mac Desktop

I am paranoid about losing my data so I keep a backup of my main Drobo5N on another one. Typically I open both shares on my MAC, then drag and drop files between them. This has lots of problems with it which I won't go into but basically it takes ages and i hate leaving my MAC on doing the copying.

I want to automatically backup my data form one Drobo to the other, without using my MAC, and do some fancy synchronising so i only copy newer files over... AND...  i don't want to copy permissions. I'll cover this shortly.

Good plan huh?

Well, yes. BUT FUCK ME this was REALY difficult to accomplish and took alot of research and testing

Hopefully this will help others.

So this is what i did...

Format the Target Drobo (Its optional but i'll tell you why)

I formatted the target Drobo.. this is because the original data is from many places, has both MAC and Windows permissions all over it, and a bunch of MAC metadata files that i don't like or need. Trying to compare and copy these files was not going so great from one to another doesn't work very well at the best of times.

Starting fresh or just in a new share means you'll have none of these problems. But i never want to have the same problems again either. Even on a fresh target, once the files are copied i'm going to have the same problems again I think as the permissions will still be there.

For the most part, most of the files have Windows NTFS permissions, but the computers and users i created those files with don't exist anymore. I use a MAC now, and maybe one day I'll use windows again or a Google table or whatever.

So for my use case I don't want to fight with the old permissions. I want nice and bland files with the default Drobo permissions. Then i can access my files anyway i like later.

* this is the plan at least I haven't fully compared permissions after copying yet

If you are interested in how Drobo can manage to copy the files in the first place.. its using a sticky bit on at the root level of each share, effectively giving Drobo admin full access to all files on the system. Here is more info on sticky bit

http://www.thegeekstuff.com/2013/02/sticky-bit/?utm_source=feedburner

Lastly: Do this at your own risk, and if you don't want to, try it on a new share at least ;)

Update your Drobo Firmware and Drobo Dashboard

Connect to the second drobo
- I set the username to lowercase admin as i like it that way.
- Set the password
- Rename drobo
- Enable DroboApps in the admin console
- Set a static ip
- Create a taget Share with admin has full permission - eg DATA
- Restart

Upload OpenSSH

You need to do this on both drobos. On your computer connect to the Drobo as admin. This makes the drobapps folder appear. Download the file openssh.tgz and save it in the /drobapps/ folder

page: http://www.droboports.com/app-repository/openssh/
file: https://github.com/droboports/openssh/releases/download/v6.8-fs/openssh.tgz

Install Dropbear 

You need to do this on both drobos. Connect to the Drobo Dashboard app again and goto Droboapps. Install dropbear and start it.

use putty, or on a mac just ssh to the drobo with the admin username and password
$ ssh admin@192.168.1.100

page: http://www.droboports.com/app-repository/openssh/
file: https://github.com/droboports/openssh/releases/download/v6.8-fs/openssh.tgz

Switch to the root user
# sudo su -
run this to unpack and install (this is basically how you install any drobo ported app)
# /usr/bin/DroboApps.sh install

Configure OpenSSH on port 2222

Dropbear runs on port 22 so i avoid using OpenSSH on that port by changing the config using vi

# vi /mnt/DroboFS/Shares/DroboApps/openssh/etc/sshd_config

Press i to start insert mode. edit this this line
#Port 22
to this
Port 2222

Press :
then wq (write quit)

All done, goto the drobo dashboard and stop start the OpenSSH app (down the bottom of all the apps).

From here on, connecting via putty or SSH is done on port 2222 to take advantage of OpenSSH. So from your computer you can do
$ ssh -p 2222 admin@192.168.1.x

Create .ssh folder

You need to do this on both drobos.

I am not sure but i think dropbear creates this folder, and this file
# /mnt/DroboFS/home/admin/.ssh/
# /mnt/DroboFS/home/admin/.ssh/authorized_keys

If not create them, and set correct permissions. I 'think' this should do it...
# mkdir /mnt/DroboFS/home/admin/.ssh/
# touch /mnt/DroboFS/home/admin/.ssh/authorized_keys
# chmod 700 -R /mnt/DroboFS/home/admin/.ssh/

Before we move on...

Why use OpenSSH at all? Well dropbear is super slow is why... i believe this is due to windowsizes
https://lab.nexedi.com/nexedi/slapos/commit/605e564b8f3008cdb48dbc6e82c956029469ff02

Create SSH keys

You need to create the keys on drobo2, and copy the public key to drobo1. This is because drobo2 will be running  the sync script and needs to connect to drobo1 and pull the files. You can do it in reverse but i like the second drobo doing all the work. Also, i feel safer messing around on my second drobo..

Now lets make some keys yeah? On Drobo2... cd to the openssh app and list files

Drobo5N2:~ # cd /mnt/DroboFS/Shares/DroboApps/openssh/bin
Drobo5N2:~/Shares/DroboApps/openssh/bin # ls
scp*         sftp*        slogin@      ssh*         ssh-add*     ssh-agent*   ssh-keygen*  ssh-keyscan*

Run this and accept the defaults, but please read the bloody prompts at least and make sure the files end up as per below

# ./ssh-keygen

Save files to

/mnt/DroboFS/home/admin/.ssh/id_rsa
/mnt/DroboFS/home/admin/.ssh/id_rsa.pub

Cat the pub key and copy that garbage to clipboard

# cat /mnt/DroboFS/home/admin/.ssh/id_rsa.pub

from your computer logon to drobo1 via OpenSSH on port 2222
$ ssh -p 2222 admin@192.168.1.x
Create the directories you did before.
edit the authorized_keys file with vi, and paste the SSH key into the file and :wp to save

NEATO!

GO BACK TO DROBO2

Login with no password

Drobo2 is going to do all the copying so go back to drobo2. Unfortunately, the ssh executable is not in the 'PATH' so you have to run it with the full path. I tried adding it to the path but it gets magically overwritten.

Run this with the PRIVATE key (id_rsa) and you should log straight into drobo1 with no password

# /mnt/DroboFS/Shares/DroboApps/openssh/bin/ssh -i /mnt/DroboFS/home/admin/.ssh/id_rsa admin@192.168.1.x

exit drobo1 and re-run that command as the root user on drobo2. Accept the prompt to add this connection to known hosts. If you don't do this step, when you run CRON later as root it'll fail. 
# sudo su -
# /mnt/DroboFS/Shares/DroboApps/openssh/bin/ssh -i /mnt/DroboFS/home/admin/.ssh/id_rsa admin@192.168.1.x


Did it connect with no pwd - it should have, If it didn't work... thats sucks. Maybe your SSH keys might not have right permissions. Look that shiz up. chmod some shit

Now for the SSH / RSYNC part

The basic copying process works by creating an tunnel, then contacting rsync on the destination, comparing the files on both ends, creating a list, and transfering the files.

First off lets talk about how rsync works for for me:

The trick to do this on drobo is to tell the destination where to find the rsync executable. You need to include this..

--rsync-path="/sbin/rsync"

For my setup i specifically include the folders i want and exclude the files / patterns i don't want copied

--files-from=/mnt/DroboFS/home/admin/include.txt: include these files. eg.
--exclude-from=/mnt/DroboFS/home/admin/exclude.txt exclude these

I exclude this MAC metadata crap in my file

*DS_Store*
._*
.AppleDouble

Then there are the switches to do the sync. once apon a time i would use -a, but that copies the permissions, so i just use -r

r: recursive
v: verbose
h: human readable
--progress: show the progress
--ignore-existing: only copy new stuff
--delete-after: when done, delete stuff on the target that is not on the source
--delete-excluded; also delete stuff i put in the excluded file on the source

Rsync stages the file copy on the destination when it copies. I like to dump the partial files in a completely different place for better visibility etc

--temp-dir=/mnt/DroboFS/Shares/Public/partial: copy temporary, partial files here

Lastly, log the copy process. We'll be running this as a CRON job so you need this or you won't know what going on.

--log-file=/mnt/DroboFS/home/admin/data.log

---ARE YA WITH ME---?

Now for the full SSH command

So how does the SSH part work in more detail? Basically we

execute rsync on the target machine over SSH on port 2222 using the PRIVATE key (id_rsa)
...then all the rsync commands
...then the destination
.. then the source (and folders from the include file)

rsync -e "/mnt/DroboFS/Shares/DroboApps/openssh/bin/ssh -p 2222 -i /mnt/DroboFS/home/admin/.ssh/id_rsa"

--rsync-path="/sbin/rsync" -rvh --temp-dir=/mnt/DroboFS/Shares/Public/partial --progress --ignore-existing --delete-after --delete-excluded --files-from=/mnt/DroboFS/home/admin/include.txt --log-file=/mnt/DroboFS/home/admin/data.log --exclude-from=/mnt/DroboFS/home/admin/exclude.txt

admin@192.168.1.202:/mnt/DroboFS/Shares/Data/

/mnt/DroboFS/Shares/Data/

Put it all together


rsync -e "/mnt/DroboFS/Shares/DroboApps/openssh/bin/ssh -p 2222 -i /mnt/DroboFS/home/admin/.ssh/id_rsa2" --rsync-path="/sbin/rsync" -rvh --temp-dir=/mnt/DroboFS/Shares/Public/partial --progress --ignore-existing --delete-after --delete-excluded --files-from=/mnt/DroboFS/home/admin/include.txt --log-file=/mnt/DroboFS/home/admin/data.log --exclude-from=/mnt/DroboFS/home/admin/exclude.txt admin@192.168.1.202:/mnt/DroboFS/Shares/Data/ /mnt/DroboFS/Shares/Data/

NB: Keep in mind that the folders i am copying are in my includes text file so really this command will be doing this..

admin@192.168.1.202:/mnt/DroboFS/Shares/Data/ /mnt/DroboFS/Shares/Data/folder1
admin@192.168.1.202:/mnt/DroboFS/Shares/Data/ /mnt/DroboFS/Shares/Data/folder2
admin@192.168.1.202:/mnt/DroboFS/Shares/Data/ /mnt/DroboFS/Shares/Data/folder3
admin@192.168.1.202:/mnt/DroboFS/Shares/Data/ /mnt/DroboFS/Shares/Data/folder4 ...

AWWW YISS

Now lets put that command in a script

Simply create a bash script with vi, put your command in it, save it, then chmod it with +x and run it.

# vi data_backup.sh
# /bin/bash
# your command

Save, then
# chmod +x data_backup.sh
Execute ./data_backup.sh

You should see rsync calculate the file list then start copying like mad. Make sure this works as the root user before you attempt doing a cron job.

AND FINALLY CRON ftw

Setup crontabs

Drobo uses busybox for most of its linux style commands including crond.

https://busybox.net/downloads/BusyBox.html

To get crond working you need to sudo to root, create 'some' of the default path, then create a crontab, and start crond


Drobo5N2:~ $ crond --help
BusyBox v1.23.2 (2015-11-06 13:39:54 PST) multi-call binary.

Usage: crond -fbS -l N -d N -L LOGFILE -c DIR

-f Foreground
-b Background (default)
-S Log to syslog (default)
-l N Set log level. Most verbose:0, default:8
-d N Set log level, log to stderr
-L FILE Log to FILE
-c DIR Cron dir. Default:/var/spool/cron/crontabs

# sudo su -
# mkdir -p /var/spool/cron
# /bin/busybox crond

The its basic crontab stuff, which runs as root so thats cool. Run the command below to create a job list and use cron numbering to schedule a script to run the SSH / RSYNC command when you want it run.

# crontab -e

Keep in mind the drobo uses PDT time so set your job accordingly

Drobo5N2:~ # date

Fri Aug 11 05:00:54 PDT 2017

To view the crontab you created.. as root

Drobo5N2:~ # crontab -l
51 16 * * 6 /mnt/DroboFS/home/admin/data_backup.sh*

Drobo5N2:~ # 

Testing

When getting started, you can put a -n in your rsync switches to do a dry run copy
Assuming crond kicks off, you can tail the log file and see if copying has started
You can also do ps aux | grep rsync on either drobo and watch the process kick off if its working

Tips

You can do a -I if you want to just overwrite whatever is on the target. Sometimes i find this handy.
Kill the crond command if its not working nicely on first go

Last but not least here are some references i used for this magic.

If this page has helped you .. well sweet. You r welcome.

-jules

#################################################################################

References

busybox tools and  commands
https://busybox.net/downloads/BusyBox.html

Dropbear
https://linux.die.net/man/8/dropbear

Drobo dropbear windowsize sucks the dick - windowsizes
https://lab.nexedi.com/nexedi/slapos/commit/605e564b8f3008cdb48dbc6e82c956029469ff02

i tried using a drobo ported version of rsync at some stage but gave up
https://sites.google.com/a/droboports.com/www/app-repository/rsync-3-0-9

dropbear man page
https://linux.die.net/man/8/dropbear

dropbears equivalent to 'ssh' (dbclilent)
https://manpages.debian.org/jessie/dropbear/dbclient.1.en.html

basic rsync operation
http://www.linuxquestions.org/linux/answers/Networking/Using_rsync_to_mirror_data_between_servers

rsync with includes
https://stackoverflow.com/questions/16647476/how-to-rsync-only-a-specific-list-of-files

cron scheduling
https://en.wikipedia.org/wiki/Cron

busybox tools and  commands
https://busybox.net/downloads/BusyBox.html

drobo pinhole reset
http://www.drobospace.com/forums/printthread.php?tid=77106

Monday, May 9, 2016

Filtering tags from the AWS CLI

There are a number of ways that i have seen to filter resource tags and i thought i better record them quick..

Here we filter for the tag called Name

You can do it simple,  Name=tag:Name

aws ec2 describe-instances --filter Name=tag:Name,Values=WHATEVS --query 'Reservations[*].Instances[*].InstanceId' --output text

You can get the same effect using key and value so...

aws ec2 describe-instances --filter  Name=tag-key,Values=name Name=tag-value,Values=WHATEVS --query 'Reservations[*].Instances[*].InstanceId' --output text

also - --filter and --filters both work the same

if you want to call describe tags instead of describe resources..

aws --output=text ec2 describe-tags --filters Name=resource-id,Values=i-1234566 Name=key,Values=Name

escaping back ticks in bash is also bitch for JMESPath query searches

these work..

take note of the use of ' vs " in two querys

' means strictly read the characters, " means operate on characters like $ if you see them.

       # killme=`aws --region $AWSREGION ec2 describe-volumes --query 'Volumes[*].VolumeId' --filters "Name=tag:TerminationDate,Values="\`echo $todaysdate\`"" "Name=status,Values=available" --output text`

snaps_to_delete=`$AWS ec2 describe-images --image-ids $ami_ids_to_delete --owners self --query "Images[?contains(Tags[].Value, "'\`'$tag'\`'") == "'\`true\`'"]|[].[BlockDeviceMappings[].Ebs[].SnapshotId]" --filters Name=tag-key,Values="TerminationDate" Name=tag-value,Values=$terminationdate --output text`






Friday, June 5, 2015

How to Boot Windows 7 off a USB drive on a Mac Mini with EFI / UEFI

G'Day,

I have a Apple Mac mini "Core i5" 2.5 (Late 2012) at home and the HDMI output isn't working as expected when plugging it into my Sony DVD sound system. So i want to see how Windows 7 handles it, but i don't want to dual boot as that might break my Mac OS. Bugger that.

So lets boot off a USB hard drive right? When the Mac boots up, just after it makes the chime sound Hold Alt key and it will allow you to boot from external drives.

I tried the approach in this link but it didnt work... said something like "system disk not found press anykey to reboot"
http://bleeptobleep.blogspot.fr/2013/02/mac-install-windows-7-or-8-on-external.html

That guy is using MBR for the boot record, and i read Macs use EFI or some malarkey. So i went looking at stuff. Here is what i dun so far.  :..:

To find out which Mac you have  you have get the serial number then plug it into here
https://selfsolve.apple.com/agreementWarrantyDynamic.do

Or you can put in your model number here and take a guess. You want to check if you have an Intel processor which i pretty much guarantee you do.
http://www.everymac.com/ultimate-mac-lookup/?search_keywords=A1347

So then if you believe what they say here, Intel-based Macs support starting from an external USB storage device's volume that has been formatted with a GUID partition type
https://support.apple.com/en-us/HT201663

I'm not sure what EFI and UEFI are all about but i saw this App. The screenshots seem to say that this app installs Windows and is expecting a GUID (GPT) EFI boot partition. Groovy. So i decided to go for it see what happens.
http://lifehacker.com/how-to-run-a-portable-version-of-windows-from-a-usb-dri-1565509124

To get my USB ready, I used diskpart from my windows laptop. I wanted it in the same state as the screenshot in the link above, which is a GPT EFI fat32 boot partition and a Primary NTFS partition for windows.

The only tricky part was that one of the first things you do is convert the disk to gpt. Which creates a reserved partition at 1. So I had this

DISKPART> list partition

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Reserved           128 MB    17 KB
  Partition 2    System             350 MB   129 MB
  Partition 3    Primary            114 GB   479 MB


Which didn't match the picture. So i splatted that and started again. To match what they gave ...

diskpart
select disk 1
clean
convert gpt
select partition 1
delete partition override
create partition efi size=250
format fs=fat32 quick
create partition primary
format fs=ntfs quick
exit

Then i ran the app and installed Windows 7 as per the guide. Super sweet. I will test it out tonight - wish me luck.

Next time

Might need to assign drives letters?

Try this way?
http://www.sevenforums.com/tutorials/186875-uefi-unified-extensible-firmware-interface-install-windows-7-a.html

UPDATE:
well... it dint work, not the bloody mac wont boot. the apple log comes up, get half way down the load screen, stops then powers off.

So may as well try it again and see if i can get it going






Monday, November 3, 2014

Julian's Raspberry Pi Front Door / Garage Opener install, headless, with no KB or monitor


I have put my place up for rent for short term stays. The problem is getting the key to the tenant while I am at work etc.

My building has an electronic opening secuirty gate that is hooked upto the intercoms in each apartment. A guest will buzz my number, i pickup the intercom and say hi, then hit the button on my intercom that buzzes them into the building.

So, I plan to make a raspberry pie with a relay attached to the intercom, that will open the front gate in the same way, just over the internet. I will then hook that up to a virtual button and the tenant can let themselves in to the building. When they get to my front door, I have a pin number lock. They enter the pin, they get in, and the spare key is waiting for them. Neat huh?

Step 1 - Buy and Setup the pi for SSH

Buy all the things: raspberry pie, SD card, mini USB cable for power, relay switch, wires etc

Get the debian image from here: http://www.raspberrypi.org/downloads/ (1GB approx)

Get this for windows: http://sourceforge.net/projects/win32diskimager/

Format the whoile SD card for FAT32

Unzip both downloads, then with win32diskimager put the whole image on the SD card.

This boots it with sshd running and DHCP. Plug in a network cable, look at your router for the newest IP, connect to it with an SSH client

ssh pi@yourip

u: pi
p: raspberry

So after you login... you see this

NOTICE: the software on this Raspberry Pi has not been fully configured. Please run 'sudo raspi-config'

switch to root as always...


pi@raspberrypi ~ $ sudo su -

This opened the config menu for for some reason... anywho

I select (1) to extend the root disk to take up the rest of the SD card. Then i rebooted.

When you get logged in again,,,,

Step 2 - Config

apt-get update
apt-get install node
apt-get install npm

npm config set registry http://registry.npmjs.org/
npm install forever -g


wget -O WebIOPi-0.7.0.tar.gz http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.0.tar.gz/download
tar xvf WebIOPi-0.7.0.tar.gz

cd WebIOPi-0.7.0
./setup.sh
/etc/init.d/webiopi start

http://192.168.1.118:8000/
u:webiopi
p:raspberry

yay! now you can click IN and OUT on left had side to operate gpios

git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

yay! now you can run

gpio mode 7 out
gpio mode 7 in

to turn pin 7 on and off. in means OFF

tadaaa! finished.
mostly

edit /etc/ssh/sshd_config
add Port 8001
port forward 8001

Now change passwords

root@raspberrypi:~# webiopi-passwd
WebIOPi passwd file generator
Enter Login: pi
Enter Password: 
Confirm password:

raspi-config (option 2)

NOW WIFI!
this just worked
http://www.howtogeek.com/167425/how-to-setup-wi-fi-on-your-raspberry-pi-via-the-command-line/

Step 3 - Assemble

... to follow!

----
Set Up DNS and hide that port number!


Get a domain
mydomain.com

create an amazon s3 bucket with EXACT same name domain name, and whatever prefix
bucketname = openthegate.mydomain.com

enable Static Website Hosting on the bucket
Redirect all requests to another host name
openthegate.no-ip.biz

goto no-ip.com and create a host with the IP of your router and enable Port 80 Redirect to 8000
openthegate.no-ip.biz 54.x.x.x:8000

check the port is open here
http://www.yougetsignal.com/tools/open-ports/

create an aws route53 record set for mydomain.com
create an alias record to point to your bucket
openthegate.mydomain.com ALIAS s3-website-ap-southeast-2.amazonaws.com

copy the NS name server names
goto registrar and re-point name servers to AWS route53 DNS servers

Now when you hit the domain http://openthegate.mydomain.com
it will look up the domain, look at the zone file and see that the name servers are over at AWS
it will goto AWS, check the NS servers, see the ALIAS and goto the bucket
The bucket re-directs all port 80 requests to your no-ip record
which then points to port 8000 on your local router

Forward the ports on your router 8000 > 8000

Now it all works. HAHAHAHAHAHAHA

Wednesday, September 7, 2011

Time to leap again


I might have to backfill this with the wonderful work i produced last time - but right now im pretty excited with round 2 of making posters for "It's All About the MUSIC". Krista's next party is coming up in October.

Had a great night last night working with Greg on a conceptual prototype. His immediate suggestion was to chopping up of the DJ images and applying filter in Photoshop first them moving them to Illustrator. I was against it as i wanted to spend time getting good at one piece of software at a time - but just for kicks, we applied some images and traced one DJ in photoshop.

Holy crap and OMG. Wish i hadn't have seen the number of filters and crazy shit you can do there. I was shaking my head at the possibilities that i now have to work with. Having more options, more filters is great - but now i have to pick one!

We didn't quite achieve a perfect cut and paste between programs yet though so the prototype above is based on the same method i used last time, with no photoshop. Just wait till i update it...







Thursday, May 12, 2011

Updated Group Poster

I managed to get a picture of Gavin or Torbynik finally and added him to the poster. So they are all there now. I also added the fonts that Greg gave me to my PC (c:\windows\fonts... AlteHaasGroteskBold) and added some names and a footer etc. The concept is ready to show to Krista i think.

In addition, with the basic traced characters, i had some help from Dan, she has made me a few backgrounds with a consistent look and feel in much the same style as the banners. Might be time to show these to Krista too.

Still to come, re-doing the characters properly, adding some shooting stars and bass clefs etc.





Sunday, May 8, 2011

Getting Some Live Trace Practice, All the DJs!



I met with my sister the legendary Dan last week to get some help. We worked through the ideas, then got on the tools and had a play. Making something look pretty good with a combo of illustrator and Photoshop didn't look to hard for her being a pro, but she did show me some easy stuff.

Use the Pen tool and draw a swirl, then change the brush type to paint splatter. Make it bright green then fade the opacity, whack it on a layer behind your subject and you have a prett cool effect. Pretty Cool. Now if only i could get ti to do that with some stars.... we'll see.

Besides the fun stuff, we decided was that I do in fact have to go for a vectored approach if I want to blow things up to a large scale. Which i do. A1 maybe? No matter what the combination, each DJ would need to be vector traced. Once tracing those assets was completed, i'd have what i needed to make several designs.

One minor problem was that the trace i had done in Phtoshop of Floody was not an actual vector. It was infact a traced bitmap. Which would remain a bitmap. And, Floody wasn't actually playing.

So, I read through a neat tutorial on Live Trace for illustrator. It was a simple one but wasn't 100% clear at every step though, it said "now you do this..." but i dont know the buttons or where to find ... this. I took what i knew and started carving up what i had. And i did this ....

So step by step, live tracing a photo.
1. place the photo
2. live trace the photo using a preset
3. open a colour palette (not all work, i used earth tones)
4. modify the live trace settings to be colour and use the earthtone palette
5. live paint the trace. if you dont do this, you can't edit the image, scribble on it or erase anything.
6. expand the trace. if you dont do this, you can't select segments and move them around or delete them.
7. use the correct select tool and start deleting bits you dont want. If it deletes abit you DO want, use the eraser to build a white edge between the sections. Then you can delete it easy.

That's about it. I then copied each DJ to a new drawing on their own layer and moved them around. I added a black background and the banner from the flyer we are using. (Cheers Greg!)

Im still missing one DJ but - presto! Concept one on the page and new skills in vectoring coming along nicely.