PFsense image to GCE instance
Last active
July 30, 2019 17:32
-
-
Save kmassada/4c9104ca786664e3e6d14caf86c67de7 to your computer and use it in GitHub Desktop.
PFsense image to GCE instance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[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