Skip to content

Instantly share code, notes, and snippets.

@kmassada
Last active July 30, 2019 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kmassada/4c9104ca786664e3e6d14caf86c67de7 to your computer and use it in GitHub Desktop.
Save kmassada/4c9104ca786664e3e6d14caf86c67de7 to your computer and use it in GitHub Desktop.
PFsense image to GCE instance

PFsense image to GCE instance

#[values]
REGION=us-west1
ZONE=us-west1-a
PROJECT_ID=`gcloud config get-value project`
#[mkdisk]
mkdir img
cd img/
wget https://nyifiles.pfsense.org/mirror/downloads/pfSense-CE-memstick-serial-2.4.4-RELEASE-p3-amd64.img.gz
PFSENSE_IMAGE=`ls | sed -n 's/\.img.gz$//p'`
gunzip $PFSENSE_IMAGE.img.gz
dd if=$PFSENSE_IMAGE.img of=disk.raw bs=4M conv=sparse
tar -Sczf $PFSENSE_IMAGE.img.tar.gz disk.raw
gsutil mb gs://$PROJECT_ID/
gsutil cp $PFSENSE_IMAGE.img.tar.gz gs://$PROJECT_ID/
gcloud compute images create `echo ${PFSENSE_IMAGE,,} | tr '.' '-'` \
--source-uri=gs://$PROJECT_ID/$PFSENSE_IMAGE.img.tar.gz \
--family=pfsense \
--project=$PROJECT_ID
gcloud compute disks create pfsense-244-clean-install \
--size=20GB \
--type=pd-ssd \
--zone=$ZONE \
--project=$PROJECT_ID
gcloud compute instances create pfsense-install \
--image-family pfsense \
--image-project $PROJECT_ID \
--boot-disk-size 10GB \
--boot-disk-type pd-ssd \
--boot-disk-device-name pfsense-install-boot \
--disk name=pfsense-244-clean-install,device-name=pfsense-clean-install,mode=rw,boot=no \
--project $PROJECT_ID \
--zone $ZONE
gcloud compute instances add-metadata pfsense-install \
--project=$PROJECT_ID \
--zone=$ZONE \
--metadata=serial-port-enable=1
gcloud compute connect-to-serial-port pfsense-install \
--project=$PROJECT_ID \
--zone=$ZONE
#[escape]
# Press the ENTER key.
# Type ~. (tilde, followed by a period).
#[network first]
NETWORK=home-z
gcloud compute networks create --subnet-mode=custom $NETWORK
SUBNET=home-z
SUBNET_RANGE=10.40.0.0/20
gcloud compute networks subnets create $SUBNET \
--network $NETWORK \
--range $SUBNET_RANGE \
--secondary-range=containerrange1=192.168.0.0/20 \
--enable-private-ip-google-access \
--region $REGION
gcloud compute firewall-rules create allow-$NETWORK-ssh --network $NETWORK --allow tcp:22
gcloud compute firewall-rules create allow-$NETWORK-ping --network $NETWORK --allow icmp
#[addresses]
gcloud compute addresses create pfsense-tower-external \
--project=$PROJECT_ID \
--global
gcloud compute addresses create pfsense-tower-internal \
--project=$PROJECT_ID \
--region $REGION \
--network $NETWORK \
--addresses 10.40.0.2
#[Finish Install]
gcloud compute disks snapshot pfsense-244-clean-install \
--snapshot-names pfsense-244-clean-snapshot \
--project=$PROJECT_ID \
--zone=$ZONE
gcloud compute disks create pfsense-244 \
--source-snapshot pfsense-244-clean-snapshot \
--project=$PROJECT_ID \
--zone=$ZONE
gcloud compute instances create pfsense-244 \
--disk name=pfsense-244,device-name=pfsense,mode=rw,boot=yes \
--network-interface=network=$NETWORK,subnet=$SUBNET,private-network-ip=10.40.0.2,no-address \
--network-interface=network=default,subnet=default \
--project $PROJECT_ID \
--zone $ZONE
gcloud compute instances add-metadata pfsense-244 \
--project=$PROJECT_ID \
--zone=$ZONE \
--metadata=serial-port-enable=1
gcloud compute connect-to-serial-port pfsense-244 \
--project=$PROJECT_ID \
--zone=$ZONE
# [cleanup]
gcloud compute instances delete pfsense-install --delete-disks=all --project=$PROJECT_ID --zone=$ZONE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment