libsql-client-ts icon indicating copy to clipboard operation
libsql-client-ts copied to clipboard

Illegal instruction (core dumped)

Open ambrt opened this issue 1 year ago • 1 comments

I basically do this:

import { createClient } from "@libsql/client";

const client = createClient({
  url: "file:local.db",
});
await client.batch(
        [
            "CREATE TABLE IF NOT EXISTS users (email TEXT)"
        ],
        "write",
    );

and get Illegal instruction (core dumped) same on Nodes 18,19 and 20

my envinfo:

  System:
    OS: Linux 5.4 Ubuntu 20.04.6 LTS (Focal Fossa)
    CPU: (2) x64 Intel(R) Core(TM)2 Duo CPU     E4500  @ 2.20GHz
    Memory: 537.44 MB / 3.83 GB
    Container: Yes
    Shell: 5.0.17 - /bin/bash
  Binaries:
    Node: 18.20.4 - ~/.nvm/versions/node/v18.20.4/bin/node
    Yarn: 1.22.17 - /usr/local/bin/yarn
    npm: 10.7.0 - ~/.nvm/versions/node/v18.20.4/bin/npm
    bun: 1.0.26 - ~/.bun/bin/bun
    Watchman: 20201115.021953.0 - /usr/local/bin/watchman
  Managers:
    Apt: 2.0.10 - /usr/bin/apt
    Gradle: 8.6 - ~/.sdkman/candidates/gradle/current/bin/gradle
    pip2: 20.1.1 - /usr/local/bin/pip2
    pip3: 20.0.2 - /usr/bin/pip3
    RubyGems: 3.1.2 - /usr/bin/gem
  Utilities:
    CMake: 3.16.3 - /usr/bin/cmake
    Make: 4.2.1 - /usr/bin/make
    GCC: 9.4.0 - /usr/bin/gcc
    Git: 2.25.1 - /usr/bin/git
    Clang: 8.0.1 - /usr/bin/clang
    Ninja: 1.10.0 - /usr/bin/ninja
    FFmpeg: 4.2.7 - /usr/bin/ffmpeg
    Curl: 7.68.0 - /usr/bin/curl
    OpenSSL: 1.1.1 - /usr/bin/openssl
  Virtualization:
    Docker: 24.0.7 - /usr/bin/docker
    Docker Compose: 1.25.0 - /usr/bin/docker-compose
  SDKs:
    Android SDK:
      API Levels: 23, 29, 31, 33
      Build Tools: 31.0.0
      System Images: android-31 | Intel x86_64 Atom, android-31 | Google APIs Intel x86_64 Atom, android-33 | Google APIs Intel x86_64 Atom
  IDEs:
    Nano: 4.8 - /bin/nano
    VSCode: 1.92.1 - /snap/bin/code
    Vim: 8.1 - /usr/bin/vim
  Languages:
    Bash: 5.0.17 - /bin/bash
    Java: 11.0.23 - /usr/bin/javac
    Perl: 5.30.0 - /usr/bin/perl
    PHP: 7.4.3 - /usr/bin/php
    Python: 2.7.18 - /usr/bin/python
    Python3: 3.8.10 - /usr/bin/python3
    Ruby: 2.7.0 - /usr/bin/ruby
  Databases:
    MongoDB: 3.6.8 - /usr/bin/mongo
    MySQL: 0.20.04.3 - /usr/bin/mysql
    SQLite: 3.42.0 - /home/u/Android/platform-tools/sqlite3
  Browsers:
    Chrome: 127.0.6533.99

ambrt avatar Aug 12 '24 12:08 ambrt

Just found out that when using in memory db, it doesn't throw error. Like: const client = createClient({url: ":memory:"});

ambrt avatar Aug 12 '24 12:08 ambrt

So it's a problem with AVX or AVX2 instructions that my cpu doesn't have.

Solution is to use Intel SDE that emulates needed instructions and prebuilt sqld as server.

Download required SDE, server and:

cd libsql-server
~/Downloads/sde-external-9.24.0-2023-07-13-lin/sde64 -snb -- sqld --http-listen-addr 192.168.0.15:4000

Notes:

  • Use -snb flag that's needed for sde to skip failing cpu check. It was required to run it in my case.
  • Client url should be for example TURSO_ULR=http://192.158.0.15:4000 instead of libsql://192..... With libsql protocol, client library assumes SSL is set and tries to query the database with HTTPS://.

ambrt avatar Jan 14 '25 17:01 ambrt