Update: It seems as though you should bother with mod_spdy nowadays (2011-12-22). Per the comments below, mod_spdy is again being actively maintained again. Yay!
Tonight, I am going to see how far along I can get with mod_spdy, the SPDY module for Apache. I expect that most of my work with SPDY will be in the form of node.js or Ruby implementations, but Apache affords me a nice level of comfort with respect to simply serving up files.
I get myself off to an auspicious start:
➜ spdy sudo apt-get install subversion [sudo] password for cstrom: Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: subversion-tools db4.8-util The following NEW packages will be installed: subversion 0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded. Need to get 298 kB of archives. After this operation, 1,257 kB of additional disk space will be used. Get:1 http://us.archive.ubuntu.com/ubuntu/ natty/main subversion amd64 1.6.12dfsg-4ubuntu2 [298 kB] Fetched 298 kB in 3s (85.5 kB/s) Selecting previously deselected package subversion. (Reading database ... 242860 files and directories currently installed.) Unpacking subversion (from .../subversion_1.6.12dfsg-4ubuntu2_amd64.deb) ... Processing triggers for man-db ... Setting up subversion (1.6.12dfsg-4ubuntu2) ...With that out of the way, I can download the "depot tools" source code, which I install into
~/repos/spdy
:➜ spdy svn co http://src.chromium.org/svn/trunk/tools/depot_tools A depot_tools/git-cl A depot_tools/README.gclient A depot_tools/WATCHLISTS A depot_tools/README.codereview A depot_tools/git_cl.py ... A depot_tools/wtf ... A depot_tools/zsh-goodies A depot_tools/zsh-goodies/_gclient A depot_tools/zsh-goodies/README ... A depot_tools/cpplint.bat A depot_tools/hammer.bat U depot_tools Checked out revision 82936.(gotta love a codebase with an
wtf
file)Again in
~repos/spdy
, I install :➜ spdy mkdir mod_spdy ➜ spdy cd mod_spdy ➜ mod_spdy ../depot_tools/gclient config http://mod-spdy.googlecode.com/svn/trunk/src ➜ mod_spdy ls ➜ mod_spdy ls -a . .. .gclientStrange. This is my first experience with
gclient
, but I expected more to happen than just creating a .gclient
file:➜ mod_spdy cat .gclient solutions = [ { "name" : "src", "url" : "http://mod-spdy.googlecode.com/svn/trunk/src", "custom_deps" : { }, "safesync_url": "", }, ]It seems the real magic is in the
update
sub-command, which installs a lot of stuff:➜ mod_spdy ../depot_tools/gclient update --force ________ running 'svn checkout http://mod-spdy.googlecode.com/svn/trunk/src /home/cstrom/repos/spdy/mod_spdy/src --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/build A /home/cstrom/repos/spdy/mod_spdy/src/build/common.gypi A /home/cstrom/repos/spdy/mod_spdy/src/build/gyp_chromium ... U /home/cstrom/repos/spdy/mod_spdy/src Checked out revision 143. Syncing projects: 5% ( 1/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/net/tools/flip_server@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/net/tools/flip_server --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/net/tools/flip_server/split.cc A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/net/tools/flip_server/balsa_enums.h ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/net/tools/flip_server/ring_buffer.h Checked out revision 46690. Syncing projects: 11% ( 2/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/base@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/base --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/base/windows_message_list.h ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/base/debug_message.cc U /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/base Checked out revision 46690. Syncing projects: 16% ( 3/18) ________ running 'svn checkout http://svn.apache.org/repos/asf/apr/apr/tags/1.4.2@head /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/src --revision head --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/src/config.layout A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/src/Makefile.in ... /home/cstrom/repos/spdy/mod_spdy/src/tools/grit/grit.py A /home/cstrom/repos/spdy/mod_spdy/src/tools/grit/README Checked out revision 46690. Syncing projects: 27% ( 5/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/testing@46690 /home/cstrom/repos/spdy/mod_spdy/src/testing --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/testing/README.chromium A /home/cstrom/repos/spdy/mod_spdy/src/testing/gmock ... A /home/cstrom/repos/spdy/mod_spdy/src/testing/gmock_mutant.h U /home/cstrom/repos/spdy/mod_spdy/src/testing Checked out revision 46690. Syncing projects: 33% ( 6/18) ________ running 'svn checkout http://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.15/include@head /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/include --revision head --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/include/ap_regex.h A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/include/util_time.h ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/include/http_request.h U /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/include Checked out revision 1096629. Syncing projects: 38% ( 7/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/third_party/protobuf2@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2 --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/__init__.py A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/descriptor_pb2.py A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/config.h A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protobuf.gyp U /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2 Checked out revision 46690. Syncing projects: 44% ( 8/18) ________ running 'svn checkout http://protobuf.googlecode.com/svn/trunk@327 /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/src --revision 327 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/src/post_process_dist.sh ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/src/examples/Makefile U /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/src Checked out revision 327. Syncing projects: 50% ( 9/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/tools/data_pack@46690 /home/cstrom/repos/spdy/mod_spdy/src/tools/data_pack --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/tools/data_pack/repack.py A /home/cstrom/repos/spdy/mod_spdy/src/tools/data_pack/scons.py A /home/cstrom/repos/spdy/mod_spdy/src/tools/data_pack/data_pack.py U /home/cstrom/repos/spdy/mod_spdy/src/tools/data_pack Checked out revision 46690. Syncing projects: 55% (10/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/third_party/scons@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons/README.chromium A /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons/scons-README A /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons/scons-LICENSE ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons/scons-local/SCons/Tool/cc.py A /home/cstrom/repos/spdy/mod_spdy/src/third_party/scons/scons-local/SCons/Tool/dvips.py Checked out revision 46690. Syncing projects: 61% (11/18) ________ running 'svn checkout http://gyp.googlecode.com/svn/trunk@818 /home/cstrom/repos/spdy/mod_spdy/src/tools/gyp --revision 818 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/tools/gyp/test A /home/cstrom/repos/spdy/mod_spdy/src/tools/gyp/test/additional-targets ... A /home/cstrom/repos/spdy/mod_spdy/src/tools/gyp/codereview.settings A /home/cstrom/repos/spdy/mod_spdy/src/tools/gyp/DEPS Checked out revision 818. Syncing projects: 66% (12/18) ________ running 'svn checkout http://googletest.googlecode.com/svn/trunk@408 /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest --revision 408 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest/test A /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest/test/gtest_break_on_failure_unittest_.cc ... A /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest/CMakeLists.txt Checked out revision 408. Syncing projects: 72% (13/18) ________ running 'svn checkout http://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.15/os@head /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/os --revision head --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/os/Makefile.in ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/os/.indent.pro U /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/src/os Checked out revision 1096630. Syncing projects: 77% (14/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/third_party/zlib@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib/README.chromium ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib/infback.c U /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib Checked out revision 46690. Syncing projects: 83% (15/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/site_scons/site_tools@46690 /home/cstrom/repos/spdy/mod_spdy/src/site_scons/site_tools --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/site_scons/site_tools/chromium_builders.py U /home/cstrom/repos/spdy/mod_spdy/src/site_scons/site_tools Checked out revision 46690. Syncing projects: 88% (16/18) ________ running 'svn checkout http://src.chromium.org/svn/trunk/src/build@46690 /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/build --revision 46690 --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/build/README.chromium ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/build/apply_locales.py U /home/cstrom/repos/spdy/mod_spdy/src/third_party/chromium/src/build Checked out revision 46690. Syncing projects: 94% (17/18) ________ running 'svn checkout http://svn.apache.org/repos/asf/apr/apr-util/tags/1.3.9@head /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/src --revision head --force --ignore-externals' in '/home/cstrom/repos/spdy/mod_spdy' A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/src/ldap ... A /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/src/libaprutil.rc U /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/src Checked out revision 1096632. Syncing projects: 100% (18/18), done. ________ running '/usr/bin/python src/build/gyp_chromium' in '/home/cstrom/repos/spdy/mod_spdy' Updating projects from gyp files... Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/include.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/py_proto.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protobuf_lite.host.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/include.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib/zlib.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/base/base.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protobuf_lite.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protobuf.host.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/apr.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/include.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/net/spdy.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gtestmain.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gmock.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protoc.host.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/aprutil.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/mod_diagnostics/mod_diagnostics.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_spdy/spdy_common.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gmockmain.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/base/base_unittests.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/net/spdy_test.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_static/http_response_proto.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_spdy/spdy_common_test.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_spdy/spdy_apache.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_static/mod_static.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_spdy/mod_spdy.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/build/All.target.mk Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/protobuf2/protobuf.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/apr/apr.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_static/mod_static.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/httpd/httpd.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/apache/aprutil/aprutil.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/net/net.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/zlib/zlib.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gtest.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/third_party/mod_diagnostics/mod_diagnostics.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/base/base.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/build/all.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/mod_spdy/mod_spdy.Makefile Generating /home/cstrom/repos/spdy/mod_spdy/src/testing/gmock.MakefileWhoa. So
gclient
is apparently some kind of subversion wrapper with extensions for managing svn:external
. Hopefully I won't need to learn too much more about it.Next, I attempt to compile the code:
➜ mod_spdy cd src ➜ src make CC(target) out/Debug/obj.target/base/third_party/chromium/src/base/setproctitle_linux.o CXX(target) out/Debug/obj.target/base/base/string16.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/third_party/dmg_fp/dtoa.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/third_party/dmg_fp/g_fmt.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/at_exit.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/debug_util.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/debug_util_posix.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/lock.o CXX(target) out/Debug/obj.target/base/third_party/chromium/src/base/lock_impl_posix.o CXX(target) out/Debug/obj.target/base/base/logging.o ... CXX(target) out/Debug/obj.target/protobuf_lite/third_party/protobuf2/src/src/google/protobuf/stubs/hash.o In file included from /usr/include/c++/4.5/ext/hash_map:60:0, from third_party/protobuf2/src/src/google/protobuf/stubs/hash.h:43, from third_party/protobuf2/src/src/google/protobuf/stubs/hash.cc:33: /usr/include/c++/4.5/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. CXX(target) out/Debug/obj.target/protobuf_lite/third_party/protobuf2/src/src/google/protobuf/extension_set.o In file included from /usr/include/c++/4.5/ext/hash_map:60:0, from third_party/protobuf2/src/src/google/protobuf/stubs/hash.h:43, from third_party/protobuf2/src/src/google/protobuf/extension_set.cc:35: /usr/include/c++/4.5/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. CXX(target) out/Debug/obj.target/protobuf_lite/third_party/protobuf2/src/src/google/protobuf/generated_message_util.o ... RULE http_response_proto_genproto_0 out/Debug/obj/gen/protoc_out/mod_static/http_response.pb.h TOUCH out/Debug/obj.target/mod_static/http_response_proto.stamp CXX(target) out/Debug/obj.target/mod_static/mod_static/mod_static.o CXX(target) out/Debug/obj.target/mod_static/gen/protoc_out/mod_static/http_response.pb.o SOLINK(target) out/Debug/obj.target/mod_static/libmod_static.so COPY out/Debug/libmod_static.so CXX(target) out/Debug/obj.target/spdy_test/net/spdy/spdy_protocol_test.o cc1plus: warnings being treated as errors net/spdy/spdy_protocol_test.cc: In member function ‘virtual voidGah!::SpdyProtocolTest_FrameStructs_Test::TestBody()’: net/spdy/spdy_protocol_test.cc:64:3: error: converting ‘false’ to pointer type for argument 1 of ‘char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)’ net/spdy/spdy_protocol_test.cc:70:3: error: converting ‘false’ to pointer type for argument 1 of ‘char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)’ net/spdy/spdy_protocol_test.cc: At global scope: net/spdy/spdy_protocol_test.cc:40:1: error: ‘<unnamed>::SpdyProtocolTest_ProtocolConstants_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:58:1: error: ‘<unnamed>::SpdyProtocolTest_FrameStructs_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:73:1: error: ‘ ::SpdyProtocolTest_DataFrameStructs_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:79:1: error: ‘ ::SpdyProtocolTest_ControlFrameStructs_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:125:1: error: ‘<unnamed>::SpdyProtocolTest_TestDataFrame_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:168:1: error: ‘ ::SpdyProtocolTest_TestSpdySettingsFrame_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:217:1: error: ‘ ::SpdyProtocolDeathTest_TestDataFrame_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:234:1: error: ‘ ::SpdyProtocolDeathTest_TestSpdyControlFrameStreamId_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:249:1: error: ‘ ::SpdyProtocolDeathTest_TestSpdyControlFrameVersion_Test::test_info_’ defined but not used net/spdy/spdy_protocol_test.cc:270:1: error: ‘ ::SpdyProtocolDeathTest_TestSpdyControlFrameType_Test::test_info_’ defined but not used make: *** [out/Debug/obj.target/spdy_test/net/spdy/spdy_protocol_test.o] Error 1
It seems I have run afowl of life on the bleeding edge: Issue 16: Build failure using GCC 4.5.2 on Gentoo.
I started out with mod_spdy to retain some comfort level. Given that, I am not going to try to investigate C++ errors (at least not tonight). Instead... to the VM!
Specifically, I retrace my steps on an Ubuntu 10.10 VM:
chris@chris-VirtualBox:~/spdy/mod_spdy/src$ make ... CXX(target) out/Debug/obj.target/spdy_test/net/spdy/spdy_framer_test.o LINK(target) out/Debug/spdy_test CC(target) out/Debug/obj.target/mod_diagnostics/third_party/mod_diagnostics/mod_diagnostics.o third_party/mod_diagnostics/mod_diagnostics.c: In function ‘diagnostic_ofilter’: third_party/mod_diagnostics/mod_diagnostics.c:73: warning: format not a string literal and no format arguments third_party/mod_diagnostics/mod_diagnostics.c: In function ‘diagnostic_ifilter’: third_party/mod_diagnostics/mod_diagnostics.c:102: warning: format ‘%d’ expects type ‘int’, but argument 10 has type ‘apr_off_t’ SOLINK(target) out/Debug/obj.target/third_party/mod_diagnostics/libmod_diagnostics.so COPY out/Debug/libmod_diagnostics.so TOUCH out/Debug/obj.target/build/All.stampI guess that qualifies as success. At least it didn't exit with an error code.
Lacking any documentation, I locate what looks to be an Apache module in
mod_spdy/src/out/Debug
:chris@chris-VirtualBox:~/spdy/mod_spdy/src/out/Debug$ ls *so libmod_diagnostics.so libmod_spdy.so libmod_static.soSo I copy
libmod_spdy.so
to /usr/lib/apache2/modules/
:chris@chris-VirtualBox:~/spdy/mod_spdy/src/out/Debug$ sudo cp libmod_spdy.so /usr/lib/apache2/modules/I then create a load file,
spdy.load
:chris@chris-VirtualBox:/etc/apache2/mods-available$ cat spdy.load LoadModule spdy_module /usr/lib/apache2/modules/libmod_spdy.soAnd, finally enable that module:
chris@chris-VirtualBox:/etc/apache2/mods-enabled$ cd /etc/apache2/mods-enabled/ chris@chris-VirtualBox:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/spdy.loadWith that, I get a nice little warning about an experimental module when I restart apache:
chris@chris-VirtualBox:/etc/apache2/mods-enabled$ sudo /etc/init.d/apache2 restart * Restarting web server apache2 [Mon Apr 25 23:50:52 2011] [warn] [0425/235052:WARNING:mod_spdy/mod_spdy.cc(203)] mod_spdy is currently an experimental Apache module. It is not yet suitable for production environments and may have stability issues. ... waiting [Mon Apr 25 23:50:53 2011] [warn] [0425/235053:WARNING:mod_spdy/mod_spdy.cc(203)] mod_spdy is currently an experimental Apache module. It is not yet suitable for production environments and may have stability issues. ...done.Nice. But does it work?
The answer to that, unfortunately is a resounding no. Attempting to access the web server—either via Chrome or
curl
proves fruitless. In the apache error log, I find:[Mon Apr 25 23:35:06 2011] [warn] [0425/233506:WARNING:net/spdy/spdy_framer.cc(243)] Unexpectedly large frame. Spdy session is likely corrupt. [0425/233506:FATAL:mod_spdy/common/spdy_stream_distributor.cc(62)] Check failed: false. Backtrace: /usr/lib/apache2/modules/libmod_spdy.so(StackTrace::StackTrace()+0x2c) [0x6062fe] /usr/lib/apache2/modules/libmod_spdy.so(+0x272b2) [0x5ff2b2] /usr/lib/apache2/modules/libmod_spdy.so(logging::LogMessage::~LogMessage()+0x7d) [0x608137] /usr/lib/apache2/modules/libmod_spdy.so(mod_spdy::SpdyStreamDistributor::OnError(spdy::SpdyFramer*)+0x88) [0x6287b2] /usr/lib/apache2/modules/libmod_spdy.so(spdy::SpdyFramer::set_error(spdy::SpdyFramer::SpdyError)+0xd5) [0x621617] /usr/lib/apache2/modules/libmod_spdy.so(spdy::SpdyFramer::ProcessDataFramePayload(char const*, unsigned int)+0x173) [0x622343] /usr/lib/apache2/modules/libmod_spdy.so(spdy::SpdyFramer::ProcessInput(char const*, unsigned int)+0x1e6) [0x62186e] /usr/lib/apache2/modules/libmod_spdy.so(mod_spdy::SpdyFramePump::PumpAtMost(unsigned int)+0x139) [0x627987] /usr/lib/apache2/modules/libmod_spdy.so(mod_spdy::SpdyFramePump::PumpMoreBytes()+0x18e) [0x627740] /usr/lib/apache2/modules/libmod_spdy.so(mod_spdy::SpdyFramePump::PumpOneFrame()+0x33) [0x62754b] /usr/lib/apache2/modules/libmod_spdy.so(mod_spdy::SpdyInputFilter::Read(ap_filter_t*, apr_bucket_brigade*, ap_input_mode_t, apr_read_type_e, long long)+0x100) [0x600152] /usr/lib/apache2/modules/libmod_spdy.so(+0x26968) [0x5fe968] /usr/sbin/apache2(ap_get_brigade+0x43) [0x79cf13] /usr/sbin/apache2(ap_rgetline_core+0xa1) [0x7837b1] /usr/sbin/apache2(ap_read_request+0x261) [0x784191] /usr/sbin/apache2(+0x43fde) [0x7a0fde] /usr/sbin/apache2(ap_run_process_connection+0x61) [0x7999c1] /usr/sbin/apache2(+0x4db4b) [0x7aab4b] /usr/lib/libapr-1.so.0(+0x25bc5) [0x286bc5] /lib/libpthread.so.0(+0x5cc9) [0xb4ecc9] /lib/libc.so.6(clone+0x5e) [0x35e6ae] [Mon Apr 25 23:35:06 2011] [notice] child pid 1697 exit signal Trace/breakpoint trap (5)Bah! This looks to be due to
mod_spdy
being dead code. The SPDY specification has progressed to draft 2, while mod_spdy
has been stuck on the original draft since it was abandoned.Bummer. Looks like I will get to code implementations sooner than expected. Tomorrow.
Day #1
Hi Chris,
ReplyDeleteSorry the module did not work for you. We had put it on hold for a period but have picked up development again. You can try out mod_spdy here: http://code.google.com/p/mod-spdy/wiki/GettingStarted
@Bryan Yay! Good news :)
ReplyDeleteI put an update at the top of the post encouraging folks to give it a try.
Thanks Chris!
ReplyDeleteAny chance you are able to change the title of the post? When I Google "mod_spdy" the current post title "Don't bother with mod_spdy" comes up. I don't want people to get discouraged from trying the module based on the title (though if they do click through to the post they will see your update which is great). I can't remember if you're able to change blogger post titles or not. If not, no big deal. If so, would be much appreciated.
Either way, thanks for updating!
Done. I can't change the URL, but can change the title.
DeleteCrazy that this useless post has Google juice :P