{"id":15631899,"url":"https://github.com/jaymzh/scale14x-fboss-demo","last_synced_at":"2026-02-26T08:22:26.783Z","repository":{"id":142270938,"uuid":"49527789","full_name":"jaymzh/scale14x-fboss-demo","owner":"jaymzh","description":null,"archived":false,"fork":false,"pushed_at":"2016-03-16T07:45:02.000Z","size":638,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T01:43:55.770Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaymzh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-01-12T20:45:03.000Z","updated_at":"2019-11-09T02:49:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"d307a5ec-e5b5-4be4-8aec-8e04d8540636","html_url":"https://github.com/jaymzh/scale14x-fboss-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaymzh%2Fscale14x-fboss-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaymzh%2Fscale14x-fboss-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaymzh%2Fscale14x-fboss-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaymzh%2Fscale14x-fboss-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaymzh","download_url":"https://codeload.github.com/jaymzh/scale14x-fboss-demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246230541,"owners_count":20744349,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T10:41:59.820Z","updated_at":"2026-02-26T08:22:26.740Z","avatar_url":"https://github.com/jaymzh.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FBOSS Demo\n\nThis is everything used to produce the FBOSS demo at SCALE 14X.\n\n## Setup\n\n### Keypairs\n\nYou will need to sets of SSH keys - one for root and one for \"demo\" access. Create them as id_rsa-fboss_demo (and `id_rsa-fboss_demo.pub`) and `id_rsa-fboss_root` (and `id_rsa-fboss_root`). There should be no passphrase on the `demo` key, but a passphrase on the `root` key.\n\n### Setting up the USB key\n\nWe setup a USB key to hold the important bits to build reset the demo in case of a problem.\n\n* Copy this all to a USB key\n* Copy the SSH keys into `.ssh/` on the USB key.\n\n### Settting up the laptop\n\nFirst make sure that the `demo` user is setup and has a ~/.ssh directory.\n\nMount the usb key as root on the laptop, cd to the mount point as (again, as root) run `reset_laptop.sh`. This will do the following:\n\n* Copy the relevant keys to ~demo/.ssh/\n* Not provide write-access to said keys\n* Update /etc/hosts with IP addresses we'll later use for the switches to be `fboss1`, `fboss2`, and `fboss3`.\n* Copy over a fluxbox config - see below\n\nWhat window manager you setup is up to you... if you use fluxbox the provided configs will:\n* set a default resolution - you probably want to change it\n* Auto-setup 4 windows on login, where 3 of them SSH to the the relevant switches\n* Setup keybindings:\n** alt+1 - Virtual terminal 1 (where the shells will be)\n** alt+2 - Virtual terminal 2 (where the web browser will be)\n** alt+t - Open a new virtual terminal\n** alt+w - Open a web browser\n\n### Setting up the switches\n\nFollow the ONL guides to setup the latest version of FBOSS on three switches. Once they're basically functional (`fboss_route.py list_routes` works).\n\nNow setup the netowrking so that ma1 will come up with the right address:\n\n* Update `/mnt/flash/boot-config` to set `NETAUTO` to `static`.\n* Update `/etc/network/interfaces` to add the following block:\n\n```\nauto ma1\niface ma1 inet static\n  address 10.1.1.1\n  netmask 255.255.255.0\n  broadcast 10.1.1.255\n```\n\nChanging `ipaddress` to update the last octet to match the switch number (10.1.1.1 for fboss1, 10.1.1.2 for fboss2, 10.1.1.3 for fboss3).\n\nWe set our laptop to be `10.1.1.250`.\n\nOnce everything has the right IP, mount the USB key as root and run `./reset_switch.sh`.\n\nThis will:\n* Copy over FBOSS configs\n* Update the init script for FBOSS (won't be necessary after https://github.com/opennetworklinux/fboss-package/pull/3 is merged(\n* Copy over the `scaledemo.sh` script\n* Restart the FBOSS agent\n\nAnd that should set them up for success.\n\n### BMC Considerations\n\nIn order for the Hardware Stats demo to work, you need to configure the `usb0` interface between the microserver and the BMC. This is done by adding this to the `interfaces` file on the microserver:\n\n```\nauto usb0\niface usb0 inet static\n  address 192.168.0.2\n  broadcast 192.168.0.255\n  netmask 255.255.255.0\n```\n\nAnd this to the `interfaces` file on the BMC:\n\n```\nauto usb0\niface usb0 inet static\n  address 192.168.0.1\n  broadcast 192.168.0.255\n  netmask 255.255.255.0\n```\n\nNow, doing so means that one can SSH between the two so you'll want to change the default root password on the BMC.\n\n#### Persisting BMC Configs\n\nBy default none of these things will persist on a BMC reboot. To make these persistent you need to copy the relevant files to the persistent flash:\n\n```\ncd /mnt/data\nmkdir -p etc/network\ncp /etc/network/interfaces etc/network/\ncp /etc/{passwd,shadow} etc\n```\n\nAnd then create a rc.early hook to change the real files to symlinks to your new files. Make `/mnt/data/etc/rc.early`\n\n```\n#!/bin/bash\n\nfiles=\"network/interfaces passwd shadow\"\nfor file in $files; do\n  echo \"Restoring /etc/$file\"\n  rm -f /etc/$file\n  ln -s /mnt/data/etc/$file /etc/$file\ndone\n```\n\nNow you can run that `rc.early` script to move everything around and now things should be persistent. (`/etc/init.d/rc.early` calls `/mnt/data/etc/rc.early`).\n\n## Running the Demo\n\nPut the html somewhere on local disk and open up a web-browser to point to it. Then open 3 windows and ssh to each switch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaymzh%2Fscale14x-fboss-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaymzh%2Fscale14x-fboss-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaymzh%2Fscale14x-fboss-demo/lists"}