writing small web service for embedded device based on debian [closed]

Clash Royale CLAN TAG#URR8PPP
up vote
1
down vote
favorite
We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring
Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.
embedded webserver api
closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |Â
up vote
1
down vote
favorite
We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring
Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.
embedded webserver api
closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55
add a comment |Â
up vote
1
down vote
favorite
up vote
1
down vote
favorite
We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring
Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.
embedded webserver api
We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring
Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.
embedded webserver api
embedded webserver api
edited Aug 14 at 3:03
asked Aug 13 at 3:15
charith
15710
15710
closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55
add a comment |Â
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
func main()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
func main()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
add a comment |Â
up vote
1
down vote
accepted
Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
func main()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
add a comment |Â
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
func main()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.
Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
func main()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.
edited Aug 14 at 4:41
answered Aug 14 at 3:22
alexmherrmann
1867
1867
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
add a comment |Â
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
1
1
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
â Eli Heady
Aug 14 at 4:28
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
Thanks for the answer. Looks like really interesting. I started to learn . !!
â charith
Aug 20 at 3:19
add a comment |Â
To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
â meuh
Aug 13 at 10:05
Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
â charith
Aug 14 at 2:55