5 ms·
I would first create a script that runs a web server that performs as expected (serving files, and handling dynamic functionality in the script or in a perl mod
by G4Vi 4y ago
I would first create a script that runs a web server that performs as expected (serving files, and handling dynamic functionality in the script or in a perl module, or by paths to cgi scripts as needed). I rolled by own for packing my personal http media server (MHFS), but there's plenty of HTTP servers on CPAN. I'm not sure which one's are best.
Then, I would create a custom build of APPerl using Perl::Dist::APPerl 's apperlm and modifying the apperl-project.json to pack in the script, CPAN modules, cgi files, and the static resources into a APPerl binary. When bundled into APPerl, the script can read the files embedded in APPerl from the /zip path.
Perl::Dist::APPerl (with tutorial on building apps): https://metacpan.org/pod/Perl::Dist::APPerl https://metacpan.org/pod/Perl::Dist::APPerl
MHFS's APPerl packaging config: https://github.com/G4Vi/MHFS/blob/master/apperl/apperl-project.json https://github.com/G4Vi/MHFS/blob/master/apperl/apperl-proje...
- csdvrx 4y ago> there's plenty of HTTP servers on CPAN. I'm not sure which one's are best. Same. I know about HTTP::Daemon, HTTP::Tiny and HTTP::Server::Simple If you have tried one of the 3 and can confirm it works with APPerl, it might save time? If not, first with HTTP::Daemon (since it shows how to bind to a given IP in https://gist.github.com/mikkun/6388508 https://gist.github.com/mikkun/6388508, unlike HTTP::Tiny) I will try to release something similar to redbean but based on perl and DBD::SQLite > When bundled into APPerl, the script can read the files embedded in APPerl from the /zip path. That much I knew, but I was afraid there might be extra things needed > MHFS's APPerl packaging config: https://github.com/G4Vi/MHFS/blob/master/apperl/apperl-proje https://github.com/G4Vi/MHFS/blob/master/apperl/apperl-proje... Thank you! Then I might go with MHFS at first (tweaking its index.pl), if only because it's been tested by you with APPerl :)
- G4Vi 4y ago> HTTP::Daemon, HTTP::Tiny and HTTP::Server::Simple I haven't tested any. Pure Perl servers should be the easiest to get working. The Cosmopolitan Libc doesn't support fcntl F_SETFL O_NONBLOCK on Windows yet, and so non-blocking / event loop servers may be a no-go for now. > I will try to release something similar to redbean but based on perl and DBD::SQLite I'd like to see this. > Then I might go with MHFS at first I wouldn't consider MHFS's HTTP server "production ready" and suffers from the above mentioned O_NONBLOCK issue, but I'm curious how it would go. If you haven't already, feel free to join the Redbean/Cosmopolitan Libc discord to discuss. (There's a link on the APPerl webpage).
- csdvrx 4y agoFYI, building on windows make it detect Trojan:Win32/Wacatac.H!ml I used your perl.com as an input. Fake positive? Or have you been infected? Also, even if I cpan install the modules and have: "perl_repo_files" : {"cpan" : [ "HTML-Template", "URI", "Class-Inspector", "HTTP-Daemon", "HTTP-Status", "IPC-Open2" } I get: C:\test> .\test.com Can't locate HTTP/Daemon.pm in @INC (you may need to install the HTTP::Daemon module) (@INC contains: . /zip/lib/perl5/site_perl/5.36.0/x86_64-cosmo /zip/lib/perl5/site_perl/5.36.0 /zip/lib/perl5/5.36.0/x86_64-cosmo /zip/lib/perl5/5.36.0) at /zip/bin/test line 9. BEGIN failed--compilation aborted at /zip/bin/test line 9. Do I need to use https://github.com/G4Vi/MHFS/blob/master/apperl/download_package.pl https://github.com/G4Vi/MHFS/blob/master/apperl/download_pac... or something else to put the dependencies pm files in the zip?
- G4Vi 4y agoIt's mostly likely a false positive, but you're welcome to build from source with apperlm. The polygot binary format including the compressed ZIP archive probably sets off the scanners. The official APPerl binaries are compiled and uploaded by Github Actions: https://github.com/G4Vi/Perl-Dist-APPerl/blob/master/.github/workflows/build.yml https://github.com/G4Vi/Perl-Dist-APPerl/blob/master/.github... apperlm does not download perl module dependencies right now, but download_package.pl can be used to download dependencies. apperlm mostly just acts as a glorified front-end to Info-ZIP when doing a build of a "nobuild" config (building off of existing apperl) download_package.pl example https://github.com/G4Vi/MHFS/blob/6db6ad24886ca0ea335a0502286e14db4acf7e42/Makefile#L43-L71 https://github.com/G4Vi/MHFS/blob/6db6ad24886ca0ea335a050228... Edit: You can see what files were packed into it by renaming with .zip extension and opening with Windows Explorer. Edit 2: "perl_repo_files" just specifies where to copy files to inside of the perl source tree. It is only used if you are building APPerl from source (it is unused if you are building a "nobuild" config). IPC-Open2 should already be bundled in the full perl.com as it's included in the perl5 repo: https://github.com/G4Vi/perl5/tree/cosmo-apperl/ext/IPC-Open3/lib/IPC https://github.com/G4Vi/perl5/tree/cosmo-apperl/ext/IPC-Open...
- 4y ago