For schema upgrades, hydra-init executes the files src/sql/upgrade-<N>.sql, each of which upgrades the schema from version N-1 to N. The upgrades are wrapped in a transaction.
AMFMXR52JXHUOWWG4VZ5DHQGLF4F7H7XSJRLX5XNEXOCCWYLDQOAC AIEKRM6TQFURIZESUF57IQYO5RXFRBL7SOFSCX72CVKUN3UKK3DAC CFZ6WDUZK3WTKJJLLXVS5MATNP7WCMKHAXKBCTO6OM6CDTQBKBTQC TH674WKJECNZ4K22DZ2N4SF53UGKG2BQRGBSNESRPDRSRND6TZHAC 46Z25UHSGPWEF7QSXODHKNGRHWEYX5JOCCZYI67S2NJTWY5JDN4AC DXBTGOA4JXRSEZBDKGVJ4QDXCSQZWI5DHTSULWG4APNPOSLF3CDAC 7DWCXNC72OO3M4YGNVV4KM775CUSPBHEFFNMRIA2XAZTQCXYHBRQC SB2V735VJ2CDHGCXRUA5FOYHDRXQFVOZ3KXC3YKXWRNW6DIX7RXQC GYPHTT4MZS75JYMQES2DZPV2D47EJW5HTQWYWDYXE7YJ6FFHPAYAC SAFVRDTKKD25U6VW5IVNUILLLXNQXFU72XARYC6NRVXU6MJEW2WAC DO432JDJH2NWZC6AMN7PG6WYD2Y26U6O54GDMBEVBQTZEVNKBN5QC BQYE6R7YVBXS72FXT4WJFXJ2KARTW2V65TVSTFGCE5TK2BL3ZQVAC HSVVEKTY2U5XJ4ZDHF43YEQXRPRWNZLZDDD4W7JFJ55UWD7CEFBQC OG7BEM57MXPCG56IT5GODPFG77KZXWPXZ7OVZPWQQ56CRJ7KUE2QC QUTWJR7PQZ3DBPC4G2AFXOKPPGFZQLE5RLXHAOFTLMXIT2QPF4TQC CXRCPDSQEWHSZNCJIORUAINH5I2FFFQ7AVUQOB62REGROLROPE7QC YFPZ46YK4BOI6VH2H3F757UEGEYONURUAEDAYEIBLRY33PLSSO4AC BKOIYITRBRVU4D7XFAZPV5QHAPCBMIO3SBNHYJ6TVT43WR32CTHQC 6XJH4OFLFN6PC5FXKMHSPQQVT5DKWFUWO43HMQ7BDM454ZDMD5VQC SZYDW2DG5Z7BR3ICKWDXVUNSMCDSXMYZUB6FQ4W2B2FVZJD6PULQC G2ZB6464XGPBIMSZIPSB24EIXSCCGV4XWC3IWPS2CXYPDSUZSU5QC 3YSK5YXGW3JKJUPYNHDQSB4ZCUMBSFKHCGWI4IIXJ277OBYRSU2AC EKNK5AHQNJDKGLFPEX6CQXNPVIOWX3JXEP2H5YUZ4UFWCZ3HEJLQC KBW3FDZ2PK7YCH3ICSHFWP22CWXYAXIPULP6LEN3S3K22UT4WSVQC W5GW4E225F3CYJQXFPKJ5W5O2E73U6ZGWFL2N3GS2LKJX2RTGYDQC HN7JDKV3DG4KYJHD6YWWRWGCNLUJQFI7EHRQBXZXWOM4QFGH275AC 6US6LEC7V7LUTMPXOWGU7D4PQAFOG2AKNW4VBPSENNBEDMTBJCVQC RBGYFVWXQNXAZ57534WQQJH6PYW7PU6YZLSCLXDZYXACXDA2D3NQC 2GK5DOU7ODF4WBSN3QTD3WIO52VTL2LOAXKGCDEMMAQPTEO4A4HAC IN272KZWHENW2TCR3LWQ6OZAEESJL5S7AEL3GYLJTWHJUDE6HADAC A63IHCMXH3F4V56HDXJLJVVHKXRSJCJMT2PWXXI2IW3J734J6SGQC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC FV2M6MOTAP4BJMEKU5XUDVEACWEJGEIRCCE2MRY3F6SF2SFOE3MQC KN3VYE5P2RJB3KZ355LA5C2T2D5S2IR3QZFE53AJIWUVMETEEYDAC N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC VOBFCHIXMHWXLRA2EBJVKGIIYDGMVYOVQAUTKCHWRSUHV34XS57AC EDDTVGB47XYPTKJ3P4XAQ4MZ2NFKAMK2JE6GSEMWAO4EJVGPYHPQC perlPackages.CatalystPluginAuthorizationRolesperlPackages.CatalystPluginSessionStateCookieperlPackages.CatalystPluginAccessLogperlPackages.CatalystAuthenticationStoreDBIxClassperlPackages.CatalystViewTT
perlPackages.DataDumpperlPackages.JSONXSperlPackages.DateTimeperlPackages.DigestSHA1perlPackages.CryptRandPasswdperlPackages.TestMoreperlPackages.SysHostnameLong
perlPackages.CatalystDevelperlPackages.ReadonlyperlPackages.SQLSplitStatement
createdb hydraecho "CREATE USER hydra WITH PASSWORD '<your-password>' ;" | psql hydracat $prefix/share/hydra/sql/hydra-postgresql.sql | psql hydraecho "GRANT ALL ON DATABASE hydra TO hydra;" | psql hydra</screen>
createuser -S -D -R -P hydracreatedb -O hydra hydra</screen>
For SQLite, the following command is all it takes to create thedatabase:
Hydra uses an environment variable to know which database shouldbe used, and a variable which point to a location that holdssome state. To set these variables for a PostgreSQL database,add the following to the file <filename>~/.profile</filename> ofthe user running the Hydra services.
cat $prefix/share/hydra/sql/hydra-sqlite.sql | sqlite3 /path/to/hydra.sqlite</screen>
export HYDRA_DBI="dbi:Pg:dbname=hydra;host=dbserver.example.org;user=hydra;"export HYDRA_DATA=/var/lib/hydra</screen>You can provide the username and password in the file<filename>~/.pgpass</filename>, e.g.<screen>dbserver.example.org:*:hydra:hydra:password</screen>Make sure that the <emphasis>HYDRA_DATA</emphasis> directoryexists and is writable for the user which will run the Hydraservices. For a SQLite database, the<varname>HYDRA_DBI</varname> should be set to something like<literal>dbi:SQLite:/path/to/hydra.sqlite</literal>
<para>Hydra uses an environment variable to know which database shouldbe used, and a variable which point to a location that holdssome state. To set these variables for a PostgreSQL database,add the following to the <filename>.profile</filename> of theuser running the Hydra services.
</section><section><title>Upgrading</title>
Make sure that the <emphasis>HYDRA_DATA</emphasis> directoryexists and is writable for the user which will run the Hydraservices. For a SQLite database, the<varname>HYDRA_DBI</varname> should be set to something like<literal>dbi:SQLite:/path/to/hydra.sqlite</literal></para>
#! /var/run/current-system/sw/bin/perl -wuse strict;use Hydra::Schema;use Hydra::Helper::Nix;use File::Slurp;use SQL::SplitStatement;use List::Util qw(max);my $db = openHydraDB;my $dbh = $db->storage->dbh;$dbh->{RaiseError} = 1;my $home = getHydraHome;my $sql_splitter = SQL::SplitStatement->new;# Figure out the target schema version.my $maxSchemaVersion = max (map { /.*\/upgrade-(\d.*)\.sql/; $1 } (glob "$home/sql/upgrade-[0-9]*.sql")) || 1;# Check whether the database has been initialised. If not, load the# schema.my @tables = $dbh->tables;if (! grep { /SchemaVersion/i } @tables) {print STDERR "initialising the Hydra database schema...\n";my $schema = read_file($dbh->{Driver}->{Name} eq 'SQLite' ? "$home/sql/hydra-sqlite.sql" :$dbh->{Driver}->{Name} eq 'Pg' ? "$home/sql/hydra-postgresql.sql" :die "unsupported database type\n");my @statements = $sql_splitter->split($schema);eval {$dbh->begin_work;$dbh->do($_) foreach @statements;$db->resultset('SchemaVersion')->create({version => $maxSchemaVersion});$dbh->commit;};die "schema initialisation failed: $@\n" if $@;exit 0;}# Get the current schema version.my @versions = $db->resultset('SchemaVersion')->all;die "couldn't get Hydra schema version!" if scalar @versions != 1;my $schemaVersion = $versions[0]->version;for (my $n = $schemaVersion; $n < $maxSchemaVersion; $n++) {my $m = $n + 1;print STDERR "upgrading Hydra schema from version $n to $m\n";my $schema = read_file("$home/sql/upgrade-$m.sql");my @statements = $sql_splitter->split($schema);eval {$dbh->begin_work;$dbh->do($_) foreach @statements;$db->resultset('SchemaVersion')->update({version => $m});$dbh->commit;};die "schema upgrade failed: $@\n" if $@;}