From 01541ae949154a8c6bfc488fd50c05d5561ea42b Mon Sep 17 00:00:00 2001 From: rtrimana Date: Tue, 20 Feb 2018 10:24:35 -0800 Subject: [PATCH] Adjusting Makefiles and config files for a master RaspberryPi --- .../Java/HomeSecurityController/Makefile | 4 +-- benchmarks/Java/IrrigationController/Makefile | 4 +-- benchmarks/Java/Lifxtest/Makefile | 4 +-- .../Java/SmartLightsController/Makefile | 4 +-- benchmarks/Java/SpeakerController/Makefile | 4 +-- iotjava/Makefile | 2 +- localconfig/iotruntime/IoTMaster.config | 10 +++--- localconfig/iotruntime/MySQLInterface.config | 2 +- localconfig/iotruntime/cleanrun.bash | 34 ++++++++++++++++++ localconfig/iotruntime/run.bash | 10 ++++++ localconfig/mysql/cameraSet.config | 10 +++--- localconfig/mysql/lifx_light_bulb.config | 3 -- others/Mysql/IoTMain.gz | Bin 5768 -> 5748 bytes 13 files changed, 66 insertions(+), 25 deletions(-) create mode 100755 localconfig/iotruntime/cleanrun.bash create mode 100755 localconfig/iotruntime/run.bash diff --git a/benchmarks/Java/HomeSecurityController/Makefile b/benchmarks/Java/HomeSecurityController/Makefile index 570be5b..6f05a97 100644 --- a/benchmarks/Java/HomeSecurityController/Makefile +++ b/benchmarks/Java/HomeSecurityController/Makefile @@ -23,13 +23,13 @@ homesecurity: $(JAVAC) $(JFLAGS) *.java cp HomeSecurityController.config $(BIN_DIR)/HomeSecurityController #cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController - cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class; rm -rf *.class + cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class; mkdir tmp; mv HomeSecurityController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += check-homesecurity check-homesecurity: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java cp HomeSecurityController.config $(BIN_DIR)/HomeSecurityController #cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController - cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class; rm -rf *.class + cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class; mkdir tmp; mv HomeSecurityController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp .PHONY: $(PHONY) diff --git a/benchmarks/Java/IrrigationController/Makefile b/benchmarks/Java/IrrigationController/Makefile index a797ab4..e475b38 100644 --- a/benchmarks/Java/IrrigationController/Makefile +++ b/benchmarks/Java/IrrigationController/Makefile @@ -21,7 +21,7 @@ check-all: check-irrigation PHONY += irrigation irrigation: $(JAVAC) $(JFLAGS) *.java - cd $(BIN_DIR)/IrrigationController; $(JAR) $(JARFLAGS) IrrigationController.jar ../IrrigationController/*.class ../iotcode/interfaces/*.class; rm -rf *.class + cd $(BIN_DIR)/IrrigationController; $(JAR) $(JARFLAGS) IrrigationController.jar ../IrrigationController/*.class ../iotcode/interfaces/*.class; mkdir tmp; mv IrrigationController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp cp IrrigationController.config $(BIN_DIR)/IrrigationController cp IrrigationController.tomoyo $(BIN_DIR)/IrrigationController cp -rf ./resources ./help_files $(BIN_DIR)/IrrigationController @@ -30,7 +30,7 @@ irrigation: PHONY += check-irrigation check-irrigation: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java - cd $(BIN_DIR)/IrrigationController; $(JAR) $(JARFLAGS) IrrigationController.jar ../IrrigationController/*.class ../iotcode/interfaces/*.class; rm -rf *.class + cd $(BIN_DIR)/IrrigationController; $(JAR) $(JARFLAGS) IrrigationController.jar ../IrrigationController/*.class ../iotcode/interfaces/*.class; mkdir tmp; mv IrrigationController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp cp IrrigationController.config $(BIN_DIR)/IrrigationController cp IrrigationController.tomoyo $(BIN_DIR)/IrrigationController cp -rf ./resources ./help_files $(BIN_DIR)/IrrigationController diff --git a/benchmarks/Java/Lifxtest/Makefile b/benchmarks/Java/Lifxtest/Makefile index 23f2d56..ade3d14 100644 --- a/benchmarks/Java/Lifxtest/Makefile +++ b/benchmarks/Java/Lifxtest/Makefile @@ -20,12 +20,12 @@ PHONY += lifxtest lifxtest: $(JAVAC) $(JFLAGS) *.java cp Lifxtest.config $(BIN_DIR)/Lifxtest - cd $(BIN_DIR)/Lifxtest; $(JAR) $(JARFLAGS) Lifxtest.jar ../Lifxtest/Lifxtest*.class ../Lifxtest/LightBulb*.class ../iotcode/LifxLightBulb/*.class ../iotcode/interfaces/LightBulb*.class; rm -rf *.class + cd $(BIN_DIR)/Lifxtest; $(JAR) $(JARFLAGS) Lifxtest.jar ../Lifxtest/Lifxtest*.class ../Lifxtest/LightBulb*.class ../iotcode/LifxLightBulb/*.class ../iotcode/interfaces/LightBulb*.class; mkdir tmp; mv Lifxtest.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += check-lifxtest check-lifxtest: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java cp Lifxtest.config $(BIN_DIR)/Lifxtest - cd $(BIN_DIR)/Lifxtest; $(JAR) $(JARFLAGS) Lifxtest.jar ../Lifxtest/Lifxtest*.class ../Lifxtest/LightBulb*.class ../iotcode/LifxLightBulb/*.class ../iotcode/interfaces/LightBulb*.class; rm -rf *.class + cd $(BIN_DIR)/Lifxtest; $(JAR) $(JARFLAGS) Lifxtest.jar ../Lifxtest/Lifxtest*.class ../Lifxtest/LightBulb*.class ../iotcode/LifxLightBulb/*.class ../iotcode/interfaces/LightBulb*.class; mkdir tmp; mv Lifxtest.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp .PHONY: $(PHONY) diff --git a/benchmarks/Java/SmartLightsController/Makefile b/benchmarks/Java/SmartLightsController/Makefile index 4d26b0e..41b4c55 100644 --- a/benchmarks/Java/SmartLightsController/Makefile +++ b/benchmarks/Java/SmartLightsController/Makefile @@ -23,13 +23,13 @@ smartlights: $(JAVAC) $(JFLAGS) *.java cp SmartLightsController.config $(BIN_DIR)/SmartLightsController cp SmartLightsController.tomoyo $(BIN_DIR)/SmartLightsController - cd $(BIN_DIR)/SmartLightsController; $(JAR) $(JARFLAGS) SmartLightsController.jar ../SmartLightsController/SmartLightsController*.class ../SmartLightsController/ColorTemperature*.class ../SmartLightsController/MotionDetection*.class ../SmartLightsController/*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/LightBulb*.class ../iotcode/interfaces/Resolution*.class; rm -rf *.class + cd $(BIN_DIR)/SmartLightsController; $(JAR) $(JARFLAGS) SmartLightsController.jar ../SmartLightsController/SmartLightsController*.class ../SmartLightsController/ColorTemperature*.class ../SmartLightsController/MotionDetection*.class ../SmartLightsController/*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/LightBulb*.class ../iotcode/interfaces/Resolution*.class; mkdir tmp; mv SmartLightsController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += check-smartlights check-smartlights: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java cp SmartLightsController.config $(BIN_DIR)/SmartLightsController cp SmartLightsController.tomoyo $(BIN_DIR)/SmartLightsController - cd $(BIN_DIR)/SmartLightsController; $(JAR) $(JARFLAGS) SmartLightsController.jar ../SmartLightsController/SmartLightsController*.class ../SmartLightsController/ColorTemperature*.class ../SmartLightsController/MotionDetection*.class ../SmartLightsController/*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/LightBulb*.class ../iotcode/interfaces/Resolution*.class; rm -rf *.class + cd $(BIN_DIR)/SmartLightsController; $(JAR) $(JARFLAGS) SmartLightsController.jar ../SmartLightsController/SmartLightsController*.class ../SmartLightsController/ColorTemperature*.class ../SmartLightsController/MotionDetection*.class ../SmartLightsController/*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/LightBulb*.class ../iotcode/interfaces/Resolution*.class; mkdir tmp; mv SmartLightsController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp .PHONY: $(PHONY) diff --git a/benchmarks/Java/SpeakerController/Makefile b/benchmarks/Java/SpeakerController/Makefile index 9a3a38a..6617598 100644 --- a/benchmarks/Java/SpeakerController/Makefile +++ b/benchmarks/Java/SpeakerController/Makefile @@ -23,7 +23,7 @@ check-all: check-speaker PHONY += speaker speaker: $(JAVAC) $(JFLAGS) *.java - cd $(BIN_DIR)/SpeakerController; $(JAR) $(JARFLAGS) SpeakerController.jar ../SpeakerController/*.class ../iotcode/interfaces/*.class; rm -rf *.class + cd $(BIN_DIR)/SpeakerController; $(JAR) $(JARFLAGS) SpeakerController.jar ../SpeakerController/*.class ../iotcode/interfaces/*.class; mkdir tmp; mv SpeakerController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp cp SpeakerController.config $(BIN_DIR)/SpeakerController cp SpeakerController.tomoyo $(BIN_DIR)/SpeakerController zip -r SpeakerController.zip ./music @@ -32,7 +32,7 @@ speaker: PHONY += check-speaker check-speaker: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java - cd $(BIN_DIR)/SpeakerController; $(JAR) $(JARFLAGS) SpeakerController.jar ../SpeakerController/*.class ../iotcode/interfaces/*.class; rm -rf *.class + cd $(BIN_DIR)/SpeakerController; $(JAR) $(JARFLAGS) SpeakerController.jar ../SpeakerController/*.class ../iotcode/interfaces/*.class; mkdir tmp; mv SpeakerController.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp cp SpeakerController.config $(BIN_DIR)/SpeakerController cp SpeakerController.tomoyo $(BIN_DIR)/SpeakerController zip -r SpeakerController.zip ./music diff --git a/iotjava/Makefile b/iotjava/Makefile index 0939bd7..83ba1ba 100644 --- a/iotjava/Makefile +++ b/iotjava/Makefile @@ -237,7 +237,7 @@ runtime: $(JAVAC) -classpath .:$(RUNTIMEJARS):$(PHONEJARS):$(ZIPJARS) iotruntime/*.java iotruntime/master/*.java iotruntime/slave/*.java iotruntime/messages/*.java iotruntime/stub/*.java iotruntime/zigbee/*.java -d $(BIN_DIR) cp ../localconfig/iotruntime/IoTMaster.config $(BIN_DIR)/iotruntime/ cp ../localconfig/iotruntime/IoTSlave.config $(BIN_DIR)/iotruntime/ - #cp ../others/sslkey/*.jks $(BIN_DIR)/iotruntime/ + cp ../localconfig/iotruntime/*.bash $(BIN_DIR)/iotruntime/ cp -r ../localconfig/mysql $(BIN_DIR)/iotruntime/ cp -r ../localconfig/tomoyo $(BIN_DIR)/iotruntime/ [ -d $(BIN_DIR)/iotruntime/log ] || mkdir $(BIN_DIR)/iotruntime/log diff --git a/localconfig/iotruntime/IoTMaster.config b/localconfig/iotruntime/IoTMaster.config index 9910438..e73967b 100644 --- a/localconfig/iotruntime/IoTMaster.config +++ b/localconfig/iotruntime/IoTMaster.config @@ -3,10 +3,10 @@ MAC_ADDRESS=74:da:38:68:72:8a IOT_CODE_PATH=./../iotcode/ CONTROLLERS_CODE_PATH=../ -RUNTIME_DIR=~/iot2/iotjava/iotruntime; -SLAVE_DIR=~/iot2/iotjava/iotruntime/slave; -#CLASS_PATH=-cp .:/usr/share/java/*:./../../iotjava/:./../../iotjava/iotruntime/:./../../iotjava/iotinstaller/:./../../iotjava/iotrmi/ -CLASS_PATH=-cp .:/usr/share/java/*:./../:./../iotruntime/:./../iotinstaller/:./../../iotjava/iotrmi/ +RUNTIME_DIR=~/iot2/bin/iotruntime; +SLAVE_DIR=~/iot2/bin/iotruntime/slave; +#CLASS_PATH=-cp .:/usr/share/java/*:./../../:./../../iotruntime/:./../../iotinstaller/:./../../iotrmi/ +CLASS_PATH=-cp .:/usr/share/java/*:./../:./../iotruntime/:./../iotinstaller/:./../../iotrmi/ #benchmarks/libs/boofcv_libs/* - we usually put these benchmark codes in /usr/share/java on compute nodes #benchmarks/libs/georegression_libs/* - we usually put these benchmark codes in /usr/share/java on compute nodes @@ -15,7 +15,7 @@ RMI_PATH=-Djava.rmi.server.codebase=file:.:/usr/share/java/* RMI_HOSTNAME=-Djava.rmi.server.hostname= LOG_FILE_PATH=log/ USERNAME=iotuser@ -ROUTER_ADD=192.168.2.1 +ROUTER_ADD=192.168.1.1 #The only host that SSH is allowed from to the router MONITORING_HOST=74:da:38:68:72:8a diff --git a/localconfig/iotruntime/MySQLInterface.config b/localconfig/iotruntime/MySQLInterface.config index 0b07a5b..0edd14d 100644 --- a/localconfig/iotruntime/MySQLInterface.config +++ b/localconfig/iotruntime/MySQLInterface.config @@ -4,4 +4,4 @@ HOST=localhost DATABASE=IoTMain USERNAME=root -PASSWORD=root +PASSWORD=1234 diff --git a/localconfig/iotruntime/cleanrun.bash b/localconfig/iotruntime/cleanrun.bash new file mode 100755 index 0000000..8d70bbf --- /dev/null +++ b/localconfig/iotruntime/cleanrun.bash @@ -0,0 +1,34 @@ +#!/bin/bash +# Clean the master Raspberry Pi +echo "Cleaning master!" +rm -rf *.jar +rm -rf log/* +rm -rf *.zip +rm -rf *.policy +rm -rf *.sh +rm -rf *.tomoyo.pol +rm -rf help_files/ resources/ music/ +cd slave/; rm -rf *.so; rm -rf *.zip; rm -rf *.log; +sudo pkill -f Djava +sudo pkill -f IoTSlave +sudo iptables -F +sudo tomoyo-loadpolicy -df < /home/iotuser/iot2/bin/iotruntime/clear.tomoyo +echo "Master cleaned!" + +# Clean the slave(s) and router +SLAVE1="192.168.1.101" +ROUTER="192.168.1.1" +RUNTIME_PATH="/home/iotuser/iot2/bin/iotruntime/" +echo "Cleaning slave!" +ssh iotuser@$SLAVE1 "cd $RUNTIME_PATH; rm -rf *.sh; rm -rf help_files/; rm -rf music/; rm -rf *.jar;rm -rf log/*; rm -rf *.zip; sudo pkill -f Djava; rm -rf resources/" +ssh iotuser@$SLAVE1 "cd $RUNTIME_PATH/slave/; rm -rf *.so; rm -rf *.zip; rm -rf *.log;" +echo "Slave benchmark files cleaned!" +ssh iotuser@$SLAVE1 "sudo iptables -F" +echo "Slave iptables cleaned!" +ssh iotuser@$SLAVE1 "sudo pkill -f IoTSlave" +echo "Slave processes killed!" +ssh iotuser@$SLAVE1 "sudo tomoyo-loadpolicy -df < $RUNTIME_PATH/clear.tomoyo" +echo "Slave process jailer cleaned!" + +ssh root@$ROUTER "cd /root/setup; ./clean; ./startup.sh" +echo "Router cleaned!" diff --git a/localconfig/iotruntime/run.bash b/localconfig/iotruntime/run.bash new file mode 100755 index 0000000..b12794a --- /dev/null +++ b/localconfig/iotruntime/run.bash @@ -0,0 +1,10 @@ +#!/bin/bash + +#java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster Lifxtest +java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster SmartLightsController +#java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster IrrigationController +#java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster SpeakerController +#java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster HomeSecurityController + +# Combination +#java -cp .:/usr/share/java/*:./../:./../iotcode/:./../iotcode/Lifxtest/ iotruntime.master.IoTMaster HomeSecurityController SmartLightsController SpeakerController IrrigationController diff --git a/localconfig/mysql/cameraSet.config b/localconfig/mysql/cameraSet.config index 5798c17..a061abc 100644 --- a/localconfig/mysql/cameraSet.config +++ b/localconfig/mysql/cameraSet.config @@ -1,5 +1,5 @@ -SELECT * FROM -CameraSmart -WHERE -ID='CM1' -; +SELECT * FROM +CameraSmart +WHERE +ID='CM1' +; diff --git a/localconfig/mysql/lifx_light_bulb.config b/localconfig/mysql/lifx_light_bulb.config index eb128f2..11171b0 100644 --- a/localconfig/mysql/lifx_light_bulb.config +++ b/localconfig/mysql/lifx_light_bulb.config @@ -1,6 +1,3 @@ SELECT * FROM LightBulb -WHERE -ID='LB1' ; - diff --git a/others/Mysql/IoTMain.gz b/others/Mysql/IoTMain.gz index 5604d94dc3d2f192d392eae8fb95c599a2792660..287b0ab5c5b8b729fd4bf9e79e2cdbc496f97819 100644 GIT binary patch literal 5748 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